-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsetup.js
More file actions
126 lines (102 loc) · 3.47 KB
/
setup.js
File metadata and controls
126 lines (102 loc) · 3.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#!/usr/bin/env node
const crypto = require('crypto');
const fs = require('fs');
const path = require('path');
console.log('\n🔧 Script de Setup - Crypto API Segura\n');
// Generar API key segura
const generateApiKey = () => {
return crypto.randomBytes(32).toString('hex');
};
// Crear archivo .env si no existe
const createEnvFile = () => {
const envPath = path.join(__dirname, '.env');
const envExamplePath = path.join(__dirname, '.env.example');
if (fs.existsSync(envPath)) {
console.log('⚠️ Archivo .env ya existe. No se sobrescribirá.');
return false;
}
if (!fs.existsSync(envExamplePath)) {
console.log('❌ Archivo .env.example no encontrado');
return false;
}
// Leer template y generar API key
const template = fs.readFileSync(envExamplePath, 'utf8');
const apiKey = generateApiKey();
// Reemplazar placeholder con API key real
const envContent = template.replace('your-super-secret-api-key-here', apiKey);
fs.writeFileSync(envPath, envContent);
console.log('✅ Archivo .env creado exitosamente');
console.log(`🔑 API Key generada: ${apiKey.substring(0, 8)}...`);
return true;
};
// Verificar dependencias
const checkDependencies = () => {
const packagePath = path.join(__dirname, 'package.json');
const nodeModulesPath = path.join(__dirname, 'node_modules');
if (!fs.existsSync(packagePath)) {
console.log('❌ package.json no encontrado');
return false;
}
if (!fs.existsSync(nodeModulesPath)) {
console.log('❌ Dependencias no instaladas. Ejecuta: npm install');
return false;
}
const pkg = JSON.parse(fs.readFileSync(packagePath, 'utf8'));
const requiredDeps = ['helmet', 'express-rate-limit', 'express-validator', 'dotenv'];
for (const dep of requiredDeps) {
if (!pkg.dependencies[dep]) {
console.log(`❌ Dependencia faltante: ${dep}`);
return false;
}
}
console.log('✅ Todas las dependencias están instaladas');
return true;
};
// Configuración de seguridad
const showSecurityConfig = () => {
console.log('\n🔒 Configuración de Seguridad:');
console.log('├── ✅ Helmet.js - Headers de seguridad');
console.log('├── ✅ Rate Limiting - Anti DDoS');
console.log('├── ✅ Input Validation - Sanitización');
console.log('├── ✅ API Key Authentication');
console.log('├── ✅ CORS Restrictivo');
console.log('└── ✅ Security Logging');
};
// Instrucciones finales
const showFinalInstructions = () => {
console.log('\n🚀 Siguientes pasos:');
console.log('1. Edita tu archivo .env si es necesario');
console.log('2. Configura ALLOWED_ORIGINS para tu dominio');
console.log('3. Para desarrollo: npm run dev');
console.log('4. Para producción: npm start');
console.log('\n📚 Documentación:');
console.log('- README_SECURE.md - Documentación completa');
console.log('- SECURITY.md - Guía de seguridad');
console.log('\n⚠️ IMPORTANTE: Cambia la API_KEY antes de deployar a producción');
};
// Main execution
const main = () => {
try {
console.log('🔍 Verificando dependencias...');
if (!checkDependencies()) {
process.exit(1);
}
console.log('\n🔧 Configurando archivo .env...');
createEnvFile();
showSecurityConfig();
showFinalInstructions();
console.log('\n✅ Setup completado exitosamente!\n');
} catch (error) {
console.error('❌ Error durante el setup:', error.message);
process.exit(1);
}
};
// Ejecutar si es llamado directamente
if (require.main === module) {
main();
}
module.exports = {
generateApiKey,
createEnvFile,
checkDependencies,
};