diff --git a/hermes-tt/rla-api-users-superadmin.md b/hermes-tt/rla-api-users-superadmin.md new file mode 100644 index 0000000..b7e627a --- /dev/null +++ b/hermes-tt/rla-api-users-superadmin.md @@ -0,0 +1,40 @@ +# 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) : + ```bash + 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.