Project

General

Profile

Actions

Feature #78

closed
CD

Rendre accessibles des pages publiques via liens uniques sans authentification

Feature #78: Rendre accessibles des pages publiques via liens uniques sans authentification

Added by Client Dashboard about 2 months ago. Updated about 1 month ago.

Status:
Shipped
Priority:
Normal
Assignee:
-
Start date:
06/15/2026
Due date:
% Done:

100%

Estimated time:
(Total: 0:00 h)
spec_ref:

É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.

build_status:
build_number:
ci_run_url:
scan_status:
scan_report_url:
deploy_status:
deployed
preprod_url:
deployed_at:
06/23/2026
branch:
pr_url:
security_key:
severity:
paused:

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

78-admin-liens-publics.png (291 KB) 78-admin-liens-publics.png Redmine Admin, 06/15/2026 10:34 AM
78-maquette-admin-liens.html (4.95 KB) 78-maquette-admin-liens.html Redmine Admin, 06/15/2026 10:34 AM
preprod-smoke-78-liens-publics.png (78.4 KB) preprod-smoke-78-liens-publics.png Redmine Admin, 06/15/2026 11:44 AM
78-admin-liens-publics.png
preprod-smoke-78-liens-publics.png

Subtasks 4 (0 open4 closed)

Feature #87: Backend — modèle SharedLink + endpoints publics + révocationShipped06/15/2026

Actions
Feature #88: Frontend — routes publiques sans auth pour les 4 pagesShipped06/15/2026

Actions
Feature #89: Admin UI — génération et révocation des liens partagésShipped06/15/2026

Actions
Feature #126: Backend — chargement public d'une ressource par resource_id (SharedLink)Shipped06/15/2026

Actions

RA Updated by Redmine Admin about 2 months ago Actions #1

  • Status changed from Submitted to Spec

Spec en cours (factory). Transition Submitted → Spec.

RA Updated by Redmine Admin about 2 months ago Actions #2

  • Subtask #87 added

RA Updated by Redmine Admin about 2 months ago Actions #3

  • Subtask #88 added

RA Updated by Redmine Admin about 2 months ago Actions #4

  • Subtask #89 added

RA Updated by Redmine Admin about 2 months ago Actions #5

  • spec_ref updated (diff)

**Découpage (PO approuvé)** en 3 sous-tâches : #87 (backend SharedLink), #88 (frontend routes publiques), #89 (admin UI — design requis). Socle #87. `spec_ref` posé sur l'épic ; pas de `done_ratio` (dérivé des enfants). Passe design prévue pour #89 (et la consultation des 4 pages).

RA Updated by Redmine Admin about 2 months ago Actions #8

  • 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 Actions #9

  • Subtask #126 added

RA Updated by Redmine Admin about 2 months ago Actions #10

**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 Actions #12

**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 Actions #13

  • 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 Actions #14

  • 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 Actions #15

  • Status changed from Preprod to Ready to ship

Épopée livrée sur master (dev = preprod = master). Tous les sous-tickets sont sur master : #87 (PR #9), #88 (PR #12), #89 (PR #13), #126 (PR #17). Promotion CI verte. Passage en **Ready to ship** — à passer en *Shipped* après confirmation du déploiement prod (gate manuel Jenkins) sur scobby.fr.

RA Updated by Redmine Admin about 1 month ago Actions #16

  • 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**.

RA Updated by Redmine Admin about 1 month ago Actions #17

  • Status changed from Ready to ship to Shipped

Épopée complète : tous les sous-tickets (#87, #88, #89, #126) livrés en prod. Déploiement PROD confirmé live sur scobby.fr (gate manuel Jenkins approuvé le 2026-06-23). Passage en **Shipped**.

Actions

Also available in: PDF Atom