Console web TLR
La console web est le panel /tlr utilisable depuis un navigateur, à la manière de txAdmin mais centrée sur TLR. Elle est servie par la ressource elle même : http://IP:PORT/tlr_core/console/ (IP et port du serveur FXServer, le même port que celui des joueurs, 30120 par défaut).
À VÉRIFIER EN JEU : rien n'a encore été testé sur un vrai serveur RedM.
Ce qu'elle contient
| Écran | Contenu | Droit demandé |
|---|---|---|
| Tableau de bord | état, joueurs connectés, services TLR, ressources | tlr.panel.open |
| Carte en direct | carte papier locale (web/img/map/etat.webp), joueurs toutes les 2,5 s (positions lues par le serveur, OneSync), blips, lieux des métiers, écuries, filtres, téléportation sur un point | tlr.players.read |
| Joueurs, fiche | réanimer, soigner, geler, téléporter vers un point ou un joueur, message, avertir, expulser, bannir, inventaire (voir, donner, retirer), argent, métier, VIP, sanctions | droits de chaque action, comme en jeu |
| Console | flux du journal TLR et de la console serveur, saisie de commandes | tlr.logs.read ; commandes : fondateur seul |
| Commandes | toutes les commandes (registre shared/commands_data.lua, aussi dans docs/COMMANDES.md), recherche, filtres, bouton Exécuter pour les commandes console | tlr.panel.open ; exécution : fondateur |
| Serveur | ressources (démarrer, arrêter, redémarrer), redémarrage programmé avec annonces, annonce, bannissements (lever, bannir une licence hors ligne), sauvegarde de la base | tlr.console.resources, tlr.console.restart, tlr.admin.announce, tlr.players.ban, tlr.players.unban ; sauvegarde : fondateur avec tlr.console.backup |
| Surveillance | écran anti triche partagé (web/js/pages/surveillance_view.js) | tlr.surv.read |
| Guide | pages de docs/guide/, aussi lisibles sans connexion depuis l'accueil | aucun |
| Réglages | les sections du panel utiles hors jeu (paramètres, réglages des systèmes, métiers, objets, boutiques, VIP, économie, permissions…) | droits de chaque section |
| Accès web | invitations, comptes web | tlr.console.invite |
| Journal web | toutes les actions faites depuis la console | tlr.logs.read |
Les actions passent par les mêmes RPC que le panel (TLR.RPC.invokeWeb, server/rpc/rpc.lua) avec les mêmes schémas et permissions. Les actions qui agissent sur le personnage de l'appelant (noclip, observation, placement) sont refusées depuis le web.
Comptes et droits
- Un compte web est lié à une licence Rockstar. Ses droits sont ceux du groupe TLR de cette licence, relus à chaque requête : retirer le groupe en jeu retire l'accès web tout de suite. Le fondateur est reconnu par l'ACE
tlr.foundersur sa licence (add_ace identifier.license:… tlr.founder allow). - Pour se connecter, le groupe doit avoir
tlr.panel.openoutlr.console.access. - On ne peut inviter, révoquer ou réinitialiser qu'un compte de rang inférieur au sien (le fondateur : tous).
Premier accès du fondateur (sans txAdmin)
- Code d'installation automatique. Tant qu'aucun compte web n'existe, chaque démarrage de tlr_core crée un code d'installation, l'affiche encadré dans la fenêtre FXServer et l'écrit dans
tlr_core/console_setup.txt(lisible en SFTP ou dans le gestionnaire de fichiers de l'hébergeur). La page de la console ouvre alors l'écran Installation : code, licence du fondateur (celle de l'ACEtlr.founder), identifiant, mot de passe. Le code et le fichier sont détruits dès que le compte est créé. Nouveau code : redémarrer la ressource, ou tapertlr_console_setupdans la fenêtre du serveur. - En jeu. Connecté avec la licence fondateur :
/consolecode. Le code s'affiche à l'écran ; il se saisit dans l'onglet Premier accès. - Option Discord. Si le bot staff est configuré, il peut lire le code d'installation en attente sur
GET /tlr_core/staffbot/console_setup(clétlr_staffbot_key) et l'envoyer en message privé à l'utilisateur Discord de la convartlr_console_founder_discord. À FAIRE côté bot : l'appel et l'envoi du message privé.
Dans la fenêtre FXServer, tlr_console_invite <licence ou id joueur> reste disponible pour créer une invitation.
Ajouter un membre
- Console web, écran Accès web : choisir un joueur connecté ou coller une licence, puis Créer le code. Case « Envoyer le code au joueur en jeu » : le joueur reçoit une notification avec le code.
- En jeu :
/tlr, section Permissions, bloc Console web, ou/consolecode <id joueur>. - Il faut le droit Inviter des membres et gérer les comptes web (
tlr.console.invite) et que le joueur ait déjà un groupe TLR qui ouvre le panel.
Gérer les comptes
Écran Accès web (ou bloc Console web du panel) : dernière connexion, sessions ouvertes, Déconnecter (ferme toutes les sessions), Nouveau code (mot de passe oublié : code de réinitialisation, les sessions sont fermées), Révoquer (compte désactivé), Réactiver, Supprimer.
Sécurité
- Codes : 12 caractères tirés de 31 symboles lisibles (environ 59 bits), valables 15 minutes, usage unique (marqués utilisés par une mise à jour conditionnelle), une seule invitation active par licence, stockés en empreinte HMAC.
- Mots de passe : 10 caractères au moins, PBKDF2 HMAC SHA 256 à 4000 tours avec sel aléatoire.
- Sessions : jeton signé HMAC (
id.expiration.signature), 12 heures, vérifié en base à chaque requête (révocation immédiate), envoyé en entêteAuthorizationet en témoinHttpOnly; SameSite=Strict. - Limites : 5 échecs de connexion par adresse et 8 par identifiant en 15 minutes (blocage 15 minutes), 5 codes faux par adresse (blocage 30 minutes).
- Journal : chaque connexion, chaque code et chaque action non triviale est écrite dans
tlr_console_audit(écran Journal web) ; les actions elles mêmes restent aussi dans le journal TLR habituel, au nomweb:identifiant. - Fichiers servis : seulement
web/console,web/js,web/css,web/fonts,web/img, sans remontée de dossier. - Entêtes : CSP sans ressource externe,
X-Frame-Options: DENY,nosniff,no-referrer. - Secret de signature : convar
tlr_console_secret(32 caractères au moins) ou, à défaut, généré au premier démarrage et gardé dans le stockage KVP de la ressource. Le changer invalide toutes les sessions et tous les codes.
HTTPS obligatoire pour une exposition publique
FXServer sert la console en HTTP. Sur Internet, mots de passe et jetons circuleraient en clair. Mettez un HTTPS devant :
- Tunnel Cloudflare (le plus simple, aucun port à ouvrir) :
cloudflared tunnel --url http://127.0.0.1:30120puis une route publique vers ce service, et ouvrezhttps://votre-domaine/tlr_core/console/. Ajoutez si possible une règle Cloudflare Access. - Proxy (nginx, Caddy) avec certificat :
proxy_pass http://127.0.0.1:30120;sur le chemin/tlr_core/console/.
Puis dans server.cfg :
set tlr_console_https 1 # témoin marqué Secure
set tlr_console_trust_proxy 1 # lire l'adresse réelle (CF-Connecting-IP, X-Forwarded-For) : seulement derrière un proxy de confiance
set tlr_console_secret "une longue chaîne aléatoire de 32 caractères ou plus"
Fichiers
shared/console.lua: règles pures (hachage, jetons, codes, limites, droits, chemins) ; teststests/test_console.lua.server/admin/http_router.lua: aiguillage HTTP unique (bot staff et console).server/console/console.lua: comptes, invitations, sessions, journal web, migrations 390 à 393.server/console/console_actions.lua: actionsconsole.*, flux de la console, commandestlr_console_inviteet/consolecode.server/console/console_http.lua: routes HTTP.web/console/: page (accueil, connexion, écrans).web/js/rpc.jsbascule en HTTP dans la console, ce qui permet de réutiliser telles quelles les pages deweb/js/pages/.web/js/pages/console_access.js: bloc Console web de la section Permissions du panel.
Source : tlr_core/docs/console.md