Aller au contenu
TLRFRAMEWORK REDM Ma console

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

ÉcranContenuDroit demandé
Tableau de bordétat, joueurs connectés, services TLR, ressourcestlr.panel.open
Carte en directcarte 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 pointtlr.players.read
Joueurs, ficheréanimer, soigner, geler, téléporter vers un point ou un joueur, message, avertir, expulser, bannir, inventaire (voir, donner, retirer), argent, métier, VIP, sanctionsdroits de chaque action, comme en jeu
Consoleflux du journal TLR et de la console serveur, saisie de commandestlr.logs.read ; commandes : fondateur seul
Commandestoutes les commandes (registre shared/commands_data.lua, aussi dans docs/COMMANDES.md), recherche, filtres, bouton Exécuter pour les commandes consoletlr.panel.open ; exécution : fondateur
Serveurressources (démarrer, arrêter, redémarrer), redémarrage programmé avec annonces, annonce, bannissements (lever, bannir une licence hors ligne), sauvegarde de la basetlr.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
Guidepages de docs/guide/, aussi lisibles sans connexion depuis l'accueilaucun
Réglagesles 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 webinvitations, comptes webtlr.console.invite
Journal webtoutes les actions faites depuis la consoletlr.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.founder sur sa licence (add_ace identifier.license:… tlr.founder allow).
  • Pour se connecter, le groupe doit avoir tlr.panel.open ou tlr.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)

  1. 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'ACE tlr.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 taper tlr_console_setup dans la fenêtre du serveur.
  2. En jeu. Connecté avec la licence fondateur : /consolecode. Le code s'affiche à l'écran ; il se saisit dans l'onglet Premier accès.
  3. 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 convar tlr_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ête Authorization et en témoin HttpOnly; 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 nom web: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:30120 puis une route publique vers ce service, et ouvrez https://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) ; tests tests/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 : actions console.*, flux de la console, commandes tlr_console_invite et /consolecode.
  • server/console/console_http.lua : routes HTTP.
  • web/console/ : page (accueil, connexion, écrans). web/js/rpc.js bascule en HTTP dans la console, ce qui permet de réutiliser telles quelles les pages de web/js/pages/.
  • web/js/pages/console_access.js : bloc Console web de la section Permissions du panel.

Source : tlr_core/docs/console.md