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 setupData = getSetupData(); let userData = getUserData(); let adStrategy; if (setupData.ldap !== undefined) { adStrategy = require('../models/Passport-ActiveDirectory'); } let DiscordStrategy; if (setupData.discord !== undefined) { DiscordStrategy = require('../models/Passport-Discord'); } let user = userData; if (user.identifyURL) { app.get("/auth/discord", (req, res) => { res.redirect(user.identifyURL); }); } else { } router.use(passport.initialize()); router.use(passport.session()); router.get('/login', function(req, res) { const setupFilePath = path.join('setup.json'); const setupData = JSON.parse(fs.readFileSync(setupFilePath, 'utf-8')); res.render('AuthLogin', { setupData, isAuthenticated: false, errorMessage: '', showActiveDirectoryForm: true, 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', opts, (err, user, info) => { if (err) { return res.render('AuthLogin', { isAuthenticated: false, errorMessage: err.message, setupData: {}, showActiveDirectoryForm: true, currentUrl: req.originalUrl }); } if (!user) { 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, }; req.logIn(req.user, function(err) { if (err) { return next(err); } 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;