diff --git a/.env.example b/.env.example index 0df7c89..0a828ac 100644 --- a/.env.example +++ b/.env.example @@ -12,6 +12,9 @@ APP_URL="MY_APP_URL" MONGODB_URI="mongodb://127.0.0.1:27017" DB_NAME="hospital" -# Default Admin Credentials (Optional, defaults will be used if not set) +# Default Admin Credentials (Used on initial deployment/startup) ADMIN_DNI="12345678" ADMIN_PASSWORD="admin123" +ADMIN_NOMBRE="Sistema" +ADMIN_APELLIDO="Administrador" +ADMIN_EMAIL="admin@hospital.local" diff --git a/server/api-mongodb.js b/server/api-mongodb.js index 257b55d..be04975 100644 --- a/server/api-mongodb.js +++ b/server/api-mongodb.js @@ -664,20 +664,6 @@ app.post('/api/auth/login', async (req, res) => { return res.status(400).json({ error: 'DNI y contraseƱa requeridos' }); } - // Bypass TOTAL "en memoria" directamente en el controlador de la API para entornos sin DB - const adminDni = process.env.ADMIN_DNI || '12345678'; - const adminPassword = process.env.ADMIN_PASSWORD || 'admin123'; - - if (((String(dni) === adminDni || String(dni) === '12345678') || dni === 'admin') && (password === adminPassword || password === 'admin123')) { - return res.json({ - id: 'admin-hardcoded-api', - apellido: 'Administrador', - nombre: 'Sistema (Memoria)', - dni: String(dni), - rol: 'admin' - }); - } - const usuario = await getUsuarioByDni(dni); if (!usuario) { return res.status(401).json({ error: 'Usuario no encontrado' }); diff --git a/server/db-mongodb.js b/server/db-mongodb.js index 9cc7627..b0d62cd 100644 --- a/server/db-mongodb.js +++ b/server/db-mongodb.js @@ -19,9 +19,30 @@ const DB_NAME = process.env.DB_NAME || 'hospital'; let client; let db = null; +// Helper to create default admin object from env or fallback +function createDefaultAdminUser() { + const adminDni = process.env.ADMIN_DNI || '12345678'; + const adminPassword = process.env.ADMIN_PASSWORD || 'admin123'; + const adminNombre = process.env.ADMIN_NOMBRE || 'Sistema'; + const adminApellido = process.env.ADMIN_APELLIDO || 'Administrador'; + const adminEmail = process.env.ADMIN_EMAIL || 'admin@hospital.local'; + + return { + id: 'admin-default', + apellido: adminApellido, + nombre: adminNombre, + dni: adminDni, + fechaNacimiento: '1990-01-01', + email: adminEmail, + rol: 'admin', + passwordHash: hashSync(adminPassword, 10), + fechaCreacion: new Date().toISOString().split('T')[0] + }; +} + // In-memory fallback store when DB is not connected const memStore = { - usuarios: [], + usuarios: [createDefaultAdminUser()], pacientes: [], areas: [], camas: [], @@ -54,27 +75,14 @@ export async function initDb() { await db.collection('pacientes').createIndex({ dni: 1 }, { unique: true }); await db.collection('areas').createIndex({ nombre: 1 }, { unique: true }); - // Check if default admin exists + // Check if default admin exists in MongoDB in production const adminDni = process.env.ADMIN_DNI || '12345678'; const adminExists = await db.collection('usuarios').findOne({ dni: adminDni }); if (!adminExists) { - const adminPassword = process.env.ADMIN_PASSWORD || 'admin123'; - const adminHash = hashSync(adminPassword, 10); - - const adminUser = { - id: 'admin-default', - apellido: 'Administrador', - nombre: 'Sistema', - dni: adminDni, - fechaNacimiento: '1990-01-01', - email: 'admin@hospital.local', - rol: 'admin', - passwordHash: adminHash, - fechaCreacion: new Date().toISOString().split('T')[0] - }; - await db.collection('usuarios').insertOne(adminUser); - console.log(`Default admin created/ensured: DNI ${adminDni} / Password ${adminPassword}`); + const defaultAdmin = createDefaultAdminUser(); + await db.collection('usuarios').insertOne(defaultAdmin); + console.log(`Default admin created/ensured in database: DNI ${adminDni}`); } } catch (error) { console.error('Failed to initialize MongoDB (will use in-memory store):', error.message || error); @@ -97,18 +105,6 @@ function cleanDocs(docs) { // ========== USUARIOS ========== export async function getUsuarioByDni(dni) { const dniStr = String(dni).trim(); - const adminDni = process.env.ADMIN_DNI || '12345678'; - - if (dniStr === adminDni || dniStr === '12345678' || dniStr === 'admin') { - return { - id: 'admin-hardcoded-dev', - apellido: 'Administrador', - nombre: 'Desarrollo (Memoria)', - dni: dniStr, - rol: 'admin', - fechaCreacion: new Date().toISOString() - }; - } if (db) { const user = await db.collection('usuarios').findOne({ dni: dniStr }); @@ -170,16 +166,10 @@ export async function deleteUsuario(id) { export async function verifyPassword(dni, password) { const dniStr = String(dni).trim(); - const adminDni = process.env.ADMIN_DNI || '12345678'; - const adminPassword = process.env.ADMIN_PASSWORD || 'admin123'; - - if ((dniStr === adminDni || dniStr === '12345678' || dniStr === 'admin') && (password === adminPassword || password === 'admin123')) { - return true; - } if (db) { const user = await db.collection('usuarios').findOne({ dni: dniStr }); - if (!user) return false; + if (!user || !user.passwordHash) return false; return compareSync(password, user.passwordHash); } const user = memStore.usuarios.find(u => String(u.dni) === dniStr);