add session fix cors, add session
All checks were successful
Code quality checks / biome (push) Successful in 9s

This commit is contained in:
creations 2025-05-22 17:52:20 -04:00
parent 4936ff8978
commit b31d77983c
Signed by: creations
GPG key ID: 8F553AA4320FC711
4 changed files with 70 additions and 0 deletions

View file

@ -8,6 +8,8 @@ const environment: Environment = {
development: development:
process.env.NODE_ENV === "development" || process.argv.includes("--dev"), process.env.NODE_ENV === "development" || process.argv.includes("--dev"),
fqdn: normalizeFqdn(process.env.FQDN) || "http://localhost:8080", fqdn: normalizeFqdn(process.env.FQDN) || "http://localhost:8080",
frontendUrl:
normalizeFqdn(process.env.FRONTEND_URL) || "http://localhost:8080",
}; };
const dataType: { type: string; path: string | undefined } = { const dataType: { type: string; path: string | undefined } = {

View file

@ -0,0 +1,38 @@
const routeDef: RouteDef = {
method: "GET",
accepts: "*/*",
returns: "application/json",
};
async function handler(request: ExtendedRequest): Promise<Response> {
if (!request.session) {
return Response.json(
{
success: false,
code: 403,
error: "Not logged in",
},
{ status: 403 },
);
}
const { session } = request;
if ((session as ApiUserSession).is_api === true) {
return Response.json(
{
success: false,
code: 403,
error: "You cannot use this endpoint with an authorization token",
},
{ status: 403 },
);
}
return Response.json({
success: true,
session,
});
}
export { routeDef, handler };

View file

@ -116,6 +116,19 @@ class ServerHandler {
request: Request, request: Request,
server: BunServer, server: BunServer,
): Promise<Response> { ): Promise<Response> {
if (request.method === "OPTIONS") {
return new Response(null, {
status: 204,
headers: {
"Access-Control-Allow-Origin": environment.frontendUrl,
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
"Access-Control-Allow-Credentials": "true",
"Access-Control-Allow-Headers":
request.headers.get("Access-Control-Request-Headers") || "*",
},
});
}
const extendedRequest: ExtendedRequest = request as ExtendedRequest; const extendedRequest: ExtendedRequest = request as ExtendedRequest;
extendedRequest.startPerf = performance.now(); extendedRequest.startPerf = performance.now();
@ -258,6 +271,22 @@ class ServerHandler {
); );
} }
if (response?.headers) {
response.headers.set(
"Access-Control-Allow-Origin",
environment.frontendUrl,
);
response.headers.set(
"Access-Control-Allow-Methods",
"GET, POST, PUT, DELETE, OPTIONS",
);
response.headers.set("Access-Control-Allow-Credentials", "true");
response.headers.set(
"Access-Control-Allow-Headers",
request.headers.get("Access-Control-Request-Headers") || "Content-Type",
);
}
return response; return response;
} }
} }

1
types/config.d.ts vendored
View file

@ -3,6 +3,7 @@ type Environment = {
host: string; host: string;
development: boolean; development: boolean;
fqdn: string; fqdn: string;
frontendUrl: string;
}; };
type UserValidation = { type UserValidation = {