maddy-admin/src/lib/apiAuth.ts
2024-01-23 23:39:48 +01:00

20 lines
720 B
TypeScript

import { getApiKeyByToken } from "./db";
// Returns the user's email address or throws an error if unauthenticated
export default async function apiAuth(request: Request, callback: (request: Request, user: string) => Response | Promise<Response>) {
let authToken = request.headers.get("authorization");
if (!authToken) return new Response("Unauthorized", { status: 401 });
const token = authToken.replace(/^Bearer /, ""); // the annoying prefix should be optional
const key = await getApiKeyByToken(token);
if (!key) return new Response("Unauthorized", { status: 401 });
const res = callback(request, key.address);;
if (res instanceof Promise) {
return await res;
} else {
return res;
}
};