v1.9.6
Sécurité — le mot de passe admin du serveur de jeu n'apparaît plus dans l'historique de chat public ni dans les logs
- La commande d'élévation
\admin <mot de passe>(envoyée par le bot à chaque reconnexion, ~toutes les 60 s) transitait parsend_chat, qui la journalisait en clair et l'ajoutait au tampon de chat exposé publiquement via/api/live/chat-history— lisible par tout visiteur anonyme de la page classement. - Corrigé : les commandes serveur (préfixe « \ ») ne sont plus jamais ajoutées à l'historique public, et
\adminest rédigé en « \admin *** » dans les logs. Les messages légitimes (bienvenue, réactions spectateurs) restent affichés.
Correction — /api/results/ingest vérifie la signature HMAC avant toute lecture d'état
- Une requête non signée déclenchait auparavant des lectures (fichier d'état, appel Docker
is_running, comptage HTTP des joueurs) avant le rejet. La signature est désormais vérifiée en tout premier.
Correction — l'endpoint de diagnostic /api/live/tcp_debug était cassé et ignorait le serveur courant
- Import invalide (
_build_state_cachedinexistant) provoquant une erreur 500, etserver_idnon propagé. Réparé : bon import et diagnostic sur le serveur réellement sélectionné.
Correction — réutilisation du client Docker partagé pour l'état et le redémarrage du container
container_info(sollicité en polling) etcontainer_restartrouvraient une connexion Docker à chaque appel au lieu de réutiliser le client partagé.
Correction — migration vers l'API SQLAlchemy 2.x et datetime timezone-aware sur les chemins restants
Model.query.get()→db.session.get/db.get_or_404;datetime.utcnow()(déprécié) →datetime.now(timezone.utc).
Ajout — compte à rebours avant le prochain changement de config par inactivité
- Sur la page Programmation et sur l'accueil (étiquette du serveur), affichage d'un compte à rebours "Prochaine config dans MM:SS" quand le roulement par inactivité est actif et qu'aucun joueur n'est connecté.
- N'apparaît que si applicable : masqué si le roulement/seuil est désactivé, ou si des joueurs sont actuellement connectés (le minuteur ne redémarre qu'une fois tout le monde reparti).
- Vérifié en isolation (délai écoulé simulé, avec/sans joueurs) : calcul correct dans les deux cas.
Correction — le comptage de joueurs (et donc le compte à rebours ci-dessus) ne fonctionnait pas sur le serveur 1
- Signalé par un utilisateur : le minuteur de roulement par inactivité n'apparaissait jamais sur son serveur 1 réel.
- Cause n°1 : le hostname par défaut utilisé pour interroger l'API HTTP du serveur de jeu (
ACESERVER_HOST) était figé en dur àaceserverdansDockerfile.panel, alors que le DNS interne Docker ne résout queace-server(lecontainer_nameexplicite du service). Ce défaut erroné faisait silencieusement échouerget_player_count()pour le serveur 1 (jamais pour les serveurs 2+, qui utilisent le nom de container en base de données). - Cause n°2 : le port HTTP interne écrit dans l'état du panel au démarrage (
start_server()) était lu depuis la variable d'environnement globaleACESERVER_HTTP_PORT(8080chez cet utilisateur) au lieu du champhttp_portpropre à chaque serveur en base (8081, le port réellement utilisé pour lancer le jeu). Le panel interrogeait donc le mauvais port. - Les deux bugs sont indépendants de la fonctionnalité de compte à rebours elle-même — ils affectaient déjà silencieusement tout comptage de joueurs sur le serveur 1 avant cet ajout.
- Corrigé : hostname par défaut aligné sur le nom de container réel ;
start_server()accepte désormais unhttp_portexplicite, transmis par les 3 points d'appel (démarrage manuel, démarrage de roulement, lancement programmé) et par l'avance de roulement elle-même. Vérifié en conditions réelles sur le serveur 1 : le comptage de joueurs et le compte à rebours fonctionnent maintenant correctement.
Ajout — bouton "Ignorer" sur le bandeau "Réglages .env ignorés"
- Signalé par un utilisateur : le bandeau reste affiché en continu pour une divergence volontaire/déjà connue (ex.
PANEL_TITLEdifférent entre.envet Paramètres), sans moyen de le faire taire. - Ajout d'un bouton "Ignorer" qui mémorise la valeur
.envexacte actuellement signalée pour chaque clé. Si.envne change plus, le bandeau ne réapparaît pas pour cette clé. S'il change à nouveau (nouvelle édition), c'est une divergence différente et elle réapparaît normalement. - Vérifié en conditions réelles : ignorer fait disparaître la divergence actuelle ; l'éditer à nouveau dans
.envla fait réapparaître.
Ajout — passage automatique au circuit suivant du roulement après inactivité
- Le roulement de configs n'avançait jusqu'ici qu'à la fin d'une session réellement jouée (résultat posté par le serveur de jeu). Si personne ne se connecte, aucune session ne se termine jamais, donc le roulement restait bloqué indéfiniment sur la même config.
- Ajout d'un réglage "Passer à la configuration suivante après (minutes sans joueur)" sur la page Programmation — 0 = désactivé. Le watchdog vérifie désormais aussi le nombre de joueurs connectés, indépendamment de toute session jouée.
- Vérifié en isolation (compteur de joueurs et écoulement du temps simulés) : le déclenchement se comporte comme attendu sans affecter de serveur réel.
Correction — sauvegarder n'importe quel onglet Paramètres réinitialisait les cases à cocher des autres onglets
- Signalé par un utilisateur :
SESSION_COOKIE_SECURE(onglet Panel) repassait àfalse"de temps en temps", sans action directe dessus. - Cause : la sauvegarde d'un onglet Paramètres traitait les cases à cocher de toutes les sections (
_ENV_SECTIONS), pas seulement celles de l'onglet réellement soumis. Une case décochée n'étant jamais envoyée par le navigateur, toute case absente du formulaire soumis (car appartenant à un autre onglet) était silencieusement remise à"false"— y comprisSESSION_COOKIE_SECURE,ACE_BOT_IS_ADMIN,MAIL_USE_TLS,REQUIRE_EMAIL_CONFIRMATION. Sauvegarder l'onglet Serveur ou Notifications suffisait à casser silencieusement les réglages de l'onglet Panel. - C'est aussi ce qui rendait le bandeau "Réglages .env ignorés" (ci-dessous) trompeur : le corriger via Paramètres puis sauvegarder n'importe quel autre onglet le recassait aussitôt.
- Corrigé : chaque case à cocher n'est désormais mise à jour que si elle appartient à l'onglet réellement soumis. Vérifié en conditions réelles (session de test authentifiée) : sauvegarder l'onglet Serveur ne touche plus
SESSION_COOKIE_SECURE.
Correction — le bandeau "Réglages .env ignorés" restait affiché après correction
- Signalé par un utilisateur :
.envet Paramètres avaient bien la même valeur pourSESSION_COOKIE_SECURE, mais le bandeau d'avertissement (ajouté en v1.9.5) continuait de s'afficher. - Cause : la détection de divergence n'était calculée qu'une seule fois, au démarrage du panel (
_ENV_SETTINGS_DRIFT). Corriger.envou sauvegarder depuis Paramètres ne rafraîchissait pas cet instantané tant que le panel n'était pas redémarré. - Corrigé :
get_env_settings_drift()relit désormais.envetsettings.jsonà chaque affichage, sans dépendre d'un état figé au démarrage.
Full Changelog: v1.9.5...v1.9.6