Backend: - Complete FastAPI backend with 42+ REST endpoints (auth, servers, config, players, bans, missions, mods, games, system) - Game adapter architecture with Arma 3 as first-class adapter - WebSocket real-time events for status, metrics, logs, players - Background thread system (process monitor, metrics, log tail, RCon poller) - Fernet encryption for sensitive config fields at rest - JWT auth with admin/viewer roles, bcrypt password hashing - SQLite with WAL mode, parameterized queries, migration system - APScheduler cleanup jobs for logs, metrics, events Frontend: - Server Detail page with 7 tabs (overview, config, players, bans, missions, mods, logs) - Settings page with password change and admin user management - Create Server wizard (4-step; known bug: silent validation failure) - New hooks: useServerDetail, useAuth, useGames - New components: ServerHeader, ConfigEditor, PlayerTable, BanTable, MissionList, ModList, LogViewer, PasswordChange, UserManager - WebSocket onEvent callback for real-time log accumulation - 120 unit tests passing (Vitest + React Testing Library) Docs: - Added .gitignore, CLAUDE.md, README.md - Updated FRONTEND.md, ARCHITECTURE.md with current implementation state - Added .env.example for backend configuration Known issues: - Create Server form: "Next" buttons don't validate before advancing, causing silent submit failure when fields are invalid - Config sub-tabs need UX redesign for non-technical users
59 lines
1.8 KiB
Python
59 lines
1.8 KiB
Python
"""Arma 3 adapter — composes all Arma 3 capability implementations."""
|
|
from adapters.arma3.config_generator import Arma3ConfigGenerator
|
|
from adapters.arma3.process_config import Arma3ProcessConfig
|
|
|
|
# Capabilities enabled so far (add more as phases complete)
|
|
_CAPABILITIES = {
|
|
"config_generator",
|
|
"process_config",
|
|
"log_parser",
|
|
"remote_admin",
|
|
"ban_manager",
|
|
"mission_manager",
|
|
"mod_manager",
|
|
}
|
|
|
|
|
|
class Arma3Adapter:
|
|
game_type = "arma3"
|
|
display_name = "Arma 3"
|
|
version = "1.0.0"
|
|
|
|
def get_config_generator(self):
|
|
return Arma3ConfigGenerator()
|
|
|
|
def get_process_config(self):
|
|
return Arma3ProcessConfig()
|
|
|
|
def get_log_parser(self):
|
|
from adapters.arma3.log_parser import RPTParser
|
|
return RPTParser()
|
|
|
|
def get_remote_admin(self):
|
|
"""Return the RemoteAdmin factory for Arma3 BattlEye RCon."""
|
|
from adapters.arma3.remote_admin import Arma3RemoteAdminFactory
|
|
return Arma3RemoteAdminFactory()
|
|
|
|
def get_mission_manager(self, server_id: int | None = None):
|
|
from adapters.arma3.mission_manager import Arma3MissionManager
|
|
return Arma3MissionManager(server_id=server_id)
|
|
|
|
def get_mod_manager(self, server_id: int | None = None):
|
|
from adapters.arma3.mod_manager import Arma3ModManager
|
|
return Arma3ModManager(server_id=server_id)
|
|
|
|
def get_ban_manager(self, server_id: int | None = None):
|
|
from adapters.arma3.ban_manager import Arma3BanManager
|
|
return Arma3BanManager(server_id=server_id)
|
|
|
|
def has_capability(self, name: str) -> bool:
|
|
return name in _CAPABILITIES
|
|
|
|
def get_additional_routers(self) -> list:
|
|
return []
|
|
|
|
def get_custom_thread_factories(self) -> list:
|
|
return []
|
|
|
|
|
|
ARMA3_ADAPTER = Arma3Adapter() |