feat(cron): purge de retention audit_log + throttle (mlt 13.4/13.5) #25

Merged
Corentin merged 1 commit from fix/cron-retention-purge into dev 2026-06-16 14:21:19 +02:00
Owner

Finding MEDIUM (audit 2026-06-16)

AUDIT_LOG_RETENTION_DAYS, THROTTLE_PURGE_AFTER_HOURS (et ORDER_RETENTION_DAYS) etaient documentees dans .env.example comme "purges executees par le service cron" mais : aucun script, aucun job cron actif, vars non injectees au conteneur wakdo-cron. Faux-semblant de conformite RGPD.

Correctif

  • purge-audit-log.sh : DELETE FROM audit_log au-dela de AUDIT_LOG_RETENTION_DAYS (defaut 365). Unique exception documentee a l'append-only de audit_log (RG-T14) : purge de retention planifiee.
  • purge-throttle.sh : DELETE sur login_throttle + pin_throttle des lignes sans verrou actif plus vieilles que THROTTLE_PURGE_AFTER_HOURS (defaut 24), predicat exact de mlt.md 13.5.
  • crontab : jobs actives (15 4 audit, 45 4 throttle).
  • docker-compose.yml : injection des 2 vars (avec defaut ${VAR:-...}) au conteneur cron + commentaire aligne sur le user en moindre privilege.

Hors scope (assume)

La purge de customer_order (ORDER_RETENTION_DAYS) reste differee : le domaine commande n'existe pas encore, et le RGPD sur les commandes implique une anonymisation (pas un simple DELETE) a definir avec le domaine.

Verification

  • Scripts lances dans l'image cron rebuildee, contre la base dev (user scope) -> exit 0.
  • Test positif/negatif sur login_throttle : ligne stale sans verrou purgee, ligne a verrou actif conservee (1 purgee).

Le conteneur wakdo-cron doit etre reconstruit pour embarquer les scripts (docker compose build wakdo-cron). Pas de label auto-merge.

## Finding MEDIUM (audit 2026-06-16) `AUDIT_LOG_RETENTION_DAYS`, `THROTTLE_PURGE_AFTER_HOURS` (et `ORDER_RETENTION_DAYS`) etaient documentees dans `.env.example` comme "purges executees par le service cron" mais : aucun script, aucun job cron actif, vars non injectees au conteneur `wakdo-cron`. Faux-semblant de conformite RGPD. ## Correctif - `purge-audit-log.sh` : `DELETE FROM audit_log` au-dela de `AUDIT_LOG_RETENTION_DAYS` (defaut 365). Unique exception documentee a l'append-only de `audit_log` (RG-T14) : purge de retention planifiee. - `purge-throttle.sh` : `DELETE` sur `login_throttle` + `pin_throttle` des lignes sans verrou actif plus vieilles que `THROTTLE_PURGE_AFTER_HOURS` (defaut 24), predicat exact de `mlt.md 13.5`. - `crontab` : jobs actives (15 4 audit, 45 4 throttle). - `docker-compose.yml` : injection des 2 vars (avec defaut `${VAR:-...}`) au conteneur cron + commentaire aligne sur le user en moindre privilege. ## Hors scope (assume) La purge de `customer_order` (`ORDER_RETENTION_DAYS`) reste **differee** : le domaine commande n'existe pas encore, et le RGPD sur les commandes implique une **anonymisation** (pas un simple DELETE) a definir avec le domaine. ## Verification - Scripts lances dans l'image cron rebuildee, contre la base dev (user scope) -> exit 0. - Test positif/negatif sur `login_throttle` : ligne stale sans verrou **purgee**, ligne a verrou actif **conservee** (1 purgee). Le conteneur `wakdo-cron` doit etre reconstruit pour embarquer les scripts (`docker compose build wakdo-cron`). Pas de label auto-merge.
Corentin added 1 commit 2026-06-16 13:59:27 +02:00
feat(cron): purge de retention audit_log + throttle (mlt 13.4/13.5)
All checks were successful
CI / secret-scan (push) Successful in 9s
CI / php-lint (push) Successful in 19s
CI / static-tests (push) Successful in 45s
CI / php-lint (pull_request) Successful in 25s
CI / static-tests (pull_request) Successful in 35s
CI / auto-merge (push) Has been skipped
CI / secret-scan (pull_request) Successful in 9s
CI / auto-merge (pull_request) Successful in 7s
b9264f4ed7
Les vars de retention (AUDIT_LOG_RETENTION_DAYS, THROTTLE_PURGE_AFTER_HOURS)
etaient documentees comme purges cron mais aucun script/job n'existait, et les
vars n'etaient pas injectees au conteneur wakdo-cron (faux-semblant de conformite).

- purge-audit-log.sh : DELETE audit_log au-dela de AUDIT_LOG_RETENTION_DAYS
  (defaut 365). Unique exception documentee a l'append-only (RG-T14) : purge de
  retention planifiee, pas une mutation applicative.
- purge-throttle.sh : DELETE login_throttle + pin_throttle sans verrou actif et
  plus vieux que THROTTLE_PURGE_AFTER_HOURS (defaut 24), predicat mlt.md 13.5.
- crontab : jobs actives (15 4 audit, 45 4 throttle), fenetre de maintenance.
- docker-compose.yml : injection des 2 vars (avec defaut) au conteneur cron ;
  commentaire env aligne sur le user en moindre privilege.

Hors scope : la purge de customer_order (ORDER_RETENTION_DAYS) reste differee
tant que le domaine commande n'existe pas (RGPD = anonymisation a definir avec
le domaine, pas un simple DELETE).

Verifie : scripts lances dans l'image cron rebuildee contre la base dev (user
scope) -> exit 0 ; test positif/negatif sur login_throttle : la ligne stale sans
verrou est purgee, la ligne a verrou actif est conservee.
Corentin merged commit 7d30f5481d into dev 2026-06-16 14:21:19 +02:00
Corentin deleted branch fix/cron-retention-purge 2026-06-16 14:21:20 +02:00
Sign in to join this conversation.
No reviewers
No labels
auto-merge
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: AcadeNice/corentin_wakdo#25
No description provided.