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
JavaScript
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;