login.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import express = require('express');
  2. import Security from '../src/Security';
  3. import { SessionManager } from '../src/Session';
  4. const router = express.Router();
  5. function requestIsPost(req: express.Request): boolean {
  6. return req.method.toUpperCase() === 'POST' &&
  7. req.body["redirect"] &&
  8. req.body["username"] &&
  9. req.body["password"] !== undefined;
  10. }
  11. function extractRedirection(req: express.Request): string {
  12. let redir: string | undefined = undefined;
  13. if (requestIsPost(req))
  14. redir = req.body["redirect"] || undefined;
  15. if (!redir && req.query["redirect"]) {
  16. if (Array.isArray(req.query["redirect"]))
  17. redir = req.query["redirect"][0].toString() || undefined;
  18. else
  19. redir = req.query["redirect"]?.toString() || undefined;
  20. }
  21. return redir || "/";
  22. }
  23. router.all('/', async (req: express.Request, res: express.Response) => {
  24. let redir = extractRedirection(req);
  25. let loginFailed = false;
  26. if (requestIsPost(req)) {
  27. try {
  28. await Security.TryLogin(req.mSession, req.body["username"], req.body["password"]);
  29. }
  30. catch (err) {
  31. loginFailed = true;
  32. }
  33. if (!loginFailed) {
  34. SessionManager.Write(res, req.mSession);
  35. res.redirect(302, redir);
  36. return;
  37. }
  38. }
  39. res.render('login', {
  40. username: req.mSession.GetUsername(),
  41. failed: loginFailed,
  42. redirect: redir
  43. });
  44. });
  45. export default router;