Skip to content

v1.9.6

Choose a tag to compare

@Zyphro3D Zyphro3D released this 22 Jul 07:37
· 3 commits to master since this release

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 par send_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 \admin est 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_cached inexistant) provoquant une erreur 500, et server_id non 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) et container_restart rouvraient 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 à aceserver dans Dockerfile.panel, alors que le DNS interne Docker ne résout que ace-server (le container_name explicite du service). Ce défaut erroné faisait silencieusement échouer get_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 globale ACESERVER_HTTP_PORT (8080 chez cet utilisateur) au lieu du champ http_port propre à 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 un http_port explicite, 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_TITLE différent entre .env et Paramètres), sans moyen de le faire taire.
  • Ajout d'un bouton "Ignorer" qui mémorise la valeur .env exacte actuellement signalée pour chaque clé. Si .env ne 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 .env la 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 compris SESSION_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 : .env et Paramètres avaient bien la même valeur pour SESSION_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 .env ou 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 .env et settings.json à chaque affichage, sans dépendre d'un état figé au démarrage.

Full Changelog: v1.9.5...v1.9.6