diff --git a/SECURITY.md b/SECURITY.md index 5c6aa3f..e450bae 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -19,7 +19,7 @@ d'authentification durci dans `docs/uml/security-sequence.md`. | Brute-force | double throttle : compteur par compte (`user`) + par IP (`login_throttle`), backoff degressif | | Sessions | cookies `HttpOnly` + `Secure` + `SameSite=Strict`, regeneration d'ID a la connexion (anti-fixation), idle 4h / absolu 10h | | Injection | PDO prepared statements exclusivement | -| Upload | validation MIME + taille, stockage hors webroot | +| Upload | non implemente (aucun flux d'upload livre) ; prevu : validation MIME + taille, stockage hors webroot | | En-tetes / PHP | `expose_php=Off`, `allow_url_fopen/include=Off`, `cgi.fix_pathinfo=0`, fonctions d'execution systeme desactivees | | RGPD | retention limitee (audit ~12 mois, throttle 24h, commandes ~3 ans), droit consultation/modif/suppression | | Secrets | `.env` gitignore, tenu hors de `.git/config` (credential helper lisant `.env`), secret-scan gitleaks en CI | diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index 526d8af..01fd87a 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -17,13 +17,17 @@ Wakdo simule une borne de commande tactile de restauration rapide, avec back-off d'administration, workflow cuisine et API REST interne. Deux surfaces applicatives : - **Borne (kiosk)** — front statique (HTML/CSS/JS vanilla ES6) servi par Apache, - consommant des donnees (JSON statique en P5, API DB-backed au swap P4). + consommant l'API REST DB-backed (`/api/*`). Le repli JSON statique initial a ete + retire au profit d'un branchement direct sur l'API. - **Back-office + API** — application PHP rendue serveur (MVC maison) + endpoints `/api/*`, derriere authentification et RBAC. Trois canaux de commande (`source`) : `kiosk`, `counter`, `drive`. Le cycle de vie -d'une commande et la machine a etats sont decrits dans `docs/merise/` (domaine -commande = phase **P4**, schema en base mais workflow applicatif a venir). +d'une commande et la machine a etats sont decrits dans `docs/merise/`. Le domaine +commande est livre de bout en bout : creation et encaissement via l'API +(`POST /api/orders`, `POST /api/orders/{number}/pay` avec decrement de stock), +file cuisine (KDS), annulation et livraison cote back-office, saisie comptoir et +drive (POS tactile). --- @@ -132,8 +136,8 @@ src/app/ Views/ admin/* (pages back-office rendues serveur), auth/* (login/reset) src/public/ admin/ front controller + assets (CSS/JS) du back-office - borne/ front kiosk statique (index, categories, products, product, cart, - payment, confirmation) + assets JS modules + data JSON + borne/ front kiosk statique (index, categories, products, payment, + confirmation ; panier en panneau persistant) + assets JS modules ``` Conventions transverses : controleurs non-`final` (seam de test : sous-classe injectant @@ -165,7 +169,7 @@ Vue rendue dans admin/layout (sorties echappees, RG-T15) | ou JSON pour /api/* ``` La borne (kiosk) est servie en statique par Apache ; ses pages consomment les donnees -via `fetch` (JSON statique en P5 ; bascule sur `/api/*` DB-backed au swap P4). +via `fetch` sur l'API DB-backed (`/api/*`). --- @@ -214,7 +218,7 @@ Threat model STRIDE + classification des donnees : `docs/PROJECT_CONTEXT.md` sec `ingredient`, `product_ingredient`, `allergen`, `ingredient_allergen`, `stock_movement`. - **RBAC / comptes** : `user`, `role`, `permission`, `role_permission`, `role_visible_source`. -- **Commande (P4, schema pret)** : `customer_order`, `order_item`, +- **Commande (livre)** : `customer_order`, `order_item`, `order_item_selection`, `order_item_modifier`. - **Transverses** : `audit_log` (journal immuable), `login_throttle`, `pin_throttle`. diff --git a/docs/PROJECT_CONTEXT.md b/docs/PROJECT_CONTEXT.md index fe6632e..22a536e 100644 --- a/docs/PROJECT_CONTEXT.md +++ b/docs/PROJECT_CONTEXT.md @@ -117,7 +117,7 @@ Client Borne (Bloc 1) API (Bloc 2) BDD ### Compatibilite evaluation par bloc -- **Jury Bloc 1** : voit le front seul ; le front peut tomber en fallback sur JSON statiques fournis (`src/public/borne/data/*.json`) si l'API est indisponible. +- **Jury Bloc 1** : voit le front seul ; le front consomme les donnees via `fetch` sur l'API (`/api/*`). Le fallback JSON statique initialement envisage a ete retire (la borne est branchee directement sur l'API DB-backed). - **Jury Bloc 2** : voit le back-office + teste l'API via curl/Postman de maniere autonome, sans dependre du front. - **Jury Bloc 5** : lance `docker compose up` ou `docker compose up`, verifie la CI/CD, les crons, l'archi, les scripts. @@ -205,7 +205,7 @@ Reseaux : ### Bloc 1 — Borne client (Front) **IN scope :** -- Affichage dynamique menus + produits (charges par Ajax depuis API ou JSON fallback) +- Affichage dynamique menus + produits (charges par `fetch` depuis l'API `/api/*`) - Composition panier : produits unitaires OU menus (burger + accompagnement + boisson + sauce) - Options taille (normale / grande, +0,50 € sur grande) pour accompagnements et boissons - Options de personnalisation simples (ex : sans oignon, avec fromage) @@ -232,7 +232,7 @@ Reseaux : - **Manager** : catalogue (create/update), stock (reappro + inventaire), statistiques ; utilisateurs en **lecture seule** (`user.read`, pas de creation/modification/desactivation), pas d'acces RBAC - **Kitchen** : file des commandes `paid` triee par `paid_at` croissant, en **lecture seule** (KDS visuel) ; inventaire - **Counter** / **Drive** : saisir une commande (comptoir / drive-thru via casque/intercom), bouton "declarer livree" (geste unique `paid -> delivered`), annuler ; `source` auto-tague depuis `role.order_source` ; inventaire -- Upload images produits (validation type MIME + taille + stockage dans volume `wakdo_uploads`) +- Upload images produits : **non implemente** ; prevu (validation type MIME + taille + stockage dans volume `wakdo_uploads`) - Historique commandes par statut - Stats de base (commandes du jour, CA jour, produits top)