Skip to content

Commit 90ab2da

Browse files
committed
fix(cli): use allow list of origins + set cors headers on error as well
1 parent e728e5b commit 90ab2da

1 file changed

Lines changed: 17 additions & 7 deletions

File tree

cli/src/server.ts

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,12 @@ import {
1010
getQuery,
1111
createError,
1212
getHeader,
13+
getRequestHeader,
1314
setResponseHeaders,
1415
getRouterParam,
1516
} from 'h3'
17+
18+
const ALLOWED_ORIGINS = new Set(['https://npmx.dev', 'http://localhost:3000'])
1619
import type { ConnectorState, PendingOperation, OperationType, ApiResponse } from './types.ts'
1720
import {
1821
getNpmUser,
@@ -66,24 +69,31 @@ export function createConnectorApp(expectedToken: string) {
6669
operations: [],
6770
}
6871

69-
const app = createApp({
70-
onRequest(event) {
71-
// CORS headers for browser connections
72+
function setCorsHeaders(event: Parameters<typeof setResponseHeaders>[0]) {
73+
const origin = getRequestHeader(event, 'origin')
74+
if (origin && ALLOWED_ORIGINS.has(origin)) {
7275
setResponseHeaders(event, {
73-
'Access-Control-Allow-Origin': '*',
76+
'Access-Control-Allow-Origin': origin,
7477
'Access-Control-Allow-Methods': 'GET, POST, DELETE, OPTIONS',
7578
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
7679
})
80+
}
81+
}
82+
83+
const app = createApp({
84+
onRequest(event) {
85+
setCorsHeaders(event)
86+
},
87+
onBeforeResponse(event) {
88+
setCorsHeaders(event)
7789
},
7890
})
7991
const router = createRouter()
8092

8193
// Handle CORS preflight requests
8294
router.options(
8395
'/**',
84-
eventHandler(() => {
85-
return null
86-
}),
96+
eventHandler(() => ''),
8797
)
8898

8999
function validateToken(authHeader: string | null | undefined): boolean {

0 commit comments

Comments
 (0)