All checks were successful
continuous-integration/drone/push Build is passing
Note: We appreciate your feedback and bug reports to continue improving our platform. Thank you for your continued support!
60 lines
1.5 KiB
JavaScript
60 lines
1.5 KiB
JavaScript
const passport = require('passport');
|
|
const ActiveDirectoryStrategy = require('passport-activedirectory');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const { getUserData } = require('../Middlewares/watcherMiddleware');
|
|
|
|
const setupFilePath = path.join(__dirname, '../data', 'setup.json');
|
|
const userFilePath = path.join(__dirname, '../data', 'user.json');
|
|
|
|
const setupData = JSON.parse(fs.readFileSync(setupFilePath, 'utf-8'));
|
|
|
|
passport.use(new ActiveDirectoryStrategy({
|
|
integrated: false,
|
|
ldap: {
|
|
url: setupData[0].ldap.url,
|
|
baseDN: setupData[0].ldap.baseDN,
|
|
username: setupData[0].ldap.username,
|
|
password: setupData[0].ldap.password
|
|
}
|
|
}, function (profile, ad, done) {
|
|
ad.isUserMemberOf(profile._json.dn, 'CDN-Access', function (err, isMember) {
|
|
if (err) return done(err);
|
|
|
|
if (!isMember) {
|
|
return done(null, false, { message: 'L\'utilisateur n\'est pas autorisé.' });
|
|
}
|
|
|
|
return done(null, profile);
|
|
});
|
|
}));
|
|
|
|
passport.serializeUser((user, done) => {
|
|
done(null, user.name);
|
|
});
|
|
|
|
passport.deserializeUser(async (id, done) => {
|
|
const users = await getUserData();
|
|
|
|
const user = users.find(u => u.name === id || u.name === `.${id}`);
|
|
|
|
if (user) {
|
|
return done(null, user);
|
|
} else {
|
|
const newUser = {
|
|
id: Date.now().toString(),
|
|
name: id,
|
|
role: 'user'
|
|
};
|
|
|
|
users.push(newUser);
|
|
|
|
fs.writeFile(userFilePath, JSON.stringify(users, null, 2), (err) => {
|
|
if (err) return done(err);
|
|
return done(null, newUser);
|
|
});
|
|
}
|
|
});
|
|
|
|
module.exports = passport;
|