Last active
April 28, 2017 13:27
-
-
Save lkmill/9af88578701dd299706fed56ed4704b2 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'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