X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2Fauth.js;h=b56f09fbc9f736d254689b45a09e73309da69ec2;hb=3d716d9ef715d3bfd70631161d022abda0467b71;hp=c003d2aaaf50f2b4d581a53e5b2beaf39036250e;hpb=cfe24a278b68cd859e8f98cb0d8be92d49508a32;p=perso%2FImmae%2FProjets%2FNodejs%2FSurfer.git diff --git a/src/auth.js b/src/auth.js index c003d2a..b56f09f 100644 --- a/src/auth.js +++ b/src/auth.js @@ -1,8 +1,13 @@ '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); @@ -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); }));