const session = require('express-session'); const bcrypt = require('bcrypt'); const { db } = require('./db'); const sessionMiddleware = session({ secret: process.env.SESSION_SECRET || 'hotel-secret-key-change-me', resave: false, saveUninitialized: false, cookie: { secure: false, httpOnly: true, maxAge: 24 * 60 * 60 * 1000 } }); /** * Гарантирует существование администратора, заданного переменными окружения * (ADMIN_LOGIN / ADMIN_PASSWORD). Пароль всегда хэшируется. */ async function ensureAdmin() { const login = process.env.ADMIN_LOGIN || 'admin'; const password = process.env.ADMIN_PASSWORD || 'admin'; const saltRounds = 10; const admin = db.prepare('SELECT id FROM admins WHERE login = ?').get(login); const hashed = await bcrypt.hash(password, saltRounds); if (admin) { db.prepare('UPDATE admins SET password = ? WHERE login = ?').run(hashed, login); console.log(`Пароль администратора "${login}" обновлён (хэширован)`); } else { db.prepare('INSERT INTO admins (login, password) VALUES (?, ?)').run(login, hashed); console.log(`Администратор "${login}" создан (хэширован)`); } } /** * Middleware для проверки прав администратора. */ function requireAdmin(req, res, next) { if (req.session && req.session.isAdmin) { return next(); } res.status(401).json({ error: 'Не авторизован' }); } module.exports = { sessionMiddleware, ensureAdmin, requireAdmin };