diff --git a/package.json b/package.json index 0b740f2..67a27fe 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "bgApp", + "name": "bgapp", "version": "1.0.0", "description": "", "main": "src/index.ts", diff --git a/src/endpoints/auth.ts b/src/endpoints/auth.ts index 92b5039..9e1ff6e 100644 --- a/src/endpoints/auth.ts +++ b/src/endpoints/auth.ts @@ -1,4 +1,3 @@ -import {BunRequest as Request} from "bun"; import {orm} from "../orm/orm.ts"; import jwt from "jsonwebtoken"; import {UnwrappedRequest} from "../utilities/guard"; diff --git a/src/index.ts b/src/index.ts index 71dda7f..788a353 100644 --- a/src/index.ts +++ b/src/index.ts @@ -19,7 +19,7 @@ const server = Bun.serve({ }, // (optional) fallback for unmatched routes: - fetch(request: Request): Response { + fetch(): Response { return Response.json({message: "Not found"}, {status: 404}); }, }); diff --git a/src/tests/test-setup.ts b/src/tests/test-setup.ts index b8a14e0..d9750f1 100644 --- a/src/tests/test-setup.ts +++ b/src/tests/test-setup.ts @@ -1,4 +1,4 @@ -import {beforeAll, afterAll} from 'bun:test'; +import {beforeAll} from 'bun:test'; import Bun from 'bun'; import {sql} from "bun"; diff --git a/src/utilities/guard.ts b/src/utilities/guard.ts index 09c9acf..b71ea92 100644 --- a/src/utilities/guard.ts +++ b/src/utilities/guard.ts @@ -1,6 +1,8 @@ import {BunRequest as Request} from 'bun'; import jwt from 'jsonwebtoken'; -import {Claims} from "../orm/orm.ts"; +import {ErrorResponse} from "./responseHelper"; +import {UnauthorizedError} from "./errors"; +import {Claims} from "../orm/claims"; export function guardRedirect(method: Function, redirectMethod: Function, guardedClaims: string[] | undefined = undefined) { try { @@ -10,18 +12,17 @@ export function guardRedirect(method: Function, redirectMethod: Function, guarde } } -export function guard(method: Function, guardedClaims: string[] | undefined = undefined):(r:Request)=>Promise { +export function guard(method: Function, guardedClaims: string[] | undefined = undefined): (r: Request) => Promise { return async (request: Request): Promise => { const authHeader: string | null = request.headers.get('Authorization')?.replace(/^Bearer /, '') as string ?? null; try { const userClaims: Claims = jwt.verify(authHeader as string, process.env.JWT_SECRET_KEY as string) as Claims; - console.log('Claims?', guardedClaims !== undefined, !userClaims.claims.some(x => guardedClaims?.includes(x))) - if (guardedClaims !== undefined && !userClaims.claims.some(x => guardedClaims.includes(x))) { - throw new Error('Unauthorized'); + if (guardedClaims !== undefined && !userClaims.claims.some((x: string): boolean => guardedClaims.includes(x))) { + throw new UnauthorizedError('Unauthorized'); } return method(await unwrap(request, userClaims)); - } catch (e) { - return Response.json({message: 'Authentication failed.'}, {status: 401}) + } catch (error: any) { + return new ErrorResponse(error as Error); } } } @@ -49,7 +50,7 @@ export async function unwrap(request: Request, claims: Claims | null = null) { }) } -export function unwrapMethod(methodToUnwrap:((r:UnwrappedRequest)=>Response)|((r:UnwrappedRequest)=>Promise)):(r:Request)=>Promise { +export function unwrapMethod(methodToUnwrap: ((r: UnwrappedRequest) => Response) | ((r: UnwrappedRequest) => Promise)): (r: Request) => Promise { return async (request: Request) => { const unwrappedRequest = await unwrap(request); return await methodToUnwrap(unwrappedRequest);