209 lines
12 KiB
Properties
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
|