UNPKG

acklen-keystone

Version:

Web Application Framework and Admin GUI / Content Management System built on Express.js and Mongoose

56 lines (53 loc) 1.93 kB
var utils = require('keystone-utils'); var session = require('../../../../lib/session'); function signin (req, res) { var keystone = req.keystone; if (!keystone.security.csrf.validate(req)) { return res.apiError(403, 'invalid csrf'); } if (!req.body.email) { return res.status(401).json({ error: 'credentials are required' }); } var User = keystone.list(keystone.get('user model')); var emailRegExp = new RegExp('^' + utils.escapeRegExp(req.body.email) + '$', 'i'); User.model.findOne({ email: emailRegExp }).exec(function (err, user) { if (err) return res.status(500).json({ error: 'database error', detail: err }); if (user) { keystone.callHook(user, 'pre:signin', req, function (err) { if (err) return res.status(500).json({ error: 'pre:signin error', detail: err }); session.signinWithUser(user, req, res, function () { keystone.callHook(user, 'post:signin', req, function (err) { if (err) return res.status(500).json({ error: 'post:signin error', detail: err }); res.json({ success: true, user: user }); }); }); }); } else { var newUser = new User.model({ email: req.body.email, name: { first: req.body.firstName, last: req.body.lastName, }, isAdmin: false, isAdministrator: false, isEditor: false, isContributor: false, password: req.body.pwd, netForumUserId: req.body.netForumUserId, }); newUser.save(function (err, user) { keystone.callHook(user, 'pre:signin', req, function (err) { if (err) return res.status(500).json({ error: 'pre:signin error', detail: err }); session.signinWithUser(user, req, res, function () { keystone.callHook(user, 'post:signin', req, function (err) { if (err) return res.status(500).json({ error: 'post:signin error', detail: err }); res.json({ success: true, user: user }); }); }); }); }); }; }); } module.exports = signin;