# Audit de Configuration - BTP Xpress Client ↔ Serveur

## ✅ Résumé de l'audit effectué

Date : 2025-11-01  
Portée : Configuration complète du client PrimeFaces et mapping avec le serveur backend

---

## 1. Structure du Projet Client

### ✅ Structure des fichiers
- **XHTML** : `src/main/resources/META-INF/resources/` (structure Quarkus correcte)
- **Configuration** : `src/main/resources/META-INF/web.xml` et `application.properties`
- **Beans CDI** : `src/main/java/dev/lions/btpxpress/`
- **Services** : `src/main/java/dev/lions/btpxpress/service/`

### ✅ Fichiers créés/vérifiés
- ✅ `BtpXpressApiClient.java` - Interface REST Client pour communication backend
- ✅ `ChantierService.java` - Service encapsulant les appels API chantiers
- ✅ `application.properties` - Configuration complète OIDC + REST Client
- ✅ `pom.xml` - Dépendances OIDC et JWT ajoutées

---

## 2. Configuration OIDC / Keycloak

### ✅ Client (PrimeFaces)
```properties
quarkus.oidc.enabled=true
quarkus.oidc.auth-server-url=https://security.lions.dev/realms/btpxpress
quarkus.oidc.client-id=btpxpress-frontend
quarkus.oidc.application-type=web-app
quarkus.oidc.token.issuer=https://security.lions.dev/realms/btpxpress
```

### ✅ Serveur (Backend)
```properties
mp.jwt.verify.publickey.location=https://security.lions.dev/realms/btpxpress/protocol/openid-connect/certs
mp.jwt.verify.issuer=https://security.lions.dev/realms/btpxpress
quarkus.smallrye-jwt.enabled=true
```

### ✅ Vérifications
- ✅ **Même realm** : `btpxpress`
- ✅ **Même serveur Keycloak** : `https://security.lions.dev`
- ✅ **Client ID frontend** : `btpxpress-frontend` (doit exister dans Keycloak)
- ✅ **JWT Validation** : Backend valide les tokens via certificats publics

---

## 3. Communication Client ↔ Serveur

### ✅ Configuration REST Client
```properties
btpxpress.api.base-url=http://localhost:8080
quarkus.rest-client."dev.lions.btpxpress.service.BtpXpressApiClient".url=${btpxpress.api.base-url}
```

### ✅ Endpoints mappés

| Client (Interface) | Serveur (Resource) | Endpoint | Status |
|-------------------|-------------------|----------|--------|
| `BtpXpressApiClient.getChantiers()` | `ChantierResource.getAllChantiers()` | `GET /api/v1/chantiers` | ✅ Existe |
| `BtpXpressApiClient.getChantier(id)` | `ChantierResource.getChantierById()` | `GET /api/v1/chantiers/{id}` | ✅ Existe |
| `BtpXpressApiClient.getClients()` | `ClientResource.getAllClients()` | `GET /api/v1/clients` | ✅ Existe |
| `BtpXpressApiClient.getClient(id)` | `ClientResource.getClientById()` | `GET /api/v1/clients/{id}` | ✅ Existe |

### ✅ CORS Configuration

**Serveur** (`application.properties`) :
```properties
quarkus.http.cors.origins=${CORS_ORIGINS:http://localhost:3000,http://localhost:5173,http://localhost:8081}
```
✅ **Port 8081 ajouté** aux origines autorisées

**Client** :
```properties
quarkus.http.cors.origins=http://localhost:8080,https://security.lions.dev
```

---

## 4. Ports et URLs

| Service | Port | URL | Description |
|---------|------|-----|-------------|
| Backend | 8080 | http://localhost:8080 | API REST backend |
| Client | 8081 | http://localhost:8081 | Application PrimeFaces |
| Keycloak | - | https://security.lions.dev | Authentification OIDC |

---

## 5. Dépendances Maven

### ✅ Client (`pom.xml`)
- ✅ `quarkus-oidc` - Authentification OIDC
- ✅ `quarkus-smallrye-jwt` - Support JWT
- ✅ `quarkus-rest-client` - REST Client
- ✅ `quarkus-rest-jackson` - Sérialisation JSON
- ✅ `quarkus-primefaces` - PrimeFaces integration
- ✅ `freya-theme` - Thème PrimeFaces Freya

### ✅ Serveur (vérifié)
- ✅ `quarkus-smallrye-jwt` - Validation JWT
- ✅ CORS activé avec origine `http://localhost:8081`

---

## 6. Flux d'Authentification

```
┌─────────────┐         ┌──────────────┐         ┌─────────────┐
│   Client    │         │   Keycloak   │         │   Backend   │
│  Port 8081  │         │security.lions│         │  Port 8080  │
└─────────────┘         └──────────────┘         └─────────────┘
      │                        │                        │
      │  1. Accès page protégée                        │
      │────────────────────────────────────────────────►│
      │                        │                        │
      │                        │  2. Redirection OIDC   │
      │◄────────────────────────────────────────────────│
      │                        │                        │
      │  3. Redirect Keycloak  │                        │
      │────────────────────────►│                        │
      │                        │                        │
      │  4. Authentification   │                        │
      │                        │                        │
      │  5. Token JWT          │                        │
      │◄────────────────────────│                        │
      │                        │                        │
      │  6. Appel API + Token  │                        │
      │────────────────────────────────────────────────►│
      │                        │                        │
      │                        │  7. Validation token  │
      │                        │◄───────────────────────│
      │                        │                        │
      │  8. Réponse API        │                        │
      │◄────────────────────────────────────────────────│
```

---

## 7. Points de Vérification Requis

### ⚠️ À vérifier dans Keycloak
1. **Client `btpxpress-frontend` existe** dans le realm `btpxpress`
2. **Redirect URIs** incluent `http://localhost:8081/*`
3. **Web Origins** incluent `http://localhost:8081`
4. **Client Secret** configuré si nécessaire (pour confidential client)

### ⚠️ À tester
1. **Authentification OIDC** : Vérifier la redirection vers Keycloak
2. **Token JWT** : Vérifier l'envoi automatique dans les requêtes REST
3. **CORS** : Vérifier que les requêtes depuis 8081 vers 8080 fonctionnent
4. **Endpoints API** : Tester les appels `GET /api/v1/chantiers` et `/api/v1/clients`

---

## 8. Configuration Complète Validée

| Composant | Configuration | Status |
|-----------|--------------|--------|
| Structure fichiers | Quarkus standard | ✅ |
| OIDC Client | `btpxpress-frontend` | ✅ |
| OIDC Server | `security.lions.dev` | ✅ |
| REST Client | `BtpXpressApiClient` | ✅ |
| Services | `ChantierService` | ✅ |
| CORS Backend | Port 8081 autorisé | ✅ |
| CORS Client | Port 8080 autorisé | ✅ |
| Endpoints mappés | Tous vérifiés | ✅ |
| Dépendances | Toutes présentes | ✅ |

---

## 🎯 Conclusion

**✅ La configuration est complète et correcte** :
- Le client PrimeFaces est correctement configuré pour communiquer avec le backend
- L'authentification OIDC est configurée avec Keycloak sur `security.lions.dev`
- Les endpoints REST sont mappés correctement
- Le CORS est configuré pour autoriser la communication bidirectionnelle
- Toutes les dépendances nécessaires sont présentes

**⚠️ Action requise** : Vérifier dans Keycloak que le client `btpxpress-frontend` existe et est correctement configuré avec les redirect URIs appropriés.

