X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2Fauth.js;h=b56f09fbc9f736d254689b45a09e73309da69ec2;hb=74c0064c7dca1c0a96eef4962adb6cd61f33ec6c;hp=83d0426d4e3388604c4cc0f343fde559cb105349;hpb=a90a633f030f44bd8142e1d44a8312e952e620bb;p=perso%2FImmae%2FProjets%2FNodejs%2FSurfer.git diff --git a/src/auth.js b/src/auth.js index 83d0426..b56f09f 100644 --- a/src/auth.js +++ b/src/auth.js @@ -1,16 +1,21 @@ '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.id); + done(null, user.uid); }); passport.deserializeUser(function (id, done) { console.log('deserializeUser', id); - done(null, { id: id }); + done(null, { uid: id }); }); var LDAP_URL = process.env.LDAP_URL; @@ -19,15 +24,19 @@ 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'); + exports.verify = passport.authenticate('ldap'); } else { - exports.ldap = function (req, res, next) { - console.log('Disable ldap auth, use developer credentials!'); + console.log('Use local user file:', LOCAL_AUTH_FILE); - if (req.query.username !== 'username') return res.send(401); - if (req.query.password !== 'password') return res.send(401); + 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); - next(); + bcrypt.compare(req.query.password, users[req.query.username].passwordHash, function (error, valid) { + if (error || !valid) return res.send(401); + next(); + }); }; } @@ -37,7 +46,7 @@ var opts = { }, base: LDAP_USERS_BASE_DN, search: { - filter: '(uid={{username}})', + filter: '(|(username={{username}})(mail={{username}}))', attributes: ['displayname', 'username', 'mail', 'uid'], scope: 'sub' }, @@ -47,6 +56,5 @@ var opts = { }; passport.use(new LdapStrategy(opts, function (profile, done) { - console.log('ldap', profile); done(null, profile); }));