Administration depuis le site : bouton Connexion sur l'accueil

site.toml [administration] adresse : l'accueil affiche un bouton
« Connexion » vers l'interface. Celle-ci peut tourner derrière le serveur
web du site (rtg interface --proxy --prefixe /admin) : adresses
préfixées, mot de passe obligatoire, visiteur identifié par
X-Forwarded-For, cookie Secure limité au préfixe quand le site est en
HTTPS. Exemples nginx et Apache dans le README. Le bouton Arrêter ne
remplace plus le bloc de la tâche en même temps que la relève.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Mf2kATMtqVABHSYdxJMnim
This commit is contained in:
FabriceandClaude Opus 5.5 committed 2026-10-09 14:49:47 +00:00
1 parent 71779f6f53
commit 4366db94ed
22 files changed
+229 -86

No files matched your search

+6 -5
View File
@@ -24,10 +24,11 @@ ESSAIS_LIBRES = 5
class Gardien:
def __init__(self, port, distant=False, https=False):
def __init__(self, port, distant=False, https=False, proxy=False, prefixe=""):
self.jeton = secrets.token_urlsafe(24)
self.cookie = f"rtg_{port}"
self.distant, self.https = distant, https
self.distant, self.https, self.proxy = distant, https, proxy
self.chemin_cookie = prefixe + "/" if prefixe else "/"
self._sessions = {}
self._echecs = {} # ip → (nombre d'échecs, heure du dernier)
self._verrou = threading.Lock()
@@ -55,11 +56,11 @@ class Gardien:
with self._verrou:
self._sessions.pop(sid, None)
def entete_cookie(self, sid, effacer=False):
valeur = f"{self.cookie}={'' if effacer else sid}; Path=/; HttpOnly; SameSite=Strict"
def entete_cookie(self, sid, https=None, effacer=False):
valeur = f"{self.cookie}={'' if effacer else sid}; Path={self.chemin_cookie}; HttpOnly; SameSite=Strict"
if effacer:
valeur += "; Max-Age=0"
if self.https:
if self.https if https is None else https:
valeur += "; Secure"
return valeur