summaryrefslogtreecommitdiff
path: root/server/auth/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'server/auth/index.js')
-rw-r--r--server/auth/index.js70
1 files changed, 68 insertions, 2 deletions
diff --git a/server/auth/index.js b/server/auth/index.js
index 3b02ec9..709fd0d 100644
--- a/server/auth/index.js
+++ b/server/auth/index.js
@@ -1,2 +1,68 @@
-module.exports = {
-} \ No newline at end of file
+/* jshint node: true */
+
+var passport = require('passport'),
+ LocalStrategy = require('passport-local').Strategy,
+ _ = require('lodash'),
+ util = require('../util'),
+ config = require('../../../config.json'),
+ User = require('../models/User');
+
+var auth = {
+
+ init: function () {
+ passport.serializeUser(auth.serializeUser);
+ passport.deserializeUser(auth.deserializeUser);
+
+ passport.use(new LocalStrategy(auth.verifyLocalUser))
+ },
+
+ 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_ip = util.ip2num( req.ip )
+ 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 || "/profile" })
+ });
+ })(req, res, next);
+ },
+
+ logout: function (req, res) {
+ req.logout();
+ res.redirect('/');
+ },
+
+ serializeUser: function (user, done) {
+ done(null, user.id);
+ },
+
+ deserializeUser: function (id, done) {
+ User.find({ id: id }, function (err, user) {
+ done(err, user)
+ });
+ },
+
+ verifyLocalUser: function (username, password, done) {
+ User.findByUsername(username, function(err, user){
+ if (err) { return done(err); }
+ if (! user) {
+ return done(null, false, { error: { errors: { username: { message: 'No such username.' } }}})
+ }
+ if (! user.validPassword(password)) {
+ return done(null, false, { error: { errors: { password: { message: 'Incorrect password.' } }}})
+ }
+ return done(null, user);
+ });
+ }
+
+}