# Configuration UnionFlow Client - PRODUCTION # Ce fichier est utilisé avec le profil Quarkus "prod" # Configuration HTTP quarkus.http.port=8080 quarkus.http.host=0.0.0.0 quarkus.http.root-path=/ quarkus.http.so-reuse-port=true quarkus.http.tcp-quick-ack=true quarkus.http.tcp-cork=true # =================================================================================================== # Headers de Sécurité HTTP - PRODUCTION # =================================================================================================== # Prévention du MIME sniffing quarkus.http.header."X-Content-Type-Options".value=nosniff quarkus.http.header."X-Content-Type-Options".methods=GET,POST,PUT,DELETE,PATCH # Protection contre le clickjacking quarkus.http.header."X-Frame-Options".value=DENY quarkus.http.header."X-Frame-Options".methods=GET,POST,PUT,DELETE,PATCH # HSTS - Force HTTPS pour 1 an quarkus.http.header."Strict-Transport-Security".value=max-age=31536000; includeSubDomains; preload quarkus.http.header."Strict-Transport-Security".methods=GET,POST,PUT,DELETE,PATCH # Content Security Policy # Permet 'unsafe-inline' pour PrimeFaces/JSF qui génèrent des scripts inline quarkus.http.header."Content-Security-Policy".value=default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; connect-src 'self'; frame-ancestors 'none' quarkus.http.header."Content-Security-Policy".methods=GET,POST,PUT,DELETE,PATCH # Protection XSS (legacy, mais utile pour anciens navigateurs) quarkus.http.header."X-XSS-Protection".value=1; mode=block quarkus.http.header."X-XSS-Protection".methods=GET,POST,PUT,DELETE,PATCH # Politique de référents quarkus.http.header."Referrer-Policy".value=strict-origin-when-cross-origin quarkus.http.header."Referrer-Policy".methods=GET,POST,PUT,DELETE,PATCH # Permissions Policy (anciennement Feature-Policy) quarkus.http.header."Permissions-Policy".value=geolocation=(), microphone=(), camera=() quarkus.http.header."Permissions-Policy".methods=GET,POST,PUT,DELETE,PATCH # Compression HTTP pour améliorer les performances quarkus.http.enable-compression=true quarkus.http.compression-level=6 # Configuration logging - Production quarkus.log.console.enable=true quarkus.log.console.level=INFO quarkus.log.console.format=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c{2.}] (%t) %s%e%n quarkus.log.category."dev.lions.unionflow".level=INFO quarkus.log.category."org.primefaces".level=WARN quarkus.log.category."org.apache.myfaces".level=WARN # Configuration Backend UnionFlow - Production unionflow.backend.url=${UNIONFLOW_BACKEND_URL:https://api.lions.dev/unionflow} # Configuration REST Client - Production quarkus.rest-client."unionflow-api".url=${unionflow.backend.url} quarkus.rest-client."unionflow-api".scope=jakarta.inject.Singleton quarkus.rest-client."unionflow-api".connect-timeout=5000 quarkus.rest-client."unionflow-api".read-timeout=15000 quarkus.rest-client."unionflow-api".providers=dev.lions.unionflow.client.service.RestClientExceptionMapper # NOTE: JwtClientRequestFilter retiré - utilisation de AuthHeaderFactory via @RegisterClientHeaders # Configuration Keycloak OIDC - Production quarkus.oidc.enabled=true quarkus.oidc.auth-server-url=${KEYCLOAK_AUTH_SERVER_URL:https://security.lions.dev/realms/unionflow} quarkus.oidc.client-id=unionflow-client quarkus.oidc.credentials.secret=${KEYCLOAK_CLIENT_SECRET} quarkus.oidc.application-type=web-app # Callback path - must match Keycloak Valid Redirect URIs configuration quarkus.oidc.authentication.redirect-path=/auth/callback quarkus.oidc.authentication.force-redirect-https-scheme=true quarkus.oidc.authentication.restore-path-after-redirect=true # Default landing page after successful login quarkus.oidc.authentication.scopes=openid,profile,email,roles quarkus.oidc.token.issuer=https://security.lions.dev/realms/unionflow quarkus.oidc.tls.verification=required quarkus.oidc.authentication.cookie-same-site=lax quarkus.oidc.authentication.java-script-auto-redirect=false quarkus.oidc.discovery-enabled=true # IMPORTANT: L'ordre des permissions compte - les plus spécifiques doivent être EN PREMIER # Chemins publics (non protégés par OIDC) - Production quarkus.http.auth.permission.public.paths=/,/index.xhtml,/pages/public/*,/auth/*,/q/*,/q/oidc/*,/favicon.ico,/resources/*,/META-INF/resources/*,/images/*,/jakarta.faces.resource/*,/javax.faces.resource/* quarkus.http.auth.permission.public.policy=permit # Tous les autres chemins nécessitent une authentification quarkus.http.auth.permission.authenticated.paths=/pages/secure/* quarkus.http.auth.permission.authenticated.policy=authenticated # Configuration Session (custom properties, gérées côté applicatif) unionflow.session.timeout=${SESSION_TIMEOUT:1800} unionflow.session.remember-me.duration=${REMEMBER_ME_DURATION:604800} # Configuration de sécurité (custom properties, gérées côté applicatif) unionflow.security.enable-csrf=${ENABLE_CSRF:true} unionflow.security.password.min-length=${PASSWORD_MIN_LENGTH:8} unionflow.security.password.require-special-chars=${PASSWORD_REQUIRE_SPECIAL:true} unionflow.security.max-login-attempts=${MAX_LOGIN_ATTEMPTS:5} unionflow.security.lockout-duration=${LOCKOUT_DURATION:300} # =================================================================================================== # Configuration Quarkus Arc CDI - Intégration avec JSF/MyFaces - Production # =================================================================================================== # Active le mode découverte de beans pour permettre à Arc de gérer tous les beans CDI et JSF quarkus.arc.unremovable-types=jakarta.faces.application.Application,jakarta.faces.context.FacesContext,jakarta.enterprise.context.Conversation # Permet à Arc de détecter et gérer les beans avec annotations JSF custom scopes (@ViewScoped, etc.) quarkus.arc.detect-unused-false-positives=true # Force Arc à gérer les beans même s'ils ne sont pas référencés directement quarkus.arc.remove-unused-beans=false # Active le support complet CDI pour JSF Expression Language (EL) # Cela permet à MyFaces d'utiliser Arc BeanManager pour résoudre #{bean.property} quarkus.arc.auto-inject-fields=true