X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2Fauth.js;h=b56f09fbc9f736d254689b45a09e73309da69ec2;hb=3d716d9ef715d3bfd70631161d022abda0467b71;hp=3d2acce1eeb116a7bf3688bf3852e102beaba312;hpb=591ad40c9613c91069047ca0781a4b38fd2a8a1b;p=perso%2FImmae%2FProjets%2FNodejs%2FSurfer.git diff --git a/src/auth.js b/src/auth.js index 3d2acce..b56f09f 100644 --- a/src/auth.js +++ b/src/auth.js @@ -1,23 +1,42 @@ 'use strict'; var passport = require('passport'), + path = require('path'), + safe = require('safetydance'), + bcrypt = require('bcryptjs'), LdapStrategy = require('passport-ldapjs').Strategy; +var LOCAL_AUTH_FILE = path.resolve(process.env.LOCAL_AUTH_FILE || './.users.json'); + +passport.serializeUser(function (user, done) { + console.log('serializeUser', user); + done(null, user.uid); +}); + +passport.deserializeUser(function (id, done) { + console.log('deserializeUser', id); + done(null, { uid: id }); +}); + var LDAP_URL = process.env.LDAP_URL; var LDAP_USERS_BASE_DN = process.env.LDAP_USERS_BASE_DN; if (LDAP_URL && LDAP_USERS_BASE_DN) { console.log('Enable ldap auth'); - exports.ldap = passport.authenticate('ldap', { - successReturnToOrRedirect: '/', - failureRedirect: '/login', - failureFlash: true - }); + exports.verify = passport.authenticate('ldap'); } else { - exports.ldap = function (req, res, next) { - console.log('ldap auth disabled'); - next(); + console.log('Use local user file:', LOCAL_AUTH_FILE); + + exports.verify = function (req, res, next) { + var users = safe.JSON.parse(safe.fs.readFileSync(LOCAL_AUTH_FILE)); + if (!users) return res.send(401); + if (!users[req.query.username]) return res.send(401); + + bcrypt.compare(req.query.password, users[req.query.username].passwordHash, function (error, valid) { + if (error || !valid) return res.send(401); + next(); + }); }; } @@ -27,16 +46,15 @@ var opts = { }, base: LDAP_USERS_BASE_DN, search: { - filter: '(uid={{username}})', + filter: '(|(username={{username}})(mail={{username}}))', attributes: ['displayname', 'username', 'mail', 'uid'], scope: 'sub' }, - uidTag: 'uid', + uidTag: 'cn', usernameField: 'username', passwordField: 'password', }; passport.use(new LdapStrategy(opts, function (profile, done) { - console.log('ldap', profile); done(null, profile); }));