diff options
| author | Jules Laplace <julescarbon@gmail.com> | 2017-12-08 02:18:49 +0100 |
|---|---|---|
| committer | Jules Laplace <julescarbon@gmail.com> | 2017-12-08 02:18:49 +0100 |
| commit | bbbd8bbab8737f5067c85376daf79cd8a5a9c4cb (patch) | |
| tree | 844d1385d7b88623eee3c2ea2c420280006ad349 /bucky/util/auth.js | |
| parent | e4e0cf21a31b74d5ee1e6d45b343ea60ed44f372 (diff) | |
| parent | df674eef8e20c43426c0af5aa3d1a09b5e24c58a (diff) | |
merge
Diffstat (limited to 'bucky/util/auth.js')
| -rw-r--r-- | bucky/util/auth.js | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/bucky/util/auth.js b/bucky/util/auth.js new file mode 100644 index 0000000..436d5e6 --- /dev/null +++ b/bucky/util/auth.js @@ -0,0 +1,78 @@ + +var passport = require('passport'), + LocalStrategy = require('passport-local').Strategy, + crypto = require('crypto'), + db = require('../db'); + + +var auth = module.exports = { + + init: function(){ + passport.serializeUser(auth.serializeUser) + passport.deserializeUser(auth.deserializeUser) + + passport.use(new LocalStrategy(auth.verifyLocalUser)) + }, + + serializeUser: function (user, done) { + done(null, user.id); + }, + + deserializeUser: function (id, done) { + db.getUser(id).then(function(user){ + done(! user, user) + }) + }, + + validPassword: function(user, pw){ + var shasum = crypto.createHash('sha1') + shasum.update(pw) + return user.get('password') === shasum.digest('hex'); + }, + + verifyLocalUser: function (username, password, done) { + // handle passwords!! + db.getUserByUsername(username).then(function(user){ + + // if (err) { return done(err); } + if (! user) { return done("no user") } + + return done(null, user) + + if (! user) { + return done(null, false, { error: { errors: { username: { message: 'No such username.' } }}}) + } + if (! auth.validPassword(user, password)) { + return done(null, false, { error: { errors: { password: { message: 'Incorrect password.' } }}}) + } + return done(null, user); + }) + }, + + loggedInLocal: function (req, res, next) { + passport.authenticate("local", function(err, user, info){ + if (err) { + return res.json({ error: err }); + } + if (! user) { + return info ? res.json(info) : res.redirect("/login"); + } + + // user.last_seen = new Date () + // user.save(function(err, data){ if (err) console.err('error setting ip for user') }) + + req.logIn(user, function(err) { + if (err) { return next(err); } + var returnTo = req.session.returnTo + delete req.session.returnTo + return res.json({ status: "OK", returnTo: returnTo || "/index" }) + }); + })(req, res, next) + }, + + logout: function (req, res) { + req.logout(); + res.redirect('/'); + }, + +}
\ No newline at end of file |
