# Lions User Manager > Gestion centralisée des utilisateurs via Keycloak Admin API — Backend REST + Frontend JSF PrimeFaces Freya ## Architecture ``` lions-user-manager/ ├── pom.xml # POM parent (multi-modules) ├── lions-user-manager-server-api/ # Contrats API : DTOs, interfaces, enums ├── lions-user-manager-server-impl-quarkus/ # Serveur REST Quarkus + Keycloak Admin ├── lions-user-manager-client-quarkus-primefaces-freya/ # Client Web JSF + PrimeFaces Freya └── scripts/ # Scripts DevOps (Keycloak, DB, Git) ``` ## Stack Technique | Composant | Technologie | Version | |-----------|------------|---------| | Runtime | Java | 17 | | Framework | Quarkus | 3.15.1 | | UI Framework | PrimeFaces (Freya theme) | 14.0.5 | | Auth | Keycloak (OIDC + Admin API) | 26.0.4 | | Base de données | PostgreSQL + Hibernate ORM Panache | — | | Migration DB | Flyway | — | | Build | Maven | — | | Tests | JUnit 5, Mockito 5, Testcontainers, REST-Assured | — | ## Modules ### `server-api` Contrats partagés entre serveur et client : - **DTOs** : `UserDTO`, `RoleDTO`, `AuditLogDTO`, `RealmAssignmentDTO`, etc. - **Interfaces Service** : `UserService`, `RoleService`, `AuditService`, `SyncService`, `RealmAuthorizationService` - **Enums** : `StatutUser`, `TypeRole`, `TypeActionAudit` - **Validations** : `ValidationConstants` ### `server-impl-quarkus` API REST backend : - **Resources** : `UserResource`, `RoleResource`, `AuditResource`, `RealmAssignmentResource`, `SyncResource`, `RealmResource` - **Services** : Implémentations complètes avec gestion d'erreurs et audit - **Keycloak Admin Client** : Gestion des utilisateurs, rôles, realms via Keycloak Admin API - **Health & Metrics** : `/health`, `/metrics` (Prometheus), `/q/swagger-ui` - **Audit** : Traçabilité des actions sur table PostgreSQL ### `client-quarkus-primefaces-freya` Interface web admin : - **Pages** : Dashboard, Gestion Utilisateurs (CRUD), Rôles, Audit, Synchronisation, Realm Assignment - **Beans JSF** : `DashboardBean`, `UserListBean`, `UserCreationBean`, `UserProfilBean`, `RoleGestionBean`, `AuditConsultationBean`, etc. - **REST Clients** : Communication type-safe avec le serveur via MicroProfile REST Client - **Thème** : PrimeFaces Freya (enterprise dark/light) ## Prérequis - **Java 17+** - **Maven 3.9+** - **Docker Desktop** (pour Keycloak et PostgreSQL) - **Keycloak** accessible sur `localhost:8180` - **PostgreSQL** accessible sur `localhost:5432` ## Démarrage Rapide ### 1. Démarrer l'infrastructure ```bash # Keycloak docker run -d --name keycloak -p 8180:8080 \ -e KC_BOOTSTRAP_ADMIN_USERNAME=admin \ -e KC_BOOTSTRAP_ADMIN_PASSWORD=admin \ quay.io/keycloak/keycloak:26.0.4 start-dev # PostgreSQL docker run -d --name postgres -p 5432:5432 \ -e POSTGRES_USER=skyfile \ -e POSTGRES_PASSWORD=skyfile \ -e POSTGRES_DB=lions_user_manager_dev \ postgres:16 ``` ### 2. Configurer Keycloak ```bash # Utiliser les scripts dans scripts/ pwsh scripts/setup-keycloak-client.ps1 ``` ### 3. Compiler le projet ```bash mvn clean install -DskipTests ``` ### 4. Lancer le serveur (port 8081) ```bash cd lions-user-manager-server-impl-quarkus mvn quarkus:dev -Dquarkus.profile=dev ``` ### 5. Lancer le client (port 8082) ```bash cd lions-user-manager-client-quarkus-primefaces-freya mvn quarkus:dev -Dquarkus.profile=dev ``` ## Ports | Service | Port | URL | |---------|------|-----| | Keycloak | 8180 | http://localhost:8180 | | Serveur API | 8081 | http://localhost:8081 | | Client Web | 8082 | http://localhost:8082 | | Swagger UI | 8081 | http://localhost:8081/q/swagger-ui | | PostgreSQL | 5432 | — | ## Configuration Chaque module utilise 3 fichiers de configuration Quarkus : | Fichier | Rôle | |---------|------| | `application.properties` | Propriétés communes (tous environnements) | | `application-dev.properties` | Surcharges développement (ports, logging verbeux, Keycloak local) | | `application-prod.properties` | Surcharges production (env vars, TLS, logging minimal) | ## Tests ```bash # Tests unitaires seuls mvn test # Tests d'intégration mvn verify # Avec couverture JaCoCo mvn verify -Pjacoco ``` ## Production ### Variables d'environnement requises ```bash # Keycloak KEYCLOAK_AUTH_SERVER_URL=https://security.lions.dev/realms/lions-user-manager KEYCLOAK_SERVER_URL=https://security.lions.dev KEYCLOAK_ADMIN_USERNAME=admin KEYCLOAK_ADMIN_PASSWORD= KEYCLOAK_CLIENT_ID=lions-user-manager-client # Base de données DB_HOST= DB_PORT=5432 DB_NAME=lions_user_manager DB_USERNAME= DB_PASSWORD= # Sécurité OIDC_ENCRYPTION_SECRET=<32-char-secret> CORS_ORIGINS=https://users.lions.dev # Backend URL (pour le client) LIONS_USER_MANAGER_BACKEND_URL=https://api.users.lions.dev ``` ### Docker Chaque module déployable contient un `Dockerfile.prod` : ```bash # Build natif mvn package -Pnative -DskipTests # Build Docker docker build -f Dockerfile.prod -t lions-user-manager-server:1.0.0 . ``` ## Licence Propriétaire — Lions Dev Team © 2025