Skip to content

Commit 475281b

Browse files
committed
fix(cors): enhance CORS middleware to support exact and subdomain origin matching
1 parent 06fd7e8 commit 475281b

File tree

1 file changed

+23
-4
lines changed

1 file changed

+23
-4
lines changed

src/lib/cors.ts

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,32 @@ export const cors = initMiddleware(
2626
console.log("Wildcard origin match. Allowing all.");
2727
return callback(null, true);
2828
}
29+
30+
// Check for exact match first
2931
if (allowedOrigins.includes(origin)) {
30-
console.log("Origin allowed.");
32+
console.log("Exact origin match. Allowing.");
3133
return callback(null, true);
32-
} else {
33-
console.error(`Origin ${origin} not allowed by CORS`);
34-
return callback(new Error(`Origin ${origin} not allowed by CORS`));
3534
}
35+
36+
// Check for subdomain matches
37+
for (const allowedOrigin of allowedOrigins) {
38+
try {
39+
const allowedUrl = new URL(allowedOrigin);
40+
const requestUrl = new URL(origin);
41+
42+
// Check if the request origin is a subdomain of the allowed origin
43+
if (requestUrl.hostname.endsWith('.' + allowedUrl.hostname) ||
44+
requestUrl.hostname === allowedUrl.hostname) {
45+
console.log(`Subdomain match: ${origin} matches allowed origin ${allowedOrigin}`);
46+
return callback(null, true);
47+
}
48+
} catch (error) {
49+
console.warn(`Invalid URL format for origin: ${allowedOrigin}`, error);
50+
}
51+
}
52+
53+
console.error(`Origin ${origin} not allowed by CORS`);
54+
return callback(new Error(`Origin ${origin} not allowed by CORS`));
3655
},
3756
}),
3857
);

0 commit comments

Comments
 (0)