Add CORS development mode - allow all origins in dev
This commit is contained in:
@@ -15,8 +15,11 @@ const PORT = process.env.PORT || 3000;
|
|||||||
// Security middleware
|
// Security middleware
|
||||||
app.use(helmet());
|
app.use(helmet());
|
||||||
|
|
||||||
// Dynamic CORS configuration (will be updated from settings)
|
// Dynamic CORS configuration
|
||||||
// Allow multiple origins for development and production
|
// Development: Allow ALL origins (no restrictions)
|
||||||
|
// Production: Whitelist specific domains
|
||||||
|
const isDevelopment = process.env.NODE_ENV !== 'production';
|
||||||
|
|
||||||
const getAllowedOrigins = () => {
|
const getAllowedOrigins = () => {
|
||||||
const origins = [
|
const origins = [
|
||||||
process.env.FRONTEND_URL || 'http://localhost:4173', // Production default
|
process.env.FRONTEND_URL || 'http://localhost:4173', // Production default
|
||||||
@@ -37,13 +40,21 @@ const getAllowedOrigins = () => {
|
|||||||
|
|
||||||
let corsOptions = {
|
let corsOptions = {
|
||||||
origin: (origin, callback) => {
|
origin: (origin, callback) => {
|
||||||
|
// Development mode: Allow ALL origins
|
||||||
|
if (isDevelopment) {
|
||||||
|
callback(null, true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Production mode: Check whitelist
|
||||||
const allowedOrigins = getAllowedOrigins();
|
const allowedOrigins = getAllowedOrigins();
|
||||||
// Allow requests with no origin (like mobile apps or curl requests)
|
// Allow requests with no origin (like mobile apps or curl requests)
|
||||||
if (!origin || allowedOrigins.includes(origin)) {
|
if (!origin || allowedOrigins.includes(origin)) {
|
||||||
callback(null, true);
|
callback(null, true);
|
||||||
} else {
|
} else {
|
||||||
logger.warn(`CORS blocked origin: ${origin}`);
|
logger.warn(`CORS blocked origin: ${origin} (not in whitelist)`);
|
||||||
callback(null, true); // Allow anyway in production (more permissive)
|
// For now, allow anyway (you can change to callback(new Error('Not allowed by CORS')) for strict mode)
|
||||||
|
callback(null, true);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
credentials: true,
|
credentials: true,
|
||||||
@@ -66,7 +77,11 @@ const updateCorsFromSettings = async () => {
|
|||||||
logger.info(`CORS settings loaded from database: ${frontendUrlSetting.value}`);
|
logger.info(`CORS settings loaded from database: ${frontendUrlSetting.value}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.info(`CORS allowed origins: ${getAllowedOrigins().join(', ')}`);
|
if (isDevelopment) {
|
||||||
|
logger.info('🔓 CORS: Development mode - ALL origins allowed');
|
||||||
|
} else {
|
||||||
|
logger.info(`🔒 CORS: Production mode - Whitelist: ${getAllowedOrigins().join(', ')}`);
|
||||||
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.warn('Could not load CORS settings from database, using defaults');
|
logger.warn('Could not load CORS settings from database, using defaults');
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user