# ==================================================================== # 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 } 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 # Topic: Notifications # Note: Quarkus génère automatiquement les serializers Jackson basés sur le type Emitter 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 # Topic: Chat Messages # Note: Quarkus génère automatiquement les serializers Jackson basés sur le type Emitter 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 # Topic: Reactions (likes, comments, shares) # Note: Quarkus génère automatiquement les serializers Jackson basés sur le type Emitter 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 # Topic: Presence Updates # Note: Quarkus génère automatiquement les serializers Jackson basés sur le type Emitter 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 # ==================================================================== # 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 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 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 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 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 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 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 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 mp.messaging.incoming.kafka-presence.enable.auto.commit=true