Files
mic-after-work-server-impl-…/src/main/resources/application.properties
2026-02-05 16:30:20 +00:00

209 lines
12 KiB
Properties

# ====================================================================
# AfterWork Server - Configuration Commune
# ====================================================================
# Ce fichier contient les configurations partagées par tous les environnements.
# Les configurations spécifiques sont dans :
# - application-dev.properties (développement)
# - application-prod.properties (production)
# - application-production.properties (production - profil "production")
#
# NOTE: Configuration datasource par défaut pour les tests
# Les profils dev/prod/production surchargent cette configuration
# ====================================================================
# Swagger/OpenAPI (commun à tous les environnements)
# ====================================================================
quarkus.swagger-ui.always-include=true
quarkus.swagger-ui.path=/q/swagger-ui
quarkus.smallrye-openapi.path=/openapi
# ====================================================================
# Super administrateur (créé au démarrage si absent)
# ====================================================================
# En production, définir via variables d'environnement (SUPER_ADMIN_EMAIL, SUPER_ADMIN_PASSWORD).
afterwork.super-admin.email=${SUPER_ADMIN_EMAIL:superadmin@afterwork.lions.dev}
afterwork.super-admin.password=${SUPER_ADMIN_PASSWORD:SuperAdmin2025!}
afterwork.super-admin.first-name=${SUPER_ADMIN_FIRST_NAME:Super}
afterwork.super-admin.last-name=${SUPER_ADMIN_LAST_NAME:Administrator}
# Clé secrète pour les opérations admin (header X-Super-Admin-Key sur PUT /users/{id}/role, etc.)
afterwork.super-admin.api-key=${SUPER_ADMIN_API_KEY:prod-super-admin-key}
# JWT : clé secrète pour signer les tokens au login (min. 32 octets pour HS256). En prod, définir via JWT_SECRET.
afterwork.jwt.secret=${JWT_SECRET:afterwork-jwt-secret-min-32-bytes-for-hs256!}
# Durée de vie du token (secondes, défaut 24h)
smallrye.jwt.new-token.lifespan=${JWT_LIFESPAN:86400}
smallrye.jwt.new-token.issuer=afterwork
# ====================================================================
# JWT Configuration (SmallRye JWT)
# ====================================================================
# Algorithme de signature/vérification (symétrique HS256)
smallrye.jwt.verify.algorithm=HS256
mp.jwt.verify.issuer=afterwork
# Clé secrète pour vérifier les tokens HS256 (même valeur que afterwork.jwt.secret)
# SmallRye JWT supporte les clés symétriques via cette propriété
smallrye.jwt.verify.key.location=META-INF/jwt-secret.key
# Activer la propagation du token pour @RolesAllowed
quarkus.smallrye-jwt.blocking-authentication=true
# ====================================================================
# Sécurité HTTP - Permissions par chemin
# ====================================================================
# Endpoints publics (sans authentification requise)
quarkus.http.auth.permission.public.paths=/afterwork/users/register,/afterwork/users/authenticate,/afterwork/users/forgot-password,/afterwork/users/reset-password,/afterwork/q/*,/afterwork/openapi,/afterwork/webhooks/*
quarkus.http.auth.permission.public.policy=permit
# Endpoints admin (SUPER_ADMIN ou ADMIN requis)
quarkus.http.auth.permission.admin.paths=/afterwork/admin/*
quarkus.http.auth.permission.admin.policy=authenticated
quarkus.http.auth.permission.admin.roles=SUPER_ADMIN,ADMIN
# Tous les autres endpoints requièrent une authentification
quarkus.http.auth.permission.authenticated.paths=/afterwork/*
quarkus.http.auth.permission.authenticated.policy=authenticated
# ====================================================================
# Wave API (paiement droits d'accès établissements)
# ====================================================================
wave.api.url=${WAVE_API_URL:https://api.wave.com}
wave.api.key=${WAVE_API_KEY:}
# Secret pour vérifier la signature des webhooks (X-Wave-Signature). Si vide, la vérification est désactivée.
wave.webhook.secret=${WAVE_WEBHOOK_SECRET:}
# ====================================================================
# Configuration Email (Quarkus Mailer)
# ====================================================================
# En production, configurer via variables d'environnement
quarkus.mailer.from=${MAILER_FROM:AfterWork <noreply@lions.dev>}
quarkus.mailer.host=${MAILER_HOST:smtp.gmail.com}
quarkus.mailer.port=${MAILER_PORT:587}
quarkus.mailer.start-tls=REQUIRED
quarkus.mailer.username=${MAILER_USERNAME:}
quarkus.mailer.password=${MAILER_PASSWORD:}
# Mode mock pour les tests (pas d'envoi réel)
quarkus.mailer.mock=${MAILER_MOCK:true}
# Configuration application pour les emails
afterwork.app.name=AfterWork
afterwork.app.url=${APP_URL:https://afterwork.lions.dev}
afterwork.email.from=${MAILER_FROM:noreply@lions.dev}
# ====================================================================
# HTTP (commun à tous les environnements)
# ====================================================================
quarkus.http.host=0.0.0.0
quarkus.http.port=8080
# Chemin de base de l'API (fixé au build). Profil dev surcharge via application-dev.properties si besoin.
quarkus.http.root-path=/afterwork
# ====================================================================
# Base de données (défaut = PRODUCTION pour que le JAR soit prêt pour la prod)
# ====================================================================
# Quarkus fixe db-kind, jdbc.driver et root-path au BUILD. Si on met H2 ici, le JAR
# ne pourra pas utiliser PostgreSQL en prod. Donc on met la config prod par défaut ;
# le profil dev surcharge avec PostgreSQL local (application-dev.properties).
quarkus.datasource.db-kind=postgresql
quarkus.datasource.jdbc.url=jdbc:postgresql://${DB_HOST:postgresql-service.postgresql.svc.cluster.local}:${DB_PORT:5432}/${DB_NAME:mic-after-work-server-impl-quarkus-main}
quarkus.datasource.username=${DB_USERNAME:lionsuser}
quarkus.datasource.password=${DB_PASSWORD}
quarkus.datasource.jdbc.driver=org.postgresql.Driver
quarkus.datasource.jdbc.max-size=20
quarkus.datasource.jdbc.min-size=5
quarkus.datasource.devservices.enabled=false
# Hibernate ORM (prod : Flyway gère le schéma ; dev/test surchargent)
quarkus.hibernate-orm.database.generation=none
quarkus.hibernate-orm.log.sql=false
# ====================================================================
# Upload de fichiers (commun à tous les environnements)
# ====================================================================
quarkus.http.body.uploads-directory=/tmp/uploads
# Limite augmentée pour éviter "Broken pipe" sur gros fichiers (ex. photos > 10M)
quarkus.http.limits.max-body-size=25M
# ====================================================================
# WebSockets Next (commun à tous les environnements)
# ====================================================================
# Note: WebSockets Next est activé par défaut si la dépendance est présente
# La propriété quarkus.websockets-next.server.enabled n'existe pas dans Quarkus 3.16
# WebSockets Next est automatiquement activé quand quarkus-websockets-next est dans les dépendances
# ====================================================================
# Kafka Configuration (commun à tous les environnements)
# ====================================================================
kafka.bootstrap.servers=${KAFKA_BOOTSTRAP_SERVERS:kafka-service.kafka.svc.cluster.local:9092}
# ====================================================================
# Kafka Topics - Outgoing (Services → Kafka)
# ====================================================================
# Note: Quarkus génère automatiquement les serializers Jackson basés sur le type Emitter<EventType>
# Topic: Notifications
# Note: Quarkus génère automatiquement les serializers Jackson basés sur le type Emitter<NotificationEvent>
mp.messaging.outgoing.notifications.connector=smallrye-kafka
mp.messaging.outgoing.notifications.topic=notifications
mp.messaging.outgoing.notifications.key.serializer=org.apache.kafka.common.serialization.StringSerializer
# value.serializer omis - Quarkus génère automatiquement depuis Emitter<NotificationEvent>
# Topic: Chat Messages
# Note: Quarkus génère automatiquement les serializers Jackson basés sur le type Emitter<ChatMessageEvent>
mp.messaging.outgoing.chat-messages.connector=smallrye-kafka
mp.messaging.outgoing.chat-messages.topic=chat.messages
mp.messaging.outgoing.chat-messages.key.serializer=org.apache.kafka.common.serialization.StringSerializer
# value.serializer omis - Quarkus génère automatiquement depuis Emitter<ChatMessageEvent>
# Topic: Reactions (likes, comments, shares)
# Note: Quarkus génère automatiquement les serializers Jackson basés sur le type Emitter<ReactionEvent>
mp.messaging.outgoing.reactions.connector=smallrye-kafka
mp.messaging.outgoing.reactions.topic=reactions
mp.messaging.outgoing.reactions.key.serializer=org.apache.kafka.common.serialization.StringSerializer
# value.serializer omis - Quarkus génère automatiquement depuis Emitter<ReactionEvent>
# Topic: Presence Updates
# Note: Quarkus génère automatiquement les serializers Jackson basés sur le type Emitter<PresenceEvent>
mp.messaging.outgoing.presence.connector=smallrye-kafka
mp.messaging.outgoing.presence.topic=presence.updates
mp.messaging.outgoing.presence.key.serializer=org.apache.kafka.common.serialization.StringSerializer
# value.serializer omis - Quarkus génère automatiquement depuis Emitter<PresenceEvent>
# ====================================================================
# Kafka Topics - Incoming (Kafka → WebSocket Bridge)
# ====================================================================
# Consommer depuis Kafka et router vers WebSocket pour notifications
# Note: Quarkus génère automatiquement les deserializers Jackson basés sur le type générique Message<NotificationEvent>
mp.messaging.incoming.kafka-notifications.connector=smallrye-kafka
mp.messaging.incoming.kafka-notifications.topic=notifications
mp.messaging.incoming.kafka-notifications.group.id=websocket-notifications-bridge
mp.messaging.incoming.kafka-notifications.key.deserializer=org.apache.kafka.common.serialization.StringDeserializer
# value.deserializer omis - Quarkus génère automatiquement depuis Message<NotificationEvent>
mp.messaging.incoming.kafka-notifications.enable.auto.commit=true
# Consommer depuis Kafka et router vers WebSocket pour chat
# Note: Quarkus génère automatiquement les deserializers Jackson basés sur le type générique Message<ChatMessageEvent>
mp.messaging.incoming.kafka-chat.connector=smallrye-kafka
mp.messaging.incoming.kafka-chat.topic=chat.messages
mp.messaging.incoming.kafka-chat.group.id=websocket-chat-bridge
mp.messaging.incoming.kafka-chat.key.deserializer=org.apache.kafka.common.serialization.StringDeserializer
# value.deserializer omis - Quarkus génère automatiquement depuis Message<ChatMessageEvent>
mp.messaging.incoming.kafka-chat.enable.auto.commit=true
# Consommer depuis Kafka et router vers WebSocket pour réactions
# Note: Quarkus génère automatiquement les deserializers Jackson basés sur le type générique Message<ReactionEvent>
mp.messaging.incoming.kafka-reactions.connector=smallrye-kafka
mp.messaging.incoming.kafka-reactions.topic=reactions
mp.messaging.incoming.kafka-reactions.group.id=websocket-reactions-bridge
mp.messaging.incoming.kafka-reactions.key.deserializer=org.apache.kafka.common.serialization.StringDeserializer
# value.deserializer omis - Quarkus génère automatiquement depuis Message<ReactionEvent>
mp.messaging.incoming.kafka-reactions.enable.auto.commit=true
# Consommer depuis Kafka et router vers WebSocket pour présence
# Note: Quarkus génère automatiquement les deserializers Jackson basés sur le type générique Message<PresenceEvent>
mp.messaging.incoming.kafka-presence.connector=smallrye-kafka
mp.messaging.incoming.kafka-presence.topic=presence.updates
mp.messaging.incoming.kafka-presence.group.id=websocket-presence-bridge
mp.messaging.incoming.kafka-presence.key.deserializer=org.apache.kafka.common.serialization.StringDeserializer
# value.deserializer omis - Quarkus génère automatiquement depuis Message<PresenceEvent>
mp.messaging.incoming.kafka-presence.enable.auto.commit=true