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('/', async (req: express.Request, res: express.Response) => { let redir = extractRedirection(req); let loginFailed = false; if (requestIsPost(req)) { try { await Security.TryLogin(req.mSession, req.body["username"], req.body["password"]); } catch (err) { loginFailed = true; } if (!loginFailed) { SessionManager.Write(res, req.mSession); res.redirect(302, redir); return; } } res.render('login', { username: req.mSession.GetUsername(), failed: loginFailed, redirect: redir }); }); export default router;