CRITICAL FIXES: - Remove hardcoded DB password from api/db.ts (was: 9qPRdCGGqM4o) - Remove hardcoded API key from api/routes/wp-monitor.ts - Add mandatory env var validation for DB_USER, DB_PASS, DB_NAME - Add mandatory env var validation for WP_MONITOR_API_KEY - Add connection timeouts to MySQL pool (10s/15s/30s) VERIFIED: - .env never committed to Git (credentials not exposed in repo) - .gitignore working correctly DEPENDENCIES: - Fix qs vulnerability (GHSA-w7fw-mjwx-w883) - npm audit: 1 low → 0 vulnerabilities Related: AUDIT-REPORT.md vulnerabilities 1.1, 1.2, 1.3 Next: Implement rate limiting, CORS restrictions, input validation Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
42 lines
1.1 KiB
TypeScript
Executable File
42 lines
1.1 KiB
TypeScript
Executable File
/**
|
|
* Database Connection Pool
|
|
* @author Descomplicar® | @link descomplicar.pt | @copyright 2026
|
|
*/
|
|
import 'dotenv/config'
|
|
import mysql from 'mysql2/promise'
|
|
|
|
// Database configuration
|
|
const config = {
|
|
host: process.env.DB_HOST || 'localhost',
|
|
user: process.env.DB_USER,
|
|
password: process.env.DB_PASS,
|
|
database: process.env.DB_NAME,
|
|
waitForConnections: true,
|
|
connectionLimit: 10,
|
|
queueLimit: 0,
|
|
connectTimeout: 10000, // 10 segundos
|
|
acquireTimeout: 15000, // 15 segundos
|
|
timeout: 30000, // 30 segundos para queries
|
|
charset: 'utf8mb4'
|
|
}
|
|
|
|
// Validação obrigatória de credenciais
|
|
if (!process.env.DB_USER || !process.env.DB_PASS || !process.env.DB_NAME) {
|
|
throw new Error('Missing required database environment variables: DB_USER, DB_PASS, DB_NAME')
|
|
}
|
|
|
|
// Create connection pool
|
|
const pool = mysql.createPool(config)
|
|
|
|
// Test connection
|
|
pool.getConnection()
|
|
.then(conn => {
|
|
console.log('✅ MySQL connected')
|
|
conn.release()
|
|
})
|
|
.catch(err => {
|
|
console.error('❌ MySQL connection error:', err.message)
|
|
})
|
|
|
|
export default pool
|