aboutsummaryrefslogtreecommitdiff
path: root/src/server/RouteManager.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/RouteManager.ts')
-rw-r--r--src/server/RouteManager.ts46
1 files changed, 27 insertions, 19 deletions
diff --git a/src/server/RouteManager.ts b/src/server/RouteManager.ts
index c5d70da3d..ed51aea40 100644
--- a/src/server/RouteManager.ts
+++ b/src/server/RouteManager.ts
@@ -18,10 +18,11 @@ export interface CoreArguments {
isRelease: boolean;
}
-export type AuthorizedCore = CoreArguments & { user: DashUserModel };
-export type SecureHandler = (core: AuthorizedCore) => any | Promise<any>;
-export type PublicHandler = (core: CoreArguments) => any | Promise<any>;
-export type ErrorHandler = (core: CoreArguments & { error: any }) => any | Promise<any>;
+export type AuthorizedCore = CoreArguments & { user: Partial<DashUserModel> };
+export type SecureHandler = (core: AuthorizedCore) => unknown | Promise<unknown>;
+export type PublicHandler = (core: CoreArguments) => unknown | Promise<unknown>;
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+export type ErrorHandler = (core: CoreArguments & { error: any }) => unknown | Promise<unknown>;
export const STATUS = {
OK: 200,
@@ -30,13 +31,14 @@ export const STATUS = {
PERMISSION_DENIED: 403,
};
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
export function _error(res: Response, message: string, error?: any) {
console.error(message, error);
res.statusMessage = message;
res.status(STATUS.EXECUTION_ERROR).send(error);
}
-export function _success(res: Response, body: any) {
+export function _success(res: Response, body: unknown) {
res.status(STATUS.OK).send(body);
}
@@ -135,18 +137,6 @@ export default class RouteManager {
user = { id: 'guest', email: 'guest', userDocumentId: Utils.GuestID() };
}
const core = { req, res, isRelease };
- const tryExecute = async (toExecute: (args: any) => any | Promise<any>, args: any) => {
- try {
- await toExecute(args);
- } catch (e) {
- console.log(red(target), user && 'email' in user ? '<user logged out>' : undefined);
- if (errorHandler) {
- errorHandler({ ...core, error: e });
- } else {
- _error(res, `The server encountered an internal error when serving ${target}.`, e);
- }
- }
- };
if (user) {
if (requireAdmin && isRelease && process.env.PASSWORD) {
if (AdminPrivileges.get(user.id)) {
@@ -156,11 +146,29 @@ export default class RouteManager {
return;
}
}
- await tryExecute(secureHandler, { ...core, user });
+ try {
+ await secureHandler({ ...core, user });
+ } catch (e) {
+ console.log(red(target), user && 'email' in user ? '<user logged out>' : undefined);
+ if (errorHandler) {
+ errorHandler({ ...core, error: e });
+ } else {
+ _error(res, `The server encountered an internal error when serving ${target}.`, e);
+ }
+ }
}
// req.session!.target = target;
else if (publicHandler) {
- await tryExecute(publicHandler, core);
+ try {
+ await publicHandler(core);
+ } catch (e) {
+ console.log(red(target), user && 'email' in user ? '<user logged out>' : undefined);
+ if (errorHandler) {
+ errorHandler({ ...core, error: e });
+ } else {
+ _error(res, `The server encountered an internal error when serving ${target}.`, e);
+ }
+ }
if (!res.headersSent) {
// res.redirect("/login");
}