43 lines
1.6 KiB
JavaScript
43 lines
1.6 KiB
JavaScript
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 }; |