"use strict"; const fs = require('node:fs/promises'); const path = require('path'); exports.go = async (req, res, postData, urlParsed) => { try { console.log('[api/user-info] Запрос информации о пользователе:', { phone: postData.phone, hasHash: !!postData.hash }); // Проверяем обязательные поля if (!postData.phone || !postData.hash) { return res.end(JSON.stringify({ success: false, error: "Не указан номер телефона или сессионный хэш" })); } // Нормализуем номер телефона const normalizedPhone = postData.phone.replace(/\D/g, ''); // Читаем данные пользователей и сессионных хэшей let avt = {}; let hash = {}; try { const avtData = await fs.readFile(path.join(__dirname, '../data/avt.ini'), 'utf8'); avt = JSON.parse(avtData); } catch (error) { console.error('[api/user-info] Ошибка чтения avt.ini:', error); return res.end(JSON.stringify({ success: false, error: "Ошибка загрузки данных пользователей" })); } try { const hashData = await fs.readFile(path.join(__dirname, '../data/hash.ini'), 'utf8'); hash = JSON.parse(hashData); } catch (error) { console.warn('[api/user-info] Файл hash.ini не найден'); hash = {}; } // ПРОВЕРКА СЕССИОННОГО ХЭША if (normalizedPhone in hash && normalizedPhone in avt && hash[normalizedPhone] === postData.hash) { console.log('[api/user-info] ✅ Сессионный хэш действителен'); const user = JSON.parse(JSON.stringify(avt[normalizedPhone])); delete user.pass; if (user.groupz && user.groupz.access) delete user.groupz.access; // Определяем роль пользователя let userRole = 'operator'; if (user.taccess) { userRole = user.taccess; } else if (user.access && user.access.fullaccess) { userRole = 'admin'; } else if (user.groupz && user.groupz.name) { const groupName = user.groupz.name.toLowerCase(); if (groupName.includes('программист') || groupName.includes('админ')) { userRole = 'admin'; } else if (groupName.includes('оператор')) { userRole = 'operators'; } else if (groupName.includes('техник')) { userRole = 'technics'; } } // Возвращаем актуальные данные пользователя const response = { success: true, user: { id: user._id || normalizedPhone, name: user.fio || user.name || 'Пользователь', phone: normalizedPhone, role: userRole, isAuthenticated: true, hash: postData.hash, // Возвращаем тот же хэш // Дополнительные данные group: user.groupz ? user.groupz.name : null, color: user.color || null, balance: user.bal || null, serverConnected: global.conn_to_server || false, lastUpdate: Date.now() } }; res.end(JSON.stringify(response)); } else { console.log('[api/user-info] ❌ Сессионный хэш недействителен'); res.end(JSON.stringify({ success: false, error: "Сессия истекла или недействительна" })); } } catch (error) { console.error('[api/user-info] Критическая ошибка:', error); res.end(JSON.stringify({ success: false, error: "Внутренняя ошибка сервера" })); } };