Aller au contenu
Candidater

Journal des modifications

Les évolutions de Cohez.io, de la plus récente à la plus ancienne.

44 versions correspondent à « HelloAsso ».

Versions 41 à 44 sur 44

0.3.2.1 - 2026-04-10

Corrections

  • Page de succès HelloAsso — message affiché selon l'état du paiement — après un paiement HelloAsso, les utilisateurs dont le paiement est encore en cours de traitement voyaient à tort le message "Un email de confirmation vous a été envoyé". La page affiche maintenant une icône horloge et un message "Votre paiement est en cours de traitement" quand le paiement n'est pas encore confirmé, et ne bascule vers le message de confirmation qu'une fois le paiement validé. Le titre de la page s'adapte également (Paiement en cours de traitement ou Inscription confirmée).

0.3.1.0 - 2026-04-09

Ajouts

  • Paiement HelloAsso en ligne — depuis le formulaire public d'inscription, les visiteurs peuvent désormais payer directement via HelloAsso Checkout. L'association configure ses identifiants OAuth2 et son slug dans les settings, et le bouton "Payer en ligne" apparaît automatiquement sur le wizard.
  • Page Intégrations (/settings/integrations) — les administrateurs saisissent leur Client ID, Client Secret, slug HelloAsso et secret webhook depuis une interface dédiée. Les secrets ne sont jamais réexposés en frontend après enregistrement.
  • Webhook HelloAsso (POST /webhook/helloasso/{tenantId}) — endpoint vérifié par signature HMAC-SHA256. Marque le paiement comme reçu, fait passer l'inscription en Paid, et envoie le mail de confirmation exactement une fois (idempotence via confirmation_email_sent_at).
  • URL de retour HelloAsso (/register/{token}/helloasso/return) — après paiement, vérifie l'état du checkout intent via l'API HelloAsso. Si payé, confirme l'inscription immédiatement. Si l'API est indisponible, affiche un message "en cours de traitement" et laisse le webhook finaliser.
  • Page d'erreur HelloAsso (/register/{token}/helloasso/error) — affichée si le paiement échoue ou si l'API HelloAsso retourne une erreur. L'inscription orpheline est supprimée automatiquement pour permettre une nouvelle tentative.
  • Service HelloAssoClient — client HTTP OAuth2 avec cache du token (25 min), support sandbox via HELLOASSO_SANDBOX=true, deux méthodes : createCheckoutIntent() et getCheckoutIntent().
  • Index payments_reference_index — index standalone sur payments.reference pour les requêtes de fallback du webhook (la contrainte unique UNIQUE(reference, method) existante ne suffit pas pour les lookups par reference seul).

Sécurité

  • La valeur redirectUrl retournée par HelloAsso est validée contre une liste d'origines autorisées (helloasso.com / helloasso-sandbox.com) avant redirect()->away() pour se prémunir d'une compromission de l'API côté HelloAsso.
  • Le webhook est exclu du CSRF Laravel et vérifié par HMAC-SHA256 à la place (X-Helloasso-Signature).
  • Rate limiter du webhook keyé sur tenantId (120 req/h) plutôt que sur l'IP (HelloAsso partage un pool IP entre toutes les organisations).

0.3.0.0 - 2026-04-08

Ajouts

  • Formulaire public d'inscription — les associations peuvent générer un lien public (token signé, expirable) depuis les paramètres d'une campagne. Ce lien donne accès à un wizard en 4 étapes (informations membre, chargement des propositions, sélection + payeur, récapitulatif) accessible sans compte. Aucun compte HelloAsso requis.
  • Token public de campagne (CampaignPublicToken) — modèle avec expiration configurable, génération via Str::uuid()->toString() (UUID v4, col char(36)), révocation instantanée depuis les settings. Un token révoqué retourne 410.
  • Déduplication silencieuse — si l'email soumis correspond à une Person existante dans le tenant, le service réutilise le membre ou crée un Member lié sans jamais révéler au visiteur si son compte existait.
  • Détection des doublons d'inscription — si le même membre tente de s'inscrire deux fois à la même campagne, une erreur de validation claire est retournée sur le champ member_email. Contrainte unique (member_id, campaign_id) ajoutée en base.
  • Mail de confirmation (PublicRegistrationConfirmationMail) — envoyé en queue après inscription réussie si un email est fourni, avec récapitulatif des propositions sélectionnées et du mode de paiement.
  • Page de confirmation (/register/{token}/success) — page dédiée après soumission réussie, protégée par le même middleware token.
  • Branding dans le layout public — le nom de l'association est affiché au-dessus du titre de la page pour que le visiteur sache à quelle organisation il s'inscrit.
  • Throttling — les routes publiques d'inscription sont limitées à 10 req/min par IP pour limiter l'abus.

Modifications

  • Middleware ResolveCampaignPublicToken — vérifie désormais que la campagne est en statut Open (en plus du contrôle d'expiration du token). Une campagne Draft ou Closed retourne 410.
  • PersonDeduplicationService — is_minor calculé dynamiquement depuis dateNaissance (Carbon::age < 18) au lieu d'être codé à false.

Corrections

  • Migration add_unique_member_campaign_to_registrations : guard contre les doublons existants avant d'appliquer la contrainte unique (évite un crash silencieux en production si des données corrompues sont présentes).

0.2.1.0 - 2026-04-07

Ajouts

  • Système de design Cohez.io — identité visuelle définie et codée : polices Fraunces (titres) + Geist (interface) + Geist Mono (données financières), chargées via Bunny Fonts (GDPR-compliant). Palette de couleurs basée sur le vert sauge (#2D6A4F) comme couleur brand, fond crème #FAF9F7, neutrals chauds — différenciant dans la catégorie face au bleu corporate omniprésent (AssoConnect, HelloAsso).
  • Composant EmptyState (@/components/ui/empty-state) — état vide réutilisable : icône Lucide + titre + description + slot pour CTA optionnel. Appliqué sur les listes de membres, groupes, réunions.
  • Composant ConfirmDialog (@/components/ui/confirm-dialog) — dialogue de confirmation avant toute action destructive. Remplace entièrement les confirm() natifs (qui bloquent les events browser). Utilisé pour la désactivation/suppression de membres et groupes.
  • FlashToast (@/components/layout/FlashToast) — notification toast bottom-right consommant automatiquement flash.success et flash.error depuis les props Inertia partagées. Intégré dans AppSidebarLayout.
  • Bannière alerte impayés sur le tableau de bord — si des inscriptions non payées existent, une bannière rouge s'affiche en haut de page avec un lien direct vers la liste filtrée.
  • DESIGN.md — documentation complète du design system : couleurs avec rationale, typographie, espacement, border radius, motion, composants, patterns UI, responsive, accessibilité et journal de décisions.

Modifications

  • Dashboard — agenda de la semaine en empty state explicite quand aucune réunion n'est planifiée ; bannière impayés avec filtre URL correct.
  • Pages membres et groupes — états vides cohérents avec le composant EmptyState au lieu de textes inline.
  • Wizard d'inscription — garde contre 0 campagnes disponibles avec empty state explicite ; correction de l'affichage du récapitulatif sur mobile.

Corrections

  • Suppression du </div> en trop dans le wizard d'inscription (registrations/Create.vue).
  • Le lien "impayés" du dashboard utilisait un format de query params incorrect pour Wayfinder ({ status: 'unpaid' } → { query: { status: 'unpaid' } }).
  • FlashToast : ajout du onUnmounted pour nettoyer le timer, ajout de break-words sur le message pour éviter l'overflow sur les messages longs.