Skip to content

Commit 470c2dc

Browse files
authored
Merge pull request #134 from prismaymedia/feature/cors-restrictive-whitelist
2 parents bdcbccf + f7d5b91 commit 470c2dc

File tree

2 files changed

+28
-23
lines changed

2 files changed

+28
-23
lines changed

server/src/config/cors.config.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { CorsOptions } from '@nestjs/common/interfaces/external/cors-options.interface';
2+
3+
const defaultOrigins = [
4+
'http://localhost:5173',
5+
'https://prismaymedia.github.io',
6+
'https://linkfy-app.vercel.app',
7+
'chrome-extension://mefdblccfmhfhhcgeckmcicgfnfgolpf',
8+
];
9+
10+
const whitelist = process.env.ALLOWED_ORIGINS
11+
? process.env.ALLOWED_ORIGINS.split(',').map(origin => origin.trim())
12+
: defaultOrigins;
13+
14+
export const corsConfig: CorsOptions = {
15+
origin: (origin, callback) => {
16+
if (!origin || whitelist.includes(origin)) {
17+
callback(null, true);
18+
} else {
19+
callback(null, false);
20+
}
21+
},
22+
methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'],
23+
credentials: true,
24+
allowedHeaders: ['Content-Type', 'Authorization', 'Accept', 'sentry-trace', 'baggage'],
25+
exposedHeaders: ['Authorization'],
26+
};

server/src/main.ts

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -13,34 +13,13 @@ import {
1313
ExceptionFilter,
1414
Logger,
1515
} from '@nestjs/common';
16-
import cors from 'cors';
16+
import { corsConfig } from './config/cors.config';
1717

1818
async function bootstrap() {
1919
const app = await NestFactory.create(AppModule);
2020
const logger = new Logger('Bootstrap');
2121

22-
app.use(
23-
cors({
24-
origin: process.env.ALLOWED_ORIGINS
25-
? process.env.ALLOWED_ORIGINS.split(',')
26-
: [
27-
'http://localhost:5173',
28-
'https://prismaymedia.github.io',
29-
'https://linkfy-app.vercel.app',
30-
'chrome-extension://mefdblccfmhfhhcgeckmcicgfnfgolpf',
31-
],
32-
credentials: true,
33-
allowedHeaders: [
34-
'Content-Type',
35-
'Authorization',
36-
'Accept',
37-
'sentry-trace',
38-
'baggage',
39-
],
40-
exposedHeaders: ['Authorization'],
41-
methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'],
42-
}),
43-
);
22+
app.enableCors(corsConfig);
4423

4524
app.use(json());
4625
app.use(urlencoded({ extended: false }));

0 commit comments

Comments
 (0)