import express = require('express'); import Security from '../src/Security'; import { SessionManager } from '../src/Session'; const router = express.Router(); function requestIsPost(req: express.Request): boolean { return req.method.toUpperCase() === 'POST' && req.body["redirect"] && req.body["username"] && req.body["password"] !== undefined; } function extractRedirection(req: express.Request): string { let redir: string | undefined = undefined; if (requestIsPost(req)) redir = req.body["redirect"] || undefined; if (!redir && req.query["redirect"]) { if (Array.isArray(req.query["redirect"])) redir = req.query["redirect"][0].toString() || undefined; else redir = req.query["redirect"]?.toString() || undefined; } return redir || "/"; } router.all('/', (req: express.Request, res: express.Response) => { let redir = extractRedirection(req); (requestIsPost(req) ? (Security.TryLogin(req.mSession, req.body["username"], req.body["password"]).then(_ => { SessionManager.Write(res, req.mSession); res.redirect(302, redir); }).catch(_ => Promise.resolve(true))) : Promise.resolve(false)) .then(loginFailed => { res.render('login', { username: req.mSession.GetUsername(), failed: loginFailed, redirect: redir }); }); }); export default router;