Files
CDN-APP-INSIDER/routes/auth.js
Dinawo 8f3e604774
All checks were successful
continuous-integration/drone/push Build is passing
Update .gitignore and add new dependencies and routes
2024-04-02 20:59:13 +02:00

128 lines
3.7 KiB
JavaScript

const express = require('express');
const router = express.Router();
const passport = require('passport');
const fs = require('fs');
const { checkUserExistsAD } = require('../Middlewares/UserIDMiddlewareAD');
const { checkUserExistsDiscord } = require('../Middlewares/UserIDMiddlewareDiscord');
const path = require('path');
const { getUserData, getSetupData } = require('../Middlewares/watcherMiddleware');
let userData = getUserData();
let setupData;
let adStrategy;
getSetupData().then(data => {
setupData = data;
if (setupData[0].ldap !== undefined) {
adStrategy = require('../models/Passport-ActiveDirectory');
adStrategy.name = 'active-directory';
passport.use(adStrategy);
} else {
console.log('LDAP data is not defined in setup data');
}
if (setupData[0].discord !== undefined) {
const DiscordStrategy = require('../models/Passport-Discord');
}
});
let user = userData;
if (user.identifyURL) {
app.get("/auth/discord", (req, res) => {
res.redirect(user.identifyURL);
});
}
router.use(passport.initialize());
router.use(passport.session());
router.get('/login', function(req, res) {
const setupFilePath = path.join('data', 'setup.json');
const setupData = JSON.parse(fs.readFileSync(setupFilePath, 'utf-8'));
const showActiveDirectoryForm = setupData.ldap && setupData.ldap.enabled === 'on';
res.render('AuthLogin', { setupData, isAuthenticated: false, errorMessage: '', showActiveDirectoryForm, currentUrl: req.originalUrl });
});
passport.deserializeUser((user, done) => {
done(null, user);
});
router.get('/logout', (req, res) => {
req.logout(function(err) {
if (err) {
return next(err);
}
res.redirect('/auth/login');
});
});
var opts = { failWithError: true }
router.post('/activedirectory', (req, res, next) => {
passport.authenticate('ActiveDirectory', (err, user) => {
if (err) {
console.log('Authentication error:', err); // Debug log
return res.render('AuthLogin', { isAuthenticated: false, errorMessage: err.message, setupData: {}, showActiveDirectoryForm: true, currentUrl: req.originalUrl });
}
if (!user) {
console.log('User not authorized'); // Debug log
return res.render('AuthLogin', { isAuthenticated: false, errorMessage: 'L\'utilisateur n\'est pas autorisé.', setupData: {}, showActiveDirectoryForm: true, currentUrl: req.originalUrl });
}
req.user = {
...user._json,
name: user._json.sAMAccountName,
id: user._json.sAMAccountName,
};
console.log('User object:', req.user); // Debug log
req.logIn(req.user, function(err) {
if (err) {
console.log('Login error:', err); // Debug log
return next(err);
}
console.log('User logged in successfully'); // Debug log
req.session.user = req.user;
return next();
});
})(req, res, next);
}, checkUserExistsAD);
router.get("/discord", (req, res) => {
res.redirect(setupData.discord.identifyURL);
});
router.get('/discord/callback', (req, res, next) => {
passport.authenticate('discord', (err, user, info) => {
if (err) {
return next(err);
}
if (!user) {
return res.redirect('/auth/login');
}
req.logIn(user, (loginErr) => {
if (loginErr) {
return next(loginErr);
}
checkUserExistsDiscord(req, res, () => {
if (req.userExists) {
return res.redirect('/dpanel/dashboard');
} else {
createUser(req.user, (createErr) => {
if (createErr) {
return next(createErr);
}
return res.redirect('/dpanel/dashboard');
});
}
});
});
})(req, res, next);
});
module.exports = router;