mirror of
https://github.com/R0m1k3/Presencia.git
synced 2026-10-11 17:27:42 +02:00
Revue complète : sécurité, optimisations et UI/UX mobile
Sécurité - JWT : un JWT_SECRET d'exemple ou trop court est ignoré au profit d'un secret aléatoire conservé en base (avant, la valeur publique de docker-compose.yml permettait de forger un jeton admin). - Le compte est relu en base à chaque requête : désactivation, changement de rôle et réinitialisation du mot de passe prennent effet immédiatement. - Connexion : 10 échecs max par e-mail / 15 min, temps constant que l'e-mail existe ou non, mot de passe admin retiré des logs. - Validation des entrées (ids, dates, mois, longueurs, e-mail) : 400 au lieu de 500. Un admin ne peut plus se désactiver ni se rétrograder. - Mots de passe : 8 caractères minimum ; changement en libre-service. - Export : nom de fichier conforme RFC 5987 (un nom de société avec « — » faisait planter l'export). - esc() échappe aussi les guillemets (injection d'attributs HTML). - En-têtes CSP / X-Frame-Options / nosniff (Nginx + API), API et Postgres publiés sur 127.0.0.1 seulement, image backend non-root via npm ci. Optimisations - Export : une requête pour tout le mois au lieu d'une par cadre. - Saisie groupée : un seul INSERT (unnest), doublons dédupliqués. - Dates renvoyées en chaînes (plus de décalage d'un jour selon le TZ). - Planning : chaque clic met à jour l'affichage localement au lieu de recharger le mois ; les réponses de mois périmées sont ignorées. - Recherche Utilisateurs / Plannings filtrée localement (plus une requête par touche) ; statuts des sociétés chargés en parallèle. UI/UX - Mobile : toutes les destinations dans la barre basse (Sociétés et Ma saisie étaient inaccessibles à l'admin) ; tableaux affichés en cartes (les boutons d'action étaient hors écran). - Boutons désactivés pendant l'envoi, focus et Échap dans les dialogues, retour à l'écran de connexion quand la session est révoquée, erreurs d'export affichées au lieu d'un fichier JSON téléchargé, actions destructives signalées, confirmation avant désactivation. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01D5Bdayziw6tybgqETZoNSt
This commit is contained in:
22 files changed
+830
-415
No files matched your search
+7
-3
@@ -9,7 +9,8 @@ services:
|
||||
volumes:
|
||||
- presencia_pgdata:/var/lib/postgresql/data
|
||||
ports:
|
||||
- "6543:5432"
|
||||
# Reachable from this host only (psql, backups), not from the network.
|
||||
- "127.0.0.1:6543:5432"
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U presencia"]
|
||||
interval: 5s
|
||||
@@ -29,13 +30,16 @@ services:
|
||||
PGUSER: presencia
|
||||
PGPASSWORD: R4dsITu0vuigNQQwNlvj0agVyHupSyX
|
||||
PGDATABASE: presencia
|
||||
JWT_SECRET: change-me-to-a-long-random-string
|
||||
# Leave empty to let the API generate a random secret, stored in the
|
||||
# database. If set, it must be at least 32 random characters.
|
||||
JWT_SECRET: ""
|
||||
COOKIE_SECURE: "false"
|
||||
ADMIN_EMAIL: michaelschal@ffest.fr
|
||||
ADMIN_PASSWORD: Lapîn2509
|
||||
ADMIN_NAME: Michael
|
||||
ports:
|
||||
- "4790:4790"
|
||||
# The browser goes through the frontend; direct API access stays local.
|
||||
- "127.0.0.1:4790:4790"
|
||||
|
||||
presencia-frontend:
|
||||
build: ./frontend
|
||||
|
||||
Reference in new issue
Block a user