Files
shacraft-launcher/docs/refactor-2026-09-09.md
T

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 пока нет.