Allowed "*" as a CORS_DOMAINS entry which overrides the cors middleware
Deploy / Build (pull_request) Successful in 26s
Deploy / Test & Lint (pull_request) Successful in 32s
Deploy / Build and Push Docker Image (pull_request) Has been skipped

This commit is contained in:
2026-08-01 00:53:56 +02:00
parent 0c49b132ee
commit 43040b2ac8
2 changed files with 28 additions and 1 deletions
+8 -1
View File
@@ -29,9 +29,16 @@ export const PORT = env.PORT;
export { prisma }; export { prisma };
const CORS_DOMAINS = env.CORS_URLS.split(",").map((s) => s.trim()); let CORS_DOMAINS = env.CORS_URLS.split(",").map((s) => s.trim());
CORS_DOMAINS.push(UI_URL); CORS_DOMAINS.push(UI_URL);
CORS_DOMAINS.push(REACT_APP_API_URL.replace(/\/+$/, "")); CORS_DOMAINS.push(REACT_APP_API_URL.replace(/\/+$/, ""));
// If an origin is "*", clear the list and add a star
// ? This is for PR-Previews especially, which have a dynamic origin and cannot be enumerated in advance
if (CORS_DOMAINS.includes("*")) {
CORS_DOMAINS = ["*"];
}
initCorsDomains(CORS_DOMAINS); initCorsDomains(CORS_DOMAINS);
if (env.NODE_ENV !== "test") { if (env.NODE_ENV !== "test") {
+20
View File
@@ -29,6 +29,26 @@ export const corsMiddleware = new Middleware<{}, {}>("Custom CORS", "1.0.0")
const origin = ctr.headers.get("origin"); const origin = ctr.headers.get("origin");
// if the list is only a single star, allow all origins
if (CORS_DOMAINS.length === 1 && CORS_DOMAINS[0] === "*") {
if (origin) {
ctr.headers.set("Access-Control-Allow-Origin", origin);
ctr.headers.set("Vary", "Origin");
ctr.headers.set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, PATCH");
ctr.headers.set(
"Access-Control-Allow-Headers",
ctr.headers.get("access-control-request-headers") || "content-type, x-api-key",
);
ctr.headers.set("Access-Control-Allow-Credentials", "true");
}
if (ctr.url.method === "OPTIONS") {
ctr.headers.set("Access-Control-Max-Age", "86400");
ctr.headers.set("Content-Length", "0");
return end(ctr.status(ctr.$status.NO_CONTENT).print(""));
}
return;
}
if (origin && !CORS_DOMAINS.includes(origin)) { if (origin && !CORS_DOMAINS.includes(origin)) {
// Agent/API traffic (no browser origin) is unaffected; only browser // Agent/API traffic (no browser origin) is unaffected; only browser
// requests from disallowed origins are blocked. // requests from disallowed origins are blocked.