// config/production.js - SECURE production configuration
const requiredConfig = [
'DB_HOST', 'DB_PORT', 'DB_NAME', 'DB_USERNAME', 'DB_PASSWORD',
'REDIS_HOST', 'REDIS_PORT', 'REDIS_PASSWORD',
'AWS_ACCESS_KEY_ID', 'AWS_SECRET_ACCESS_KEY', 'AWS_REGION',
'SENDGRID_API_KEY', 'SLACK_WEBHOOK_URL',
'JWT_SECRET', 'ENCRYPTION_KEY'
];
// Validate all required environment variables are present
const missingConfig = requiredConfig.filter(key => !process.env[key]);
if (missingConfig.length > 0) {
console.error('Missing required environment variables:', missingConfig);
process.exit(1);
}
module.exports = {
database: {
host: process.env.DB_HOST,
port: parseInt(process.env.DB_PORT),
name: process.env.DB_NAME,
username: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD
},
redis: {
host: process.env.REDIS_HOST,
port: parseInt(process.env.REDIS_PORT),
password: process.env.REDIS_PASSWORD
},
external: {
aws: {
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
region: process.env.AWS_REGION
},
sendgrid: {
apiKey: process.env.SENDGRID_API_KEY
},
slack: {
webhookUrl: process.env.SLACK_WEBHOOK_URL
}
},
security: {
jwtSecret: process.env.JWT_SECRET,
encryptionKey: process.env.ENCRYPTION_KEY
}
};
// Optional: Add configuration validation
function validateConfiguration(config) {
// Validate JWT secret length
if (config.security.jwtSecret.length < 32) {
throw new Error('JWT secret must be at least 32 characters long');
}
// Validate encryption key length
if (config.security.encryptionKey.length !== 32) {
throw new Error('Encryption key must be exactly 32 characters long');
}
return config;
}
module.exports = validateConfiguration(module.exports);