nas-runbooks/hermes-tt/rla-api-users-superadmin.md

2.8 KiB

rla-api — Gestion des utilisateurs & superadmin par défaut

Date : 2026-07-04 · Tags : infra, rla-api, users, superadmin, bcrypt, gitea

Contexte

rla-api (Gestion des Marchés RLA, TT Zone Sud) — conteneur sur le NAS, port 3005, stack /volume1/docker/rla-api/, source Gitea bolbol/Gestion-des-Marches-RLA.

Le piège (pourquoi les mots de passe « reviennent » après une MAJ)

Les comptes vivent dans /app/data/users.json dans le conteneur, sans volume monté, ET ce fichier est tracké dans le repo Gitea → baké dans l'image à chaque build.

  • La variable USERS du .env ne sert de seed que si le fichier n'existe pas — jamais le cas puisque l'image le contient déjà.
  • Conséquence : tout rebuild écrase les comptes créés/modifiés via l'UI avec la version du repo. C'est ce qui a restauré un ancien mot de passe le 2026-07-04 lors de la régularisation compose.

Superadmin par défaut (depuis 2026-07-04)

Nabil.Derouiche / 03167442rla — role superadmin, region all, id 4. Présent dans les 3 sources (users.json live, .env, repo Gitea commit aca99e7) → survit aux MAJ. Comptes conservés : nabil (id 1, mdp inconnu), admin (id 2), ikram (id 3).

Procédure : ajouter/modifier un utilisateur de façon PÉRENNE

  1. Générer le hash bcrypt (dans le conteneur, bcryptjs dispo) :
    ssh nas "/usr/local/bin/docker exec rla-api node -e \"console.log(require('bcryptjs').hashSync('LE_MDP',10))\""
    
  2. Mettre à jour les 3 endroits :
    • Repo Gitea data/users.json (le seul qui compte au prochain build) — via API PUT /api/v1/repos/bolbol/Gestion-des-Marches-RLA/contents/data/users.json (base64 + sha), creds bolbol.
    • Live : docker exec -i rla-api sh -c 'cat > /app/data/users.json' < users.json (pris en compte immédiatement, pas de restart — getUsers() relit le fichier à chaque appel).
    • .env (/Volumes/docker/rla-api/.env via SMB) variable USERS — filet de sécurité si le fichier disparaît.
  3. Tester : curl -s -X POST http://192.168.100.33:3005/api/auth/login -H 'Content-Type: application/json' -d '{"username":"...","password":"..."}' → doit renvoyer {"token":...}.

Ce qui NE marche PAS

  • Créer l'utilisateur via l'UI/POST /api/users seulement → perdu au prochain rebuild (écrit uniquement dans le users.json du conteneur).
  • Modifier USERS dans .env seulement → ignoré tant que /app/data/users.json existe (donc toujours).
  • grep --include dans le conteneur : BusyBox, pas GNU grep.

Fix définitif possible (non appliqué)

Monter /volume1/docker/rla-api/data:/app/data dans le compose + retirer data/users.json du repo (.dockerignore/.gitignore) → les comptes UI survivraient aux rebuilds. À faire lors d'une prochaine MAJ si besoin.