55 lines
1.8 KiB
TypeScript
55 lines
1.8 KiB
TypeScript
import dotenv from 'dotenv';
|
|
import path from 'path';
|
|
|
|
// Load environment variables from .env file
|
|
dotenv.config({ path: path.join(__dirname, '../.env') });
|
|
|
|
// Validate required environment variables
|
|
const requiredEnvVars = [
|
|
'NEXTAUTH_SECRET',
|
|
'GITHUB_CLIENT_ID',
|
|
'GITHUB_CLIENT_SECRET'
|
|
];
|
|
|
|
const missingEnvVars = requiredEnvVars.filter(envVar => !process.env[envVar]);
|
|
|
|
if (missingEnvVars.length > 0) {
|
|
console.error('Missing required environment variables:', missingEnvVars.join(', '));
|
|
console.error('Please check your .env file and ensure all required variables are set.');
|
|
process.exit(1);
|
|
}
|
|
|
|
// Warn about default secrets in production
|
|
if (process.env.NODE_ENV === 'production') {
|
|
if (process.env.NEXTAUTH_SECRET == "") {
|
|
console.error('CRITICAL: Default session secret detected in production!');
|
|
console.error('Please change NEXTAUTH_SECRET in your .env file.');
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
export const config = {
|
|
server: {
|
|
port: parseInt(process.env.PORT || '3000', 10),
|
|
nodeEnv: process.env.NODE_ENV || 'development'
|
|
},
|
|
security: {
|
|
sessionSecret: process.env.NEXTAUTH_SECRET!,
|
|
githubClientId: process.env.GITHUB_CLIENT_ID!,
|
|
githubClientSecret: process.env.GITHUB_CLIENT_SECRET!,
|
|
corsOrigin: process.env.NODE_ENV === 'development'
|
|
? ['http://localhost:3000', 'http://localhost:5173']
|
|
: 'http://localhost:3000'
|
|
},
|
|
rateLimit: {
|
|
windowMs: parseInt(process.env.RATE_LIMIT_WINDOW_MS || '900000', 10), // 15 minutes
|
|
maxRequests: parseInt(process.env.RATE_LIMIT_MAX_REQUESTS || '100', 10)
|
|
},
|
|
slowDown: {
|
|
windowMs: parseInt(process.env.SLOW_DOWN_WINDOW_MS || '60000', 10), // 1 minute
|
|
delayMs: parseInt(process.env.SLOW_DOWN_DELAY_MS || '500', 10) // 500ms delay
|
|
},
|
|
logging: {
|
|
level: process.env.LOG_LEVEL || 'info'
|
|
}
|
|
}; |