From 7fe6d1ab4d479f6bfad0638a95d6514e100b7c08 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 7 Apr 2024 14:22:01 +0300 Subject: [PATCH] server-ts: Convert routes/login --- src/routes/{login.js => login.ts} | 32 ++++++++++++++++--------------- src/routes/route-interface.ts | 16 ++++++++++++++++ src/routes/routes.js | 2 +- src/services/auth.ts | 11 +---------- 4 files changed, 35 insertions(+), 26 deletions(-) rename src/routes/{login.js => login.ts} (71%) create mode 100644 src/routes/route-interface.ts diff --git a/src/routes/login.js b/src/routes/login.ts similarity index 71% rename from src/routes/login.js rename to src/routes/login.ts index 649e9b854..a4c13ca90 100644 --- a/src/routes/login.js +++ b/src/routes/login.ts @@ -1,15 +1,17 @@ "use strict"; -const utils = require('../services/utils'); -const optionService = require('../services/options'); -const myScryptService = require('../services/encryption/my_scrypt'); -const log = require('../services/log'); -const passwordService = require('../services/encryption/password'); -const assetPath = require('../services/asset_path'); -const appPath = require('../services/app_path'); -const ValidationError = require('../errors/validation_error'); +import utils = require('../services/utils'); +import optionService = require('../services/options'); +import myScryptService = require('../services/encryption/my_scrypt'); +import log = require('../services/log'); +import passwordService = require('../services/encryption/password'); +import assetPath = require('../services/asset_path'); +import appPath = require('../services/app_path'); +import ValidationError = require('../errors/validation_error'); +import { Request, Response } from 'express'; +import { AppRequest } from './route-interface'; -function loginPage(req, res) { +function loginPage(req: Request, res: Response) { res.render('login', { failedAuth: false, assetPath: assetPath, @@ -17,7 +19,7 @@ function loginPage(req, res) { }); } -function setPasswordPage(req, res) { +function setPasswordPage(req: Request, res: Response) { res.render('set_password', { error: false, assetPath: assetPath, @@ -25,7 +27,7 @@ function setPasswordPage(req, res) { }); } -function setPassword(req, res) { +function setPassword(req: Request, res: Response) { if (passwordService.isPasswordSet()) { throw new ValidationError("Password has been already set"); } @@ -55,7 +57,7 @@ function setPassword(req, res) { res.redirect('login'); } -function login(req, res) { +function login(req: AppRequest, res: Response) { const guessedPassword = req.body.password; if (verifyPassword(guessedPassword)) { @@ -83,7 +85,7 @@ function login(req, res) { } } -function verifyPassword(guessedPassword) { +function verifyPassword(guessedPassword: string) { const hashed_password = utils.fromBase64(optionService.getOption('passwordVerificationHash')); const guess_hashed = myScryptService.getVerificationHash(guessedPassword); @@ -91,7 +93,7 @@ function verifyPassword(guessedPassword) { return guess_hashed.equals(hashed_password); } -function logout(req, res) { +function logout(req: AppRequest, res: Response) { req.session.regenerate(() => { req.session.loggedIn = false; @@ -100,7 +102,7 @@ function logout(req, res) { } -module.exports = { +export = { loginPage, setPasswordPage, setPassword, diff --git a/src/routes/route-interface.ts b/src/routes/route-interface.ts new file mode 100644 index 000000000..969b4be5f --- /dev/null +++ b/src/routes/route-interface.ts @@ -0,0 +1,16 @@ +import { Request } from "express"; + +export interface AppRequest extends Request { + headers: { + authorization?: string; + "trilium-cred"?: string; + } + session: { + loggedIn: boolean; + cookie: { + maxAge: number; + expires: boolean + }; + regenerate: (callback: () => void) => void; + } +} \ No newline at end of file diff --git a/src/routes/routes.js b/src/routes/routes.js index 2e53e4546..7c0df5fcf 100644 --- a/src/routes/routes.js +++ b/src/routes/routes.js @@ -18,7 +18,7 @@ const ValidationError = require('../errors/validation_error'); // page routes const setupRoute = require('./setup'); -const loginRoute = require('./login.js'); +const loginRoute = require('./login'); const indexRoute = require('./index.js'); // API routes diff --git a/src/services/auth.ts b/src/services/auth.ts index d54a1ea96..39f2b430e 100644 --- a/src/services/auth.ts +++ b/src/services/auth.ts @@ -8,19 +8,10 @@ import passwordEncryptionService = require('./encryption/password_encryption'); import config = require('./config'); import passwordService = require('./encryption/password'); import type { NextFunction, Request, Response } from 'express'; +import { AppRequest } from '../routes/route-interface'; const noAuthentication = config.General && config.General.noAuthentication === true; -interface AppRequest extends Request { - headers: { - authorization?: string; - "trilium-cred"?: string; - } - session: { - loggedIn: boolean; - } -} - function checkAuth(req: AppRequest, res: Response, next: NextFunction) { if (!sqlInit.isDbInitialized()) { res.redirect("setup");