# Обновления системы ## Выполнено ### 1. ✅ Очистка пользователей - Удалены все тестовые пользователи - Оставлен только один пользователь: `admin` (пароль тот же) - Роль: `owner` ### 2. ✅ Удалены временные файлы Удалены все временные .md файлы с отладкой: - ИСПРАВЛЕНО.md - ИСПРАВЛЕНИЕ_ACCESS_DENIED.md - ЧТО_ДЕЛАТЬ_СЕЙЧАС.md - ОТЛАДКА.md - РЕШЕНИЕ_ПРОБЛЕМЫ.md - ОБНОВЛЕНИЕ_УДАЛЕННОГО_СЕРВЕРА.md - УСПЕХ.md - CHANGELOG_DAEMONS.md - QUICK_TEST_DAEMONS.md - БЫСТРЫЙ_СТАРТ_ДЕМОНЫ.md - test_remote_api.py - debug_token.html ### 3. ✅ Админы и владельцы видят ВСЕ серверы - Обновлен endpoint `/api/servers` - Добавлена проверка: `is_admin_or_owner = user.get("role") in ["owner", "admin"]` - Если пользователь owner или admin - видит все серверы - Обычные пользователи видят только свои серверы - Добавлено поле `owner` в ответе API ### 4. ✅ Выбор демона при создании сервера - Обновлен компонент `CreateServerModal.jsx`: - Добавлен выпадающий список с демонами - Загружаются только онлайн демоны - По умолчанию выбран "Локальный (эта машина)" - Показывается подсказка о том, где будет создан сервер - Обновлен endpoint `/api/servers/create`: - Поддержка параметра `daemonId` - Если `daemonId === "local"` - создается локально - Если указан ID демона - отправляется запрос на daemon API - Локально сохраняется информация о сервере с префиксом `{daemonId}_{serverName}` - Автоматическая выдача доступа пользователю ## Как использовать ### Вход в систему ``` Логин: admin Пароль: Admin ``` ### Создание сервера 1. Нажмите "Создать сервер" 2. Выберите демон из списка: - **Локальный (эта машина)** - сервер будет на панели - **Test Daemon** (или другой) - сервер будет на удаленном демоне 3. Заполните остальные поля 4. Нажмите "Создать" ### Просмотр серверов - **Owner и Admin** видят ВСЕ серверы всех пользователей - **Обычные пользователи** видят только свои серверы - В списке серверов показывается владелец сервера ## Структура серверов на демонах Когда сервер создается на демоне: - **На демоне**: создается папка `servers/{server_name}/` - **На панели**: создается запись `servers/{daemon_id}_{server_name}/` с конфигурацией - В конфигурации сохраняется: - `daemonId` - ID демона - `daemonName` - название демона - `owner` - владелец сервера - Остальные параметры ## API изменения ### GET /api/servers Теперь возвращает: ```json [ { "name": "my_server", "displayName": "Мой сервер", "status": "stopped", "owner": "admin" } ] ``` ### POST /api/servers/create Новые параметры: ```json { "name": "my_server", "displayName": "Мой сервер", "startCommand": "java -Xmx2G -jar server.jar nogui", "daemonId": "daemon-1" // или "local" } ``` Ответ: ```json { "message": "Сервер создан", "name": "my_server", "daemonId": "daemon-1" } ``` ## Следующие шаги Для полной интеграции с демонами нужно: 1. **Управление серверами на демонах**: - Запуск/остановка через daemon API - Отправка команд в консоль - Получение логов 2. **Файловый менеджер для демонов**: - Просмотр файлов на удаленном демоне - Загрузка/скачивание файлов - Редактирование конфигов 3. **Статистика серверов на демонах**: - CPU/RAM использование конкретного сервера - Онлайн игроков - Uptime 4. **Консоль для серверов на демонах**: - WebSocket подключение к daemon - Просмотр логов в реальном времени - Отправка команд ## Daemon API для создания сервера Нужно добавить в `daemon/main.py`: ```python @app.post("/api/servers/create") async def create_server_on_daemon(data: dict, authorization: str = Header(None)): """Создать сервер на этом демоне""" verify_key(authorization) server_name = data.get("name") server_path = SERVERS_DIR / server_name if server_path.exists(): raise HTTPException(400, "Server already exists") server_path.mkdir(parents=True) # Сохраняем конфигурацию config = { "name": server_name, "displayName": data.get("displayName", server_name), "startCommand": data.get("startCommand", ""), "owner": data.get("owner", "unknown") } config_file = server_path / "config.json" with open(config_file, 'w', encoding='utf-8') as f: json.dump(config, f, indent=2, ensure_ascii=False) return {"message": "Server created", "name": server_name} ``` --- **Все задачи выполнены! Система готова к использованию.**