mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-05-07 05:42:28 -05:00
36 lines
906 B
TypeScript
36 lines
906 B
TypeScript
import type { ApiTokenType } from "~/db/tables";
|
|
import * as ApiRepository from "~/features/api/ApiRepository.server";
|
|
|
|
async function loadApiTokensCache() {
|
|
const dbTokens = await ApiRepository.allApiTokens();
|
|
|
|
const tokenMap = new Map<string, ApiTokenType>();
|
|
|
|
for (const { token, type } of dbTokens) {
|
|
tokenMap.set(token, type);
|
|
}
|
|
|
|
return tokenMap;
|
|
}
|
|
|
|
let apiTokens = await loadApiTokensCache();
|
|
|
|
export async function refreshApiTokensCache() {
|
|
apiTokens = await loadApiTokensCache();
|
|
}
|
|
|
|
function extractToken(req: Request) {
|
|
const authHeader = req.headers.get("Authorization");
|
|
if (!authHeader) {
|
|
throw new Response("Missing Authorization header", { status: 401 });
|
|
}
|
|
return authHeader.replace("Bearer ", "");
|
|
}
|
|
|
|
export function requireBearerAuth(req: Request) {
|
|
const token = extractToken(req);
|
|
if (!apiTokens.has(token)) {
|
|
throw new Response("Invalid token", { status: 401 });
|
|
}
|
|
}
|