const bcrypt = require('bcryptjs'); class AuthService { constructor() { this.db = null; } setDatabase(database) { this.db = database; this.initUsers(); } initUsers() { if (!this.db) return; const users = [ { login: process.env.USER_1_LOGIN, password: process.env.USER_1_PASSWORD, name: process.env.USER_1_NAME, email: process.env.USER_1_EMAIL, role: process.env.USER_1_ROLE || 'admin' } ]; for (const u of users) { if (u.login && u.password) { this.createUserIfNotExists(u); } } } async createUserIfNotExists(userData) { const row = this.db.prepare('SELECT id FROM users WHERE login = ?').get(userData.login); if (!row) { const hashedPassword = await bcrypt.hash(userData.password, 10); this.db.prepare( 'INSERT INTO users (login, password, name, email, role, auth_type, created_at) VALUES (?, ?, ?, ?, ?, ?, datetime(\'now\'))' ).run(userData.login, hashedPassword, userData.name, userData.email || null, userData.role, 'local'); console.log('Создан пользователь: ' + userData.name); } } authenticate(login, password) { const user = this.db.prepare("SELECT * FROM users WHERE login = ? AND auth_type = 'local'").get(login); if (!user) return null; const isValid = bcrypt.compareSync(password, user.password); if (isValid) { this.db.prepare("UPDATE users SET last_login = datetime('now') WHERE id = ?").run(user.id); const { password, ...userWithoutPassword } = user; return userWithoutPassword; } return null; } getUserById(id) { const user = this.db.prepare('SELECT id, login, name, email, role, auth_type, created_at, last_login FROM users WHERE id = ?').get(id); return user || null; } } const authService = new AuthService(); module.exports = authService;