Commit Graph

41 Commits

Author SHA1 Message Date
dahoud
4d912de742 fix(org-form): lat/long — ajouter decimalSeparator virgule (locale FR)
PrimeFaces p:inputNumber sans decimalSeparator explicite utilise le point (EN).
L'utilisateur français tape une virgule → autoNumeric la rejette → seule la
partie entière est conservée (ex: 5,316667 → 5).

Fix : decimalSeparator=',' + thousandSeparator='' (pas de séparateur milliers
pour les coordonnées GPS). Placeholders mis à jour avec virgule.
2026-04-16 12:05:27 +00:00
dahoud
b5166147fe fix(org-liste): afficher la localisation réelle (ville, pays) au lieu d'un tiret
La colonne 'Localisation' dans le DataTable des organisations affichait un
tiret hardcodé (<span>—</span>) — placeholder jamais remplacé par les données.

Fix : affiche ville + pays depuis le DTO, triable par ville.
Si aucune donnée → tiret gris en fallback.
2026-04-16 12:03:44 +00:00
dahoud
8e0f4288a0 fix(org-form): binding type dropdown — typeAssociation → typeOrganisation
Le <p:selectOneMenu> pour le type d'organisation écrivait dans typeAssociation
(alias obsolète) tandis que le backend OrganisationService.creerOrganisation()
lisait typeOrganisation → le type sélectionné par l'utilisateur était ignoré,
le type par défaut (premier du catalogue, ex: GROUPE_PRIERE) était utilisé.

Fix : value='#{model.typeAssociation}' → value='#{model.typeOrganisation}'
2026-04-16 11:45:57 +00:00
dahoud
46ea61e306 fix(topbar): poll session monitor 5s → 60s + async pour éviter les 499
Le p:poll interval=5 dans topbar.xhtml bombardait le serveur toutes les 5 secondes.
Quand l'utilisateur soumettait un formulaire (ex: création d'organisation),
le poll concurrent provoquait l'annulation de la requête AJAX → erreur 499
(client closed connection before server response).

Changements :
- interval : 5 → 60 (60s suffit pour tracker l'activité session)
- async='true' ajouté (le poll ne bloque plus la queue AJAX PrimeFaces,
  les soumissions de formulaires passent en priorité)
2026-04-16 11:07:07 +00:00
dahoud
2037d2a39a fix(confirm-dialog): ajouter ui-confirmdialog-yes/no — le bouton Oui ne faisait rien
Le p:confirmDialog global PrimeFaces 13 utilise les classes CSS
ui-confirmdialog-yes et ui-confirmdialog-no pour câbler automatiquement
les boutons à l'action du p:commandButton source (qui contient le <p:confirm/>).

Avant : le bouton 'Oui' avait type='button' sans classe ni onclick
→ aucune réaction au clic, action jamais déclenchée.

Après : classes standards PrimeFaces ajoutées sur les deux boutons.
Supprimé onclick='PF(confirmDialog).hide()' sur 'Non' (la classe
ui-confirmdialog-no gère la fermeture automatiquement).
2026-04-16 10:51:04 +00:00
dahoud
86ad4eb965 fix(org-form): DatePicker yearRange 2025→2030 + validation GPS server-side
- DatePicker dateFondation : yearRange='1900:2025' → '1900:2030'
  (on est en 2026 — le composant ne pouvait pas afficher LocalDate.now())
  Supprimé maxdate=null (inutile, causait potentiellement un warning)
- InputNumber lat/long : ajout f:validateDoubleRange côté serveur
  (la validation JS autoNumeric lance une exception non rattrapée quand
  l'utilisateur colle une valeur hors bornes — le validator serveur rattrape)
  Ajout modifyValueOnWheel=false (évite les modifications accidentelles au scroll)
  Ajout p:message pour afficher les erreurs de validation
2026-04-16 10:47:33 +00:00
dahoud
4793f18711 fix(org): protéger preparerNouvelleOrganisation contre les AJAX postbacks
Le preRenderView de nouvelle.xhtml appelait preparerNouvelleOrganisation() à
chaque render — y compris les polls PrimeFaces du template (~5s) et les
partial AJAX updates. Cela réinitialisait nouvelleOrganisation = new OrganisationResponse()
à chaque cycle, perdant les données saisies par l'utilisateur.

Symptôme : erreurs 499 en boucle dans la console browser + impossible de soumettre
le formulaire (données toujours vides au moment du POST).

Fix : if (fc.isPostback()) return; → la méthode ne s'exécute que sur le
chargement initial (GET), pas sur les AJAX postbacks.
2026-04-16 10:38:26 +00:00
dahoud
d70c79f9e9 fix(organisations): corriger executeWithRetry, accesseurs statut et XHTML détail
- OrganisationsBean : executeWithRetrySupplier → executeWithRetry (méthode correcte,
  compatible ECJ — Callable<T> au lieu de Supplier<T> non capturé)
- OrganisationDetailBean : utiliser statutLibelle/statutSeverity si présents avant
  fallback sur statut brut ; supprimer revenirAListe() (redirect manuel inutile) ;
  propager typeLibelle en plus de typeOrganisationLibelle
- detail.xhtml : remplacer les panneaux adresseComplete/dateFondation/niveauHierarchique
  (champs absents du DTO) par nombreEvenements qui existe dans OrganisationSummaryResponse
2026-04-12 14:53:36 +00:00
dahoud
237922891d fix(client): version 1.0.4, accesseurs JavaBean sur OrganisationSummaryResponse (compat JSF/EL) 2026-04-11 02:00:48 +00:00
dahoud
05b97f04cd fix: exposer /health pour pipeline health check (smallrye-health root-path) 2026-04-09 15:36:00 +00:00
dahoud
cb7eaea774 fix: corriger id repository Gitea (gitea → gitea-lionsdev) pour auth Maven 2026-04-09 15:16:33 +00:00
dahoud
8b08beaa76 fix: ajouter repository Gitea dans pom.xml pour résolution parent en CI 2026-04-09 15:11:12 +00:00
dahoud
0d936eb80a feat: formulaire types organisation avec categorie et modules requis
- TypeOrganisationsAdminBean: gestion List<String> modulesSelectionnes
  (sync CSV↔List), constantes CATEGORIES/MODULES_DISPONIBLES, getters JSF,
  CreateTypeReferenceRequest et UpdateTypeReferenceRequest mis à jour (11 args)
- organisations.xhtml: dropdown catégorie + selectManyCheckbox modules (16),
  colonnes Catégorie et Modules requis dans le DataTable, dialogue 750px
- pom.xml: unionflow-server-api 1.0.0 → 1.0.3
2026-04-09 15:08:48 +00:00
dahoud
1a52e7c6bc fix: add smallrye-health extension for pipeline health check 2026-04-09 10:42:46 +00:00
dahoud
0dbbf445f0 fix: add pages/admin/logs/ excluded by .gitignore logs/ rule 2026-04-09 10:00:59 +00:00
dahoud
bcdf5c0338 fix(build): corriger types MembreSummaryResponse vs MembreResponse dans les beans 2026-04-07 22:01:32 +00:00
dahoud
5e88753469 fix(build): import lombok.Data manquant dans MessagingBean 2026-04-07 21:47:56 +00:00
dahoud
ac0c5a67a1 fix(frontend): corrections workflow v3.0 — inscription événements, CreateMembreRequest, AJAX session expiry
Services:
- EvenementService: POST /inscriptions (sans membreId), DELETE /inscriptions, GET /recherche, GET /type/{type}
- MembreService: creer() accepte CreateMembreRequest au lieu de MembreResponse
- Nouveaux services: BackupService, EpargneService, FinanceApprovalService, LogsService, MessageService, OrganisationService, PaiementClientService

Beans:
- MembreInscriptionBean: construit CreateMembreRequest.builder() avec organisationId UUID
- EvenementsBean: inscrireParticipant(id) sans userId (backend infère depuis token)
- DashboardBean: checkAccessAndRedirect() SUPER_ADMIN en premier

Sécurité:
- AuthenticationFilter: gestion AJAX PrimeFaces (partial/ajax → XML partial-response redirect)
- PermissionChecker: vérification rôles côté bean
- k8s/: manifestes secrets SMTP et Wave (placeholders à remplir)

Pages XHTML: dashboards rôles, cotisations, membres, événements, organisations
2026-04-07 20:54:20 +00:00
dahoud
0dc050f422 Sync: code local unifié
Synchronisation du code source local (fait foi).

Signed-off-by: lions dev Team
2026-03-15 16:25:45 +00:00
dahoud
6b28cf751e Refactoring 2026-03-01 22:00:28 +00:00
dahoud
c0e2c4da45 Revert "Fix: Remove explicit redirect-path to enable transparent OIDC callback handling"
This reverts commit a67932db3c.
2025-12-24 02:40:37 +00:00
dahoud
a67932db3c Fix: Remove explicit redirect-path to enable transparent OIDC callback handling
Pour les applications web-app (servlet/JSF), Quarkus OIDC utilise un filtre
qui intercepte AUTOMATIQUEMENT toute URL contenant les paramètres code+state,
sans nécessiter de redirect-path explicite.

En commentant quarkus.oidc.authentication.redirect-path:
- Le filtre Quarkus OIDC peut intercepter n'importe quelle URL après l'auth Keycloak
- Le callback devient transparent pour l'utilisateur (pas de page intermédiaire visible)
- Redirection immédiate vers le dashboard après authentification réussie

Cela corrige l'erreur 502 Bad Gateway observée sur /auth/callback en production.

Changements:
- application.properties: redirect-path commenté
- application-prod.properties: redirect-path commenté avec explication détaillée

Le wildcard https://unionflow.lions.dev/* dans Keycloak permet à Quarkus
de rediriger vers n'importe quelle page après l'authentification.
2025-12-24 02:33:27 +00:00
dahoud
7c4cc9e7f8 Fix: Restaurer quarkus.oidc.authentication.redirect-path=/auth/callback en production
Le redirect-path doit être explicitement défini en production pour surcharger
la valeur par défaut de application.properties.

Quarkus OIDC gère automatiquement le callback sur ce path - pas besoin de
créer une page callback.xhtml. Le framework intercepte la requête, échange
le code OAuth contre un token, crée la session et redirige automatiquement.

Cela corrige l'erreur 502 Bad Gateway lors du retour d'authentification Keycloak.
2025-12-24 01:59:52 +00:00
dahoud
0f5b0af598 Fix: Utiliser le callback path par défaut de Quarkus OIDC
- Commenté quarkus.oidc.authentication.redirect-path=/auth/callback
- Quarkus OIDC utilise maintenant son path par défaut /q/oidc/code-flow
- Ajouté https://unionflow.lions.dev/q/oidc/code-flow dans Keycloak

Cela corrige l'erreur 502 Bad Gateway lors du callback OAuth après authentification.
Le path personnalisé /auth/callback causait des conflits avec le gestionnaire automatique
de callback de Quarkus OIDC.
2025-12-22 17:07:12 +00:00
dahoud
75befc9361 Fix: Remove invalid applies-to configuration causing startup crash
The applies-to=JAXRS,SERVLET syntax was invalid and caused:
  Cannot convert JAXRS,SERVLET to enum class PolicyMappingConfig$AppliesTo

Removed applies-to lines - not needed for basic path-based permissions.
2025-12-21 04:26:42 +00:00
dahoud
88b92b04d8 Fix: Correct OIDC authentication permissions to allow public access to landing page
Changes:
- Removed unrecognized property quarkus.oidc.authentication.redirect-path-after-login
- Changed authenticated.paths from /* to /pages/secure/* to allow public landing page
- Added applies-to=JAXRS,SERVLET to both public and authenticated permissions
- Documented importance of permission order (most specific first)

This fixes the 403 Forbidden error on https://unionflow.lions.dev root path.
Now:
- / and /index.xhtml are publicly accessible (landing page)
- /pages/secure/* requires authentication
- After login, restore-path-after-redirect will redirect to originally requested page

🤖 Generated with Claude Code

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-21 04:19:18 +00:00
dahoud
e72754ecbe chore: Update lions-user-manager-client dependency to v1.0.1
Version 1.0.1 includes explicit version for lions-user-manager-server-api
dependency, fixing Maven resolution issues during CI/CD builds.

This resolves the 'version can neither be null, empty nor blank' error
when building with lionsctl pipeline.
2025-12-21 03:17:33 +00:00
dahoud
7f9d639410 fix: Update Dockerfile for Quarkus 3.x format (quarkus-app)
Quarkus 3.x changed the packaging format from uber-jar (*-runner.jar)
to a multi-file quarkus-app directory structure.

Changes:
- Copy quarkus-app/lib/, app/, quarkus/ directories
- Use quarkus-run.jar as entrypoint instead of app.jar
- Maintains same runtime configuration and health checks

Fixes Docker build compatibility with Quarkus 3.15.1
2025-12-21 02:50:28 +00:00
dahoud
a3d52d9d6d fix: OAuth redirect configuration for production
🐛 CORRECTION - Redirection OAuth après authentification

PROBLÈME RAPPORTÉ:
- Après authentification Keycloak, utilisateur bloqué sur /auth/callback
- URL contient state & code mais pas de redirection automatique
- Page d'accueil non accessible à https://unionflow.lions.dev

CORRECTIONS APPLIQUÉES:

1. application-prod.properties (lignes 107-112):
    Ajout explicit redirect-path=/auth/callback (était commenté)
    Ajout redirect-path-after-login=/pages/secure/dashboard.xhtml
    Assure compatibilité avec configuration Keycloak

2. Documentation Keycloak:
    Création de KEYCLOAK_VERIFICATION.md
    Guide de vérification des redirect URIs
    Checklist de déploiement

CONFIGURATION EXISTANTE (déjà OK):
- web.xml: index.xhtml configuré comme welcome-file
- index.xhtml: Landing page magnifique déjà créée (PrimeFaces Freya)
- Keycloak realm: unionflow actif et accessible

FLUX OAUTH ATTENDU APRÈS CORRECTION:
1. Accès https://unionflow.lions.dev → Landing page (index.xhtml)
2. Clic 'Accéder' → Redirection Keycloak pour auth
3. Authentification → Callback /auth/callback
4. Redirection automatique → /pages/secure/dashboard.xhtml 

FICHIERS MODIFIÉS:
- src/main/resources/application-prod.properties
- KEYCLOAK_VERIFICATION.md (nouveau)

Réf: Issue rapportée en production
     URL callback avec state/code sans redirect

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-21 02:31:11 +00:00
dahoud
d6ab90c810 🔒 SÉCURITÉ - Audit UnionFlow: Corrections Critiques et Majeures
## 🔴 CRITIQUES
1. Suppression du secret hardcodé du Dockerfile (KEYCLOAK_CLIENT_SECRET)
   Les secrets doivent maintenant être injectés via Kubernetes Secrets

2. Configuration TLS sécurisée par défaut
   - quarkus.oidc.tls.verification=required (au lieu de 'none')
   - Prévient les attaques Man-in-the-Middle
   - 'none' reste disponible uniquement en développement local

## 🟠 MAJEURES
- Ajout de annotationProcessorPaths pour Lombok dans maven-compiler-plugin
  Assure la génération correcte des getters/setters/builders

## 📋 Contexte
Suite à l'audit de sécurité AUDIT_INTEGRAL_COMPLET_2025.md
Score avant: 5.6/10 - NE PAS DÉPLOYER EN PRODUCTION
Problèmes critiques identifiés et corrigés

## ⚠️ ACTION REQUISE
Créer le Kubernetes Secret avant déploiement:
kubectl create secret generic unionflow-client-secrets \
  --namespace=applications \
  --from-literal=keycloak-client-secret='...'

Voir: kubernetes/secrets/README.md

🤖 Generated with Claude Code
2025-12-14 17:10:18 +00:00
dahoud
3a2027763b Fix: Add Quarkus Arc CDI configuration to application-prod.properties
Ajout des configurations Quarkus Arc CDI manquantes en production
pour résoudre l'erreur BeanManager.getELResolver qui cause des 500 errors.

Configurations ajoutées:
- quarkus.arc.unremovable-types: Support des types JSF/CDI
- quarkus.arc.remove-unused-beans=false: Préservation des beans JSF
- quarkus.arc.detect-unused-false-positives=true: Support @ViewScoped
- quarkus.arc.auto-inject-fields=true: Support EL resolver pour #{bean.property}

Ces configurations existaient déjà dans application.properties (dev)
mais manquaient dans application-prod.properties.

Corrige: java.lang.UnsupportedOperationException at BeanManagerImpl.getELResolver
2025-12-14 12:25:52 +00:00
dahoud
d227682736 Fix: Remove custom OAuth callback path and set index.xhtml as welcome file
Corrections apportées:
1. Suppression de quarkus.oidc.authentication.redirect-path=/auth/callback
   - Quarkus OIDC utilise maintenant son chemin par défaut: /q/oidc/code-flow/callback
   - /auth/callback n'est pas une page métier et ne doit pas être utilisé

2. Changement du welcome-file de dashboard.xhtml vers index.xhtml
   - dashboard.xhtml n'existe pas dans le répertoire racine
   - index.xhtml est la page d'accueil publique avec contenu marketing

Ces changements corrigent:
- 403 Forbidden sur https://unionflow.lions.dev (mauvais welcome-file)
- 502/404 Bad Gateway sur /auth/callback (chemin de callback incorrect)

Le flux OAuth utilisera maintenant le chemin standard Quarkus OIDC.
Keycloak doit être mis à jour pour rediriger vers /q/oidc/code-flow/callback.
2025-12-14 12:09:01 +00:00
dahoud
d42c10d029 Fix: Add quarkus.oidc.authentication.redirect-path=/auth/callback for OAuth callback handling
Quarkus OIDC needs explicit redirect-path configuration to handle the OAuth callback
from Keycloak at /auth/callback. Without this, the endpoint returns 404 Not Found
causing 502 Bad Gateway during authentication flow.

This fixes the OAuth callback 502 error after successful Keycloak authentication.
2025-12-14 00:52:37 +00:00
dahoud
9164f00aaa Fix: Migration complète vers Jakarta EE pour résoudre BeanManager.getELResolver error
Cette migration corrige l'erreur java.lang.UnsupportedOperationException
at io.quarkus.arc.impl.BeanManagerImpl.getELResolver qui empêchait
le démarrage de l'application JSF/PrimeFaces sous Quarkus 3.15.1.

🔧 FICHIERS XML CORRIGÉS (javax → jakarta):
- web.xml: Jakarta EE 5.0 (suppression listeners WebBeans/ConfigureListener)
- primefaces-freya.taglib.xml: Jakarta EE 4.0
- unionflow.taglib.xml: Jakarta EE 4.0
- beans.xml: Jakarta EE 4.0
- faces-config.xml (WEB-INF): Jakarta EE 4.0

📝 FICHIERS JAVASCRIPT CORRIGÉS (4 fichiers):
- layout.js: PrimeFaces.ajax.RESOURCE = 'jakarta.faces.Resource'
  (au lieu de javax.faces.Resource)

⚙️ CONFIGURATION QUARKUS ARC AJOUTÉE:
- quarkus.arc.unremovable-types: Support des types JSF/CDI
- quarkus.arc.remove-unused-beans=false: Préservation des beans JSF
- quarkus.arc.detect-unused-false-positives=true: Support @ViewScoped
- quarkus.arc.auto-inject-fields=true: Support EL resolver

 RÉSULTAT:
Arc CDI peut maintenant fournir correctement l'ELResolver à MyFaces,
permettant l'évaluation des expressions JSF #{bean.property} et le
démarrage normal de l'application.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-13 18:57:22 +00:00
dahoud
b904cd6b95 Fix: Remove custom OIDC redirect paths, use Quarkus defaults
- Removed quarkus.oidc.authentication.redirect-path=/auth/callback
- Removed quarkus.oidc.authentication.redirect-uri explicit setting
- Changed cookie-same-site from strict to lax for OAuth compatibility
- Keycloak client updated with wildcard redirectUris: https://unionflow.lions.dev/*

This allows Quarkus OIDC to use its default callback paths instead of
the non-existent /auth/callback path that was causing 502 errors.

Fixes OAuth callback 502 Bad Gateway error.
2025-12-13 11:54:36 +00:00
dahoud
eeb0c31149 Fix: Add explicit OIDC redirect URI for Keycloak auth
Added force-redirect-https-scheme and explicit redirect-uri to fix
'Paramètre invalide : redirect_uri' error in Keycloak authentication.

Changes:
- quarkus.oidc.authentication.force-redirect-https-scheme=true
- quarkus.oidc.authentication.redirect-uri=https://unionflow.lions.dev/auth/callback

This ensures Quarkus OIDC uses the correct absolute URL for redirect
instead of constructing it from request headers (which may be incorrect
behind nginx ingress).
2025-12-13 11:11:10 +00:00
dahoud
d7fe9e4203 Remove .lionsctl.yaml - lionsctl should auto-detect configuration from Dockerfile and pom.xml 2025-12-12 23:35:00 +00:00
dahoud
c031464f71 Fix: Change application port from 8086 to 8080 for lionsctl compatibility
lionsctl pipeline generates manifests with port 8080 by default and doesn't
respect custom port configuration in .lionsctl.yaml. Changing the application
to use port 8080 fixes the health check failures.

Changes:
- application-prod.properties: quarkus.http.port=8080
- Dockerfile: EXPOSE 8080, HEALTHCHECK on port 8080
- .lionsctl.yaml: port 8080 in all configurations

This fixes the pod restart loop caused by liveness/readiness probes
checking port 8080 while the app was listening on port 8086.
2025-12-12 23:14:28 +00:00
dahoud
3ffcb2f38a Add: Dockerfile et configuration lionsctl pour déploiement production
- Ajout du Dockerfile avec configuration port 8086
- Configuration des variables d'environnement Keycloak et backend
- Ajout de .lionsctl.yaml avec domaine unionflow.lions.dev
- Health checks configurés pour le bon port (8086)
- Replicas: 1 comme demandé

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-12 22:58:50 +00:00
dahoud
50a9b089a4 Fix: Correct exporterExcel method call parameters
The exporterExcel method signature requires 11 parameters but was being
called with only 3. This caused a compilation error during deployment.

Fixed by providing all required parameters:
- format, associationId, statut, type
- dateAdhesionDebut, dateAdhesionFin
- colonnesExport
- inclureHeaders, formaterDates, inclureStatistiques
- motDePasse

Most parameters are set to null or default values for now.
2025-12-12 22:17:27 +00:00
dahoud
2910809949 Configure Maven repository for unionflow-server-api dependency 2025-12-10 01:12:54 +00:00