UNPKG

user-managements-node-server

Version:

starter for express node server with user managements, authentication authorization

208 lines (184 loc) 4.88 kB
import HttpError from "../utils/HttpError"; import httpStatus from 'http-status' import initRouteHelper from './routeHelper' const init = ({ signUp, signIn, signOut, forgotPassword, changePassword, verify, getUserInfo, validateAuthenticated, getVerifyResponseHTML, isAuthenticated, auditLogger, userRoutePrefix, getUserAgentUniqueIdentify }) => (userRouter, app) => { const { unauthorizedIfNotAuthenticated, responseError, getClientInfo, responseOk, logHttpRequest } = initRouteHelper({ isAuthenticated }) const enrichWithClientInfo = (req, _, next) => { Object .assign(req, getClientInfo(req)) next() } app.use(enrichWithClientInfo) app.use(userRoutePrefix, userRouter) const logHttpRequestWrapper = logHttpRequest(auditLogger) userRouter .route('/sign-up') .post( logHttpRequestWrapper, (req, res) => { const { username, password } = req.body signUp({ username, password }) .then(responseOk(res)) .catch(responseError(res)) }) userRouter .route('/sign-in') .post( logHttpRequestWrapper, (req, res) => { const { username, password, thirdParty } = req.body const { clientInfo } = req getUserAgentUniqueIdentify({ ...clientInfo, username }) .then(userAgentIdentity => ( signIn({ username, password, thirdParty, clientInfo, userAgentIdentity }) .then(responseOk(res)) )) .catch(responseError(res, httpStatus.UNAUTHORIZED)) }) userRouter .route('/sign-out') .post( unauthorizedIfNotAuthenticated(), logHttpRequestWrapper, (req, res) => { const { userInfo, clientInfo } = req getUserAgentUniqueIdentify({ ...clientInfo, username: userInfo.username }) .then(userAgentIdentity => ( signOut({ ...userInfo, userAgentIdentity }) .then(responseOk(res)) )) .catch(responseError(res)) } ) userRouter .route('/forgot-password') .post( logHttpRequestWrapper, (req, res) =>{ const { username } = req.body forgotPassword({ username }) .then(responseOk(res)) .catch(error => { console.log(error) throw error }) .catch(responseError(res)) }) userRouter .route('/change-password/:actionId') .post( logHttpRequestWrapper, (req, res) => { const { actionId } = req.params const { password, confirmPassword } = req.body changePassword({ actionId, password, confirmPassword }) .then(({ httpStatusCode, message }) => { res .status(httpStatusCode) .json({ message }) }) .catch(error =>{ res .status(error.httpStatusCode) .json({ message: error.code }) }) }) userRouter .route('/verify/:actionId') .get( logHttpRequestWrapper, (req, res) => { const { actionId } = req.params verify({ actionId }) .then(() => { res .end( getVerifyResponseHTML(false) ) }) .catch(error => { res .status(error.httpStatusCode) .end(getVerifyResponseHTML(true)) }) }) userRouter .route('/info') .get( unauthorizedIfNotAuthenticated(), logHttpRequestWrapper, (req, res) => { getUserInfo(req.userInfo) .then(userInfo => { res .json(userInfo) }) .catch(responseError(res, httpStatus.BAD_REQUEST)) }) userRouter .route('/contact-us') .post( unauthorizedIfNotAuthenticated(), logHttpRequestWrapper, (req, res) => { const { subject, description } = req.body .sendContactUs({username: req.username, subject, description }) .then((info) => { res.json({ message: 'Email request sent'}) }) }) userRouter .route('/is-authenticated') .post( logHttpRequestWrapper, unauthorizedIfNotAuthenticated(), (req, res) => { res.json({e:'s'}) } ) // const { // body: { role }, // headers: { token } // } = req // validateAuthenticated(token, role) // .then(() => { // next() // }) // .catch(error => { // if(!(error instanceof HttpError)){ // error = new HttpError() // } // res // .status(error.code) // .json(error.message) // }) // }) } export default init