Files
vue-pult/server/api/auth-dev.js
sasha 3e90269b0b Initial commit: Vue.js тир управления система
- Клиентская часть Vue 3 + Vite
- Серверная часть Node.js + WebSocket
- Система авторизации и смен
- Управление игровыми портами
- Поддержка тем (светлая/темная)
- Адаптивный дизайн

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-19 12:24:22 +03:00

126 lines
5.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"use strict";
const fs = require('node:fs/promises');
const path = require('path');
exports.go = async (req, res, postData, urlParsed) => {
try {
console.log('[api/auth-dev] РАЗРАБОТЧЕСКАЯ авторизация:', postData);
// Проверяем, что данные переданы
if (!postData || !postData.phone) {
return res.end(JSON.stringify({
success: false,
error: "Не указан номер телефона"
}));
}
// Нормализуем номер телефона (убираем все кроме цифр)
const normalizedPhone = postData.phone.replace(/\D/g, '');
console.log('[api/auth-dev] РАЗРАБОТЧЕСКАЯ авторизация для телефона:', normalizedPhone);
// Читаем данные администраторов
let admins = {};
try {
const adminsData = await fs.readFile(path.join(__dirname, '../data/avt.ini'), 'utf8');
admins = JSON.parse(adminsData);
console.log('[api/auth-dev] Доступные пользователи:', Object.keys(admins).length);
} catch (error) {
console.error('[api/auth-dev] Ошибка чтения файла пользователей:', error);
return res.end(JSON.stringify({
success: false,
error: "Ошибка загрузки данных пользователей"
}));
}
// Ищем пользователя по номеру телефона
let foundUser = null;
for (const [phone, userData] of Object.entries(admins)) {
const userNormalizedPhone = phone.replace(/\D/g, '');
if (userNormalizedPhone === normalizedPhone) {
foundUser = userData;
break;
}
}
if (!foundUser) {
console.log('[api/auth-dev] Пользователь не найден');
return res.end(JSON.stringify({
success: false,
error: "Пользователь с таким номером телефона не найден"
}));
}
console.log('[api/auth-dev] РАЗРАБОТЧЕСКАЯ авторизация успешна для:', foundUser.fio || foundUser._id);
// Генерируем сессионный hash для WebSocket авторизации
let sessionHash = null;
try {
// Читаем текущие хэши
let hashData = {};
try {
const hashFileContent = await fs.readFile(path.join(__dirname, '../data/hash.ini'), 'utf8');
hashData = JSON.parse(hashFileContent);
} catch (error) {
console.log('[api/auth-dev] Создаем новый файл хэшей');
hashData = {};
}
// Генерируем новый хэш (упрощенная версия)
sessionHash = require('crypto').randomBytes(8).toString('hex');
hashData[normalizedPhone] = sessionHash;
// Сохраняем хэш
await fs.writeFile(path.join(__dirname, '../data/hash.ini'), JSON.stringify(hashData));
console.log('[api/auth-dev] Сгенерирован hash для WebSocket:', sessionHash);
} catch (error) {
console.warn('[api/auth-dev] Ошибка генерации hash:', error);
}
// Определяем роль пользователя
let userRole = 'operator';
if (foundUser.taccess) {
userRole = foundUser.taccess;
} else if (foundUser.access && foundUser.access.fullaccess) {
userRole = 'admin';
} else if (foundUser.groupz && foundUser.groupz.name) {
const groupName = foundUser.groupz.name.toLowerCase();
if (groupName.includes('программист') || groupName.includes('админ')) {
userRole = 'admin';
} else if (groupName.includes('оператор')) {
userRole = 'operators';
} else if (groupName.includes('техник')) {
userRole = 'technics';
}
}
// Возвращаем данные пользователя в формате React клиента
const response = {
success: true,
user: {
id: foundUser._id || foundUser.id || normalizedPhone,
name: foundUser.fio || foundUser.name || foundUser._id || 'Пользователь',
phone: normalizedPhone,
role: userRole,
isAuthenticated: true,
hash: sessionHash, // Hash для WebSocket авторизации
// Дополнительные данные из профиля
group: foundUser.groupz ? foundUser.groupz.name : null,
color: foundUser.color || null,
balance: foundUser.bal || null,
devAuth: true, // Флаг что это разработческая авторизация
serverConnected: global.conn_to_server
}
};
res.end(JSON.stringify(response));
} catch (error) {
console.error('[api/auth-dev] Критическая ошибка при авторизации:', error);
res.end(JSON.stringify({
success: false,
error: "Внутренняя ошибка сервера при авторизации"
}));
}
};