Initial Commit

This commit is contained in:
ExilProductions
2026-01-14 17:52:35 +01:00
parent 2d3b97c5db
commit cf066ef305
28 changed files with 1922 additions and 0 deletions

55
server/config.ts Normal file
View File

@@ -0,0 +1,55 @@
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'
}
};