87 lines
7.6 KiB
Markdown
87 lines
7.6 KiB
Markdown
# Глобальный рефакторинг — 2026-09-09
|
|
|
|
## Границы работы
|
|
|
|
Переработаны backend/шаблоны сайта и React/Rust-слои нового лаунчера.
|
|
Не менялись миры, модпак, порты, compose-топология, цены или режимы аккаунтов.
|
|
Не переносились production-БД, секреты и приватный ключ подписи.
|
|
|
|
## Backend
|
|
|
|
- Монолит main.py разделён на HTTP routers, services, schemas, middleware
|
|
и единый резолвер ресурсов. Entrypoint app.main:app сохранён.
|
|
- Cookie/bearer вход используют одну реализацию аккаунтов, паролей и сессий.
|
|
- Ограничитель попыток входа защищён от гонок и бесконечного роста памяти.
|
|
Он process-local; multi-worker развертывание требует общего хранилища.
|
|
- Оплата и подписка фиксируются одной SQLite-транзакцией. Claim/reject,
|
|
продление, recovery и привязки сериализуют конфликтующие операции.
|
|
- JSON metadata проверяются централизованно: неверный UTF-8, не-object JSON
|
|
и небезопасные идентификаторы не приводят к непредусмотренному чтению пути.
|
|
- Jinja наследование убирает копии фона/шапки/навигации. Размер фона 72×83
|
|
задаётся единожды. HTML-формы, скрипты и визуальная структура сохранены.
|
|
- Python зависимости зафиксированы на версиях действовавшего runtime.
|
|
Добавлены pytest, Ruff, CI и изолированный test-stage Docker.
|
|
|
|
## Лаунчер
|
|
|
|
- React разделён на компоненты, hooks, типизированный IPC и reducers.
|
|
TypeScript проверяется сборкой; ошибки IPC не теряются.
|
|
- Сохранены новые изменения GitHub 0.1.1: обязательный ShaCraft-аккаунт,
|
|
verified aoc nickname, реальный онлайн, управление окном и Windows-фиксы
|
|
установки/полных библиотек/точной Java major/длинной JVM-команды.
|
|
- Сохранения настроек упорядочены; lifecycle install/launch/exit явный;
|
|
демонстрационные значения прогресса не выдаются за реальную установку.
|
|
- Rust commands выделены по ответственности. Неиспользуемые команды
|
|
unsigned sync/inspect удалены; запись профиля требует verified manifest.
|
|
- Общие атомарные записи и process-local permits защищают файлы от
|
|
конфликтующих операций. Проверяются переносимые пути, symlink и подпись.
|
|
- HTTPS exact-host policy распространяется и на redirects отдельных
|
|
игровых провайдеров. Метаданные архивов Adoptium проверяются до загрузки.
|
|
- GitHub: тесты/сборка на push/PR; ручная матрица пакетов Linux/Windows/macOS
|
|
Intel/ARM с сохранением артефактов. Это не подпись релизов и не автообновление.
|
|
|
|
## Проверки
|
|
|
|
Фактический итог: 88 backend-тестов + 23 subtests (локально и в изолированном
|
|
Docker), 22 UI-теста, 59 Rust unit tests и отдельная живая read-only проверка
|
|
production signed-manifest — успешно. npm ci/audit: 0 известных уязвимостей
|
|
на момент прогона; строгий TypeScript/Vite и Ruff проходят. Это итог после
|
|
объединения со всеми изменениями GitHub 0.1.1; прежние upstream Rust-тесты
|
|
сохранены. Browser smoke: вход/регистрация ShaCraft, preview-gating,
|
|
настройки, закрытие Escape и восстановление фокуса проверены без отправки
|
|
учётных данных. Четыре тяжёлых/live игровых сценария не запускались.
|
|
|
|
Backend выложен, image ID контейнера совпадает с собранным образом;
|
|
главная/Help/Моды/кабинет/healthz/catalog/signed-manifest отвечают 200,
|
|
публичная админка по-прежнему закрыта Caddy (403). Внешний вид проверен
|
|
в браузере. Время запуска mc-aoc не изменилось. Резервный образ сохранён
|
|
как `shacraft-backend:before-refactor-20260909`, исходники —
|
|
`/root/shacraft-rollback-NWKzLR`. Схема БД не менялась.
|
|
|
|
Backend: неизменность полного OpenAPI-снимка, публичные шаблоны, аккаунты,
|
|
пароли/recovery, rate limit, LoginSystem gating, admin auth, платежи,
|
|
rollback/параллельные операции, каталоги/manifest/config, startup/shutdown.
|
|
Внешние эффекты замещены заглушками, БД только временная.
|
|
|
|
Launcher: строгий TypeScript + Vite, тесты UI state/settings/listeners,
|
|
Rust unit tests по подписи/путям/хранилищу/IPC guards/trusted hosts.
|
|
Полная холодная установка игры, OAuth и запуск на Windows/macOS требуют
|
|
отдельного ручного beta-прогона; не выдавать локальные проверки за такой тест.
|
|
|
|
## Не замаскированные рефактором ограничения
|
|
|
|
1. Привязка ника: NoGravity подтверждает авторизацию игрока на сервере,
|
|
но не связь с конкретным веб-запросом. Нужен одноразовый challenge в игре.
|
|
2. Реферальная акция: enforcement REFERRAL_ENABLED и новизны самого
|
|
плательщика не соответствует всей публичной формулировке. Требуется
|
|
отдельное согласованное изменение бизнес-правил и регрессионные тесты.
|
|
3. RCON/уведомления после commit не имеют outbox/retry. Сбой может потребовать
|
|
ручной выдачи, а не повторного начисления подписки.
|
|
4. Microsoft OAuth не является текущим способом входа: используется
|
|
ShaCraft account + verified nickname. Неактивный OAuth-модуль требует
|
|
собственного client ID и API approval при отдельной будущей активации.
|
|
5. Нужны подписанные installer/update-релизы, native beta на всех ОС,
|
|
полноценная отмена загрузок и recovery пользовательских данных.
|
|
6. Блокировки лаунчера process-local; symlink-проверки не защищают от
|
|
злонамеренного same-user TOCTOU. Keychain хранения refresh token пока нет.
|