Skip to content

Instantly share code, notes, and snippets.

@lkmill
Last active April 28, 2017 13:27
Show Gist options
  • Save lkmill/9af88578701dd299706fed56ed4704b2 to your computer and use it in GitHub Desktop.
Save lkmill/9af88578701dd299706fed56ed4704b2 to your computer and use it in GitHub Desktop.
'use strict';
// modules > 3rd party
const redirect = require('midwest/factories/redirect');
const createError = require('midwest/util/create-error');
const router = new (require('express')).Router();
const { getAuthenticationDetails, authenticate, login } = require('../config');
const responses = {
json(req, res, user) {
if (req.session.previousUrl) res.set('Location', req.session.previousUrl);
res.json(user);
},
html(req, res) {
res.redirect(req.session.previousUrl || '/');
},
};
function local(req, res, next) {
const { email, password, remember } = req.body;
getAuthenticationDetails(email.toLowerCase()).then((user) => {
let error;
if (user) {
if (!user.password) {
error = config.errors.login.notLocal;
} else if (!user.dateEmailVerified) {
error = config.errors.login.emailNotVerified;
} else if (user.dateBlocked) {
error = config.errors.login.blocked;
} else if (user.dateBanned) {
error = config.errors.login.banned;
} else {
return authenticate(password, user.password).then(() => {
if (remember) {
if (config.remember.expires) {
req.session.cookie.expires = config.remember.expires;
} else {
req.session.cookie.maxAge = config.remember && config.remember.maxAge;
}
}
return login(user).then(() => {
delete user.password;
res.status(200);
responses[req.accepts(['json', 'html'])](req, res, user);
});
});
}
} else {
error = config.errors.login.noUserFound;
}
throw createError(...error);
}).catch((err) => {
if (req.body.password) {
req.body.password = 'DELETED';
}
if (req.body.confirmPassword) {
req.body.confirmPassword = 'DELETED';
}
next(err);
});
}
const mw = {
local,
logout: (req, res, next) => {
req.logout();
res.status(204);
next();
},
};
router
.post('/local', mw.local)
.get('/logout', mw.logout, redirect(config.redirects.logout))
module.exports = router;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment