Полный рефакторинг сервера и клиента, голосовые сообщения, аудио/видео, Docker
Сервер: - Вынесена конфигурация в server/config.js (порт, размер файла из env) - Вынесена аутентификация в server/auth.js (загрузка users.json, authenticate()) - Вынесено управление соединениями в server/clients.js (createJsonSender, broadcast, validateFile) - server/server.js стал точкой входа — минимальный код Клиент: - Вынесены хуки: hooks/useWebSocket.js (WebSocket + auth), hooks/useChatMessages.js (сообщения + уведомления) - Вынесены утилиты: utils/blob.js (base64 → Blob URL), utils/linkify.jsx (URL → ссылки), utils/notify.js (звук + favicon) Новые функции: - VoiceRecorder — запись голоса через MediaRecorder, отправка как файл - Аудио/видео плеер в Message (audio/*, video/* с controls) - URL linkification — http/https ссылки автоматически кликабельны - Звуковое уведомление (Web Audio API) при сообщении на неактивной вкладке - Красная точка на favicon при непрочитанных сообщениях Инфраструктура: - docker-entrypoint.sh: авто-перезапуск Node.js сервера при падении - Обновлён README.md: новая структура проекта, список функций, примеры - Кастомный тонкий скроллбар в Message.css
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const config = require('./config');
|
||||
|
||||
const usersPath = path.join(__dirname, config.usersFile);
|
||||
let users;
|
||||
|
||||
try {
|
||||
users = JSON.parse(fs.readFileSync(usersPath, 'utf-8'));
|
||||
console.log(`Loaded ${users.length} user(s) from ${config.usersFile}`);
|
||||
} catch (err) {
|
||||
console.error(`Failed to load ${config.usersFile}:`, err.message);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
function authenticate(login, password) {
|
||||
const user = users.find(u => u.login === login && u.password === password);
|
||||
return user || null;
|
||||
}
|
||||
|
||||
module.exports = { authenticate };
|
||||
Reference in New Issue
Block a user