feat: Module Devis professionnel avec écrans complets
Création de 2 écrans professionnels pour le module Devis:
1. devis/nouveau.xhtml:
- 4 sections: Informations générales, Détail du devis, Montants, Conditions
- Numéro auto-généré avec icône
- Statut avec 5 valeurs (BROUILLON, ATTENTE, ACCEPTE, REFUSE, EXPIRE)
- Dates d'émission et validité avec calendriers
- Client et objet du devis requis
- Placeholder pour lignes de devis (future développement)
- Calcul automatique TVA 18% et TTC
- Récapitulatif visuel HT/TVA/TTC avec composant monétaire
- Conditions de paiement et remarques (section collapsible)
- 3 boutons: Annuler, Brouillon, Envoyer
2. devis/details.xhtml:
- En-tête: numéro, statut, client, objet, dates
- Actions: Retour, Convertir en chantier, PDF, Modifier
- 4 KPI cards: Montant HT, TVA, TTC, Statut
- 6 onglets professionnels:
* Vue d'ensemble: infos + récap financier + actions rapides
* Détail des lignes: table lignes (placeholder)
* Conditions: paiement, délais, garanties
* Documents: GED associée (placeholder)
* Suivi: timeline actions
* Historique: modifications (placeholder)
Corrections:
- Fix navigation /factures/nouvelle -> /factures/nouveau (factures.xhtml)
- Fix menu /factures/nouvelle -> /factures/nouveau (menu.xhtml)
Tous les composants réutilisables utilisés (status-badge, monetary-display).
Validation complète côté client et serveur.
UI/UX professionnel adapté au métier BTP.
This commit is contained in:
243
README_OIDC_CONFIGURATION.md
Normal file
243
README_OIDC_CONFIGURATION.md
Normal file
@@ -0,0 +1,243 @@
|
||||
# Configuration OIDC pour BTPXpress Client JSF
|
||||
|
||||
## 🎯 Statut: CONFIGURATION COMPLETE ET VALIDEE ✅
|
||||
|
||||
L'application BTPXpress Client JSF est maintenant correctement configuree pour l'authentification OIDC avec Keycloak.
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Demarrage rapide
|
||||
|
||||
### 1. Verifier la configuration des secrets
|
||||
```bash
|
||||
powershell -ExecutionPolicy Bypass -File verify-secrets.ps1
|
||||
```
|
||||
|
||||
**Sortie attendue:**
|
||||
```
|
||||
[OK] TOUS LES SECRETS SONT CORRECTEMENT CONFIGURES!
|
||||
```
|
||||
|
||||
### 2. Demarrer l'application
|
||||
```bash
|
||||
mvn quarkus:dev
|
||||
```
|
||||
|
||||
### 3. Acceder a l'application
|
||||
Ouvrir dans un navigateur: **http://localhost:8081**
|
||||
|
||||
**Comportement attendu:**
|
||||
1. Redirection automatique vers `https://security.lions.dev`
|
||||
2. Page de connexion Keycloak
|
||||
3. Apres connexion, redirection vers le dashboard
|
||||
|
||||
### 4. Utilisateurs disponibles
|
||||
- `admin@btpxpress.dev`
|
||||
- `directeur@btpxpress.dev`
|
||||
- `chef@btpxpress.dev`
|
||||
- `client@entreprise.com`
|
||||
|
||||
*(Utiliser les mots de passe definis dans Keycloak)*
|
||||
|
||||
---
|
||||
|
||||
## 📁 Fichiers de configuration
|
||||
|
||||
### application.properties (Principal)
|
||||
Fichier: `src/main/resources/application.properties`
|
||||
|
||||
**Configuration OIDC complete:**
|
||||
```properties
|
||||
# Serveur Keycloak
|
||||
quarkus.oidc.auth-server-url=https://security.lions.dev/realms/btpxpress
|
||||
quarkus.oidc.client-id=btpxpress-frontend
|
||||
quarkus.oidc.application-type=web-app
|
||||
|
||||
# Client Secret
|
||||
quarkus.oidc.credentials.secret=0Ph4e31lQQuonodmLQG3JycehbFL1Hei
|
||||
|
||||
# PKCE Configuration
|
||||
quarkus.oidc.authentication.pkce-required=true
|
||||
quarkus.oidc.authentication.pkce-secret=false
|
||||
quarkus.oidc.authentication.state-secret=btpxpress-pkce-state-secret-32ch
|
||||
|
||||
# Redirection
|
||||
quarkus.oidc.authentication.redirect-path=/dashboard.xhtml
|
||||
|
||||
# Token Encryption
|
||||
quarkus.oidc.token-state-manager.encryption-secret=btpxpress-secure-cookie-encryption-key-32chars-2025
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📚 Documentation disponible
|
||||
|
||||
| Fichier | Description |
|
||||
|---------|-------------|
|
||||
| **RESOLUTION_ERREURS_OIDC.md** | Guide complet des erreurs rencontrees et solutions |
|
||||
| **OIDC_SECRETS_CONFIGURATION.md** | Explication detaillee des 3 secrets OIDC |
|
||||
| **CORRECTIONS_OIDC.md** | Historique des corrections appliquees |
|
||||
| **CONFIGURATION_KEYCLOAK_JSF.md** | Guide de configuration Keycloak |
|
||||
|
||||
---
|
||||
|
||||
## 🔐 Les 3 secrets configures
|
||||
|
||||
| Secret | Longueur | Usage |
|
||||
|--------|----------|-------|
|
||||
| Client Secret | 32 chars | Authentification avec Keycloak |
|
||||
| State Secret | 32 chars | Encryption PKCE code verifier |
|
||||
| Token Encryption | 51 chars | Encryption tokens dans cookies |
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ Scripts PowerShell disponibles
|
||||
|
||||
### verify-secrets.ps1
|
||||
Verifie que tous les secrets sont correctement configures.
|
||||
```bash
|
||||
powershell -ExecutionPolicy Bypass -File verify-secrets.ps1
|
||||
```
|
||||
|
||||
### get-client-secret.ps1
|
||||
Recupere le client secret depuis Keycloak.
|
||||
```bash
|
||||
powershell -ExecutionPolicy Bypass -File get-client-secret.ps1
|
||||
```
|
||||
|
||||
### configure-keycloak-jsf.ps1
|
||||
Configure les redirect URIs dans Keycloak pour le port 8081.
|
||||
```bash
|
||||
powershell -ExecutionPolicy Bypass -File configure-keycloak-jsf.ps1
|
||||
```
|
||||
|
||||
### check-client-config.ps1
|
||||
Verifie la configuration du client dans Keycloak.
|
||||
```bash
|
||||
powershell -ExecutionPolicy Bypass -File check-client-config.ps1
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Points importants
|
||||
|
||||
### 1. Secrets en production
|
||||
**NE JAMAIS commiter les secrets en production!**
|
||||
|
||||
Utiliser des variables d'environnement:
|
||||
```properties
|
||||
quarkus.oidc.credentials.secret=${KEYCLOAK_CLIENT_SECRET}
|
||||
quarkus.oidc.authentication.state-secret=${OIDC_STATE_SECRET}
|
||||
quarkus.oidc.token-state-manager.encryption-secret=${OIDC_TOKEN_ENCRYPTION_SECRET}
|
||||
```
|
||||
|
||||
### 2. pkce-secret vs state-secret
|
||||
**IMPORTANT:** Ne pas avoir les deux configures simultanement!
|
||||
|
||||
- **Option A**: `pkce-secret=true` (utilise client secret) - NE PAS definir state-secret
|
||||
- **Option B**: `pkce-secret=false` (utilise secret dedie) - DEFINIR state-secret ✅ (CHOISI)
|
||||
|
||||
### 3. Longueur des secrets
|
||||
- Client Secret: **Exactement 32 caracteres**
|
||||
- State Secret: **Exactement 32 caracteres**
|
||||
- Token Encryption Secret: **Minimum 32 caracteres** (51 dans notre config)
|
||||
|
||||
---
|
||||
|
||||
## 🧪 Tests effectues
|
||||
|
||||
- [x] Verification des 3 secrets avec verify-secrets.ps1
|
||||
- [x] Client Keycloak configure comme Confidential
|
||||
- [x] PKCE S256 active
|
||||
- [x] Redirect URIs incluent http://localhost:8081/*
|
||||
- [x] index.xhtml supprime pour interception OIDC
|
||||
- [x] Permissions HTTP configurees (seules ressources statiques publiques)
|
||||
- [x] Logs OIDC en mode DEBUG
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Flux d'authentification
|
||||
|
||||
```
|
||||
┌─────────────┐
|
||||
│ Navigateur │
|
||||
└──────┬──────┘
|
||||
│
|
||||
│ 1. GET http://localhost:8081
|
||||
▼
|
||||
┌─────────────┐
|
||||
│ Quarkus │ OIDC intercepte (page protegee)
|
||||
│ OIDC │ Generate PKCE + encrypt avec state-secret
|
||||
└──────┬──────┘
|
||||
│
|
||||
│ 2. Redirect to Keycloak
|
||||
▼
|
||||
┌─────────────┐
|
||||
│ Keycloak │ Page de connexion
|
||||
│ security. │ Utilisateur se connecte
|
||||
│ lions.dev │
|
||||
└──────┬──────┘
|
||||
│
|
||||
│ 3. Redirect with auth code
|
||||
▼
|
||||
┌─────────────┐
|
||||
│ Quarkus │ Decrypt PKCE verifier
|
||||
│ OIDC │ Exchange code with client secret
|
||||
│ │ Encrypt tokens with token-encryption-secret
|
||||
└──────┬──────┘
|
||||
│
|
||||
│ 4. Redirect to dashboard
|
||||
▼
|
||||
┌─────────────┐
|
||||
│ Dashboard │ ✅ AUTHENTIFIE!
|
||||
└─────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🐛 Troubleshooting
|
||||
|
||||
### L'application ne demarre pas
|
||||
1. Verifier les secrets avec `verify-secrets.ps1`
|
||||
2. Verifier les logs dans la console
|
||||
3. S'assurer que Keycloak est accessible: https://security.lions.dev
|
||||
|
||||
### Pas de redirection vers Keycloak
|
||||
1. Verifier que index.xhtml n'existe pas (doit etre supprime)
|
||||
2. Verifier les permissions HTTP dans application.properties
|
||||
3. Vider le cache du navigateur
|
||||
|
||||
### Erreur "Authentication has failed"
|
||||
1. Verifier que l'utilisateur existe dans Keycloak
|
||||
2. Verifier les redirect URIs configurees dans Keycloak
|
||||
3. Verifier les logs DEBUG OIDC
|
||||
|
||||
### Erreur "Secret key" ou "Both configured"
|
||||
1. Consulter RESOLUTION_ERREURS_OIDC.md
|
||||
2. Re-verifier les secrets avec verify-secrets.ps1
|
||||
|
||||
---
|
||||
|
||||
## 📞 Support
|
||||
|
||||
Pour toute question sur la configuration OIDC:
|
||||
1. Consulter **RESOLUTION_ERREURS_OIDC.md** pour les erreurs communes
|
||||
2. Consulter **OIDC_SECRETS_CONFIGURATION.md** pour comprendre les secrets
|
||||
3. Verifier les logs de l'application avec `quarkus.log.category."io.quarkus.oidc".level=DEBUG`
|
||||
|
||||
---
|
||||
|
||||
## 🎉 Configuration realisee avec succes!
|
||||
|
||||
**Date**: 2025-11-07
|
||||
**Version Quarkus**: 3.15.1
|
||||
**Keycloak**: https://security.lions.dev
|
||||
**Status**: ✅ PRET POUR UTILISATION
|
||||
|
||||
L'application est maintenant prete a etre demarree et testee!
|
||||
|
||||
```bash
|
||||
mvn quarkus:dev
|
||||
```
|
||||
|
||||
Puis acceder a: **http://localhost:8081** 🚀
|
||||
Reference in New Issue
Block a user