/[sudobot]/branches/7.x/src/decorators/RequireAuth.ts
ViewVC logotype

Annotation of /branches/7.x/src/decorators/RequireAuth.ts

Parent Directory Parent Directory | Revision Log Revision Log


Revision 577 - (hide annotations)
Mon Jul 29 18:52:37 2024 UTC (8 months, 1 week ago) by rakinar2
File MIME type: application/typescript
File size: 2180 byte(s)
chore: add old version archive branches (2.x to 9.x-dev)
1 rakinar2 577 /*
2     * This file is part of SudoBot.
3     *
4     * Copyright (C) 2021-2023 OSN Developers.
5     *
6     * SudoBot is free software; you can redistribute it and/or modify it
7     * under the terms of the GNU Affero General Public License as published by
8     * the Free Software Foundation, either version 3 of the License, or
9     * (at your option) any later version.
10     *
11     * SudoBot is distributed in the hope that it will be useful, but
12     * WITHOUT ANY WARRANTY; without even the implied warranty of
13     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14     * GNU Affero General Public License for more details.
15     *
16     * You should have received a copy of the GNU Affero General Public License
17     * along with SudoBot. If not, see <https://www.gnu.org/licenses/>.
18     */
19    
20     import { NextFunction, Request, Response } from "express";
21     import RequireAuthMiddleware from "../api/middleware/RequireAuthMiddleware";
22     import type Client from "../core/Client";
23    
24     export function RequireAuth(fetchUser = true) {
25     return (
26     originalMethodOrTarget: any,
27     contextOrMethodName: string | ClassMethodDecoratorContext,
28     descriptor?: PropertyDescriptor
29     ) => {
30     if (typeof contextOrMethodName === "string") {
31     const metadata = Reflect.getMetadata("auth_middleware", originalMethodOrTarget) ?? {};
32     const middleware = (client: Client, req: Request, res: Response, next: NextFunction) =>
33     RequireAuthMiddleware(client, fetchUser, req, res, next);
34    
35     metadata[contextOrMethodName] ??= middleware;
36    
37     Reflect.defineMetadata("auth_middleware", metadata, originalMethodOrTarget);
38     } else {
39     const metadata = (contextOrMethodName.metadata?.authMiddleware ?? {}) as Record<string | symbol, Function>;
40     const middleware = (client: Client, req: Request, res: Response, next: NextFunction) =>
41     RequireAuthMiddleware(client, fetchUser, req, res, next);
42    
43     metadata[contextOrMethodName.name] ??= middleware;
44     (contextOrMethodName.metadata as unknown) ??= {};
45     contextOrMethodName.metadata.authMiddleware = metadata;
46     return originalMethodOrTarget;
47     }
48     };
49     }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26