Feature #78
closedRendre accessibles des pages publiques via liens uniques sans authentification
100%
ÉPIC découpé (PO approuvé). Système de liens publics uniques révocables sans auth pour 4 pages. Sous-tâches : #87 Backend SharedLink + endpoints publics + révocation ; #88 Frontend routes publiques (4 pages, bypass AuthContext) ; #89 Admin UI génération/révocation (design requis). Socle = #87 ; #88 et #89 en dépendent. Réutilise le registre PUBLIC/PRIVATE existant + le pattern PublicTremplinConfirmation.
Description
### Problème
Actuellement, plusieurs pages critiques de l’application **exigent une authentification** pour être consultées ou utilisées, alors qu’elles devraient être accessibles **publiquement via des liens uniques**. Cela bloque les utilisateurs externes (artistes, journalistes, partenaires) qui ont besoin d’accéder à ces pages sans créer de compte Scobby.
### Contexte
Les pages concernées sont :
- **Feuille de route** : Consultation du planning par les partenaires externes.
- **Formulaire de confirmation de date** : Remplissage et envoi par les artistes/prestataires.
- **Édition de contrat** : Consultation d’un contrat pré-rempli (modèle généré par l’admin).
- **Espace presse** : Téléchargement de dossiers de presse par les journalistes.
Ces pages doivent être accessibles **via un lien unique** (généré par l’admin) et **sans authentification**, tout en conservant leurs fonctionnalités existantes (ex : remplir un formulaire, télécharger un fichier).
### Comportement proposé
- **Lien unique** : Chaque page est accessible uniquement via un lien spécifique (ex : `scobby.app/contrat/abc123`).
- **Pas de login** : Ouverture directe dans un navigateur privé, sans compte Scobby.
- **Fonctions existantes** : Toutes les interactions actuelles (remplissage de formulaire, téléchargement de fichiers) doivent fonctionner sans authentification.
- **Sécurité** : Les liens sont générés par l’admin et peuvent être révoqués si nécessaire.
## Acceptance criteria
['- [ ] Un artiste peut ouvrir un lien vers le **formulaire de confirmation de date** dans un navigateur privé, le remplir et l’envoyer **sans se connecter**.', '- [ ] Un journaliste peut télécharger un **dossier de presse** depuis un lien public **sans créer de compte**.', '- [ ] Un partenaire externe peut consulter la **feuille de route** via un lien partagé **sans authentification**.', '- [ ] Un artiste peut consulter un **contrat** via un lien envoyé par email **sans se connecter**.', '- [ ] Les liens uniques sont générés par l’admin depuis l’interface de Scobby et peuvent être révoqués.', '- [ ] Les données soumises via ces pages (ex : formulaire de confirmation) sont correctement enregistrées dans le système.']
## Classification
- feature
## Complexity
- 7/10 — Nécessite des modifications au niveau du routage, de la gestion des permissions et de la sécurisation des liens uniques, tout en préservant les fonctionnalités existantes.
Files
RA Updated by Redmine Admin about 2 months ago
- Status changed from Submitted to Spec
Spec en cours (factory). Transition Submitted → Spec.
RA Updated by Redmine Admin about 2 months ago
- Subtask #87 added
RA Updated by Redmine Admin about 2 months ago
- Subtask #88 added
RA Updated by Redmine Admin about 2 months ago
- Subtask #89 added
RA Updated by Redmine Admin about 2 months ago
- spec_ref updated (diff)
RA Updated by Redmine Admin about 2 months ago
RA Updated by Redmine Admin about 2 months ago
RA Updated by Redmine Admin about 2 months ago
- Status changed from Spec to Design
**Design terminé** (factory designer). Transition Spec → Design.
**Maquette admin attachée** : `78-admin-liens-publics.png` + `78-maquette-admin-liens.html` (écran nouveau → **after-only**, pas de « before »). Section ajoutée au design system : `docs/design/design-system.md`.
**Brief (Atomic Design — React/Vite + shadcn/ui, FR inline) :**
- **Écran admin « Liens publics » (#89)** : panneau Paramètres ; organism `Card` « Liens actifs » (en-tête + bouton « Générer un lien ») + `Table` ; molecules = ligne (ressource, lien mono, badge statut, date, actions Copier/Révoquer) ; atoms réutilisés `Button`/`Badge`/`Table`/`Dialog` de génération. Badges statut : Actif (vert), Révoqué (rouge), Expire (ambre).
- **Pages publiques (#88)** : réutiliser le pattern `PublicTremplinConfirmation`/`PublicHtmlContract` (route bypass AuthContext, lit le token, endpoint public, jamais de login ; token invalide → page « Lien invalide »).
- États : empty (aucun lien), loading (génération), error (toast), populated (tableau). Aucune nouvelle couleur (sémantiques statut existantes).
Sous-tâches prêtes pour le dev après design : #87 (socle backend SharedLink), #88 (routes publiques), #89 (admin UI).
RA Updated by Redmine Admin about 2 months ago
- Subtask #126 added
RA Updated by Redmine Admin about 2 months ago
**Point d'avancement #78.** 3/4 sous-tâches mergées sur `dev` + QA : #87 (SharedLink backend) · #88 (routes publiques + « Lien invalide ») · #89 (UI admin liens). **Reste #126** (chargement public des données par `resource_id`) — sans lui, les pages publiques de consultation (feuille de route / contrat / presse) ne rendent pas les vraies données de bout en bout (le submit confirmation fonctionne). **#78 n'est donc pas fonctionnellement terminé** : je le laisse en Design jusqu'à #126. Le code des 3 sous-tâches part néanmoins en préprod avec le lot.
RA Updated by Redmine Admin about 2 months ago
RA Updated by Redmine Admin about 2 months ago
**Smoke préprod ✅** : (1) route `/public-link/<token-bidon>` rend « Lien invalide » sans login (dispatcher #88 + reject #87) ; (2) panneau admin « Liens publics » live (#89). Captures jointes. **Reste #126** pour que les pages publiques rendent les vraies données (chargement par resource_id) — en cours de dev.
RA Updated by Redmine Admin about 2 months ago
- Status changed from Design to QA
**Épic #78 — rollup → QA.** Les 4 sous-tâches sont mergées sur `dev` et en QA : #87 (SharedLink backend) · #88 (routes publiques) · #89 (UI admin) · #126 (chargement public par resource_id). La fonctionnalité est désormais **complète de bout en bout** (les pages publiques rendent les vraies données via un token SharedLink validé). Promotion vers préprod en cours pour validation client.
RA Updated by Redmine Admin about 2 months ago
- Status changed from QA to Preprod
Déployé en préprod (https://preprod-scobby.omdev.tech). Passage QA → Preprod (épic + sous-tâches #87/#88/#89/#126 livrés).
RA Updated by Redmine Admin about 1 month ago
- Status changed from Preprod to Ready to ship
RA Updated by Redmine Admin about 1 month ago
- deploy_status set to deployed
- deployed_at set to 06/23/2026
Déploiement PROD confirmé live sur scobby.fr (gate manuel Jenkins approuvé le 2026-06-23). Passage en **Shipped**.