110 lines
3.1 KiB
JavaScript
110 lines
3.1 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 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', (err, user) => {
|
|
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; |