diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 6bb9088f8..480869b00 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -164,6 +164,7 @@ services: - HYPERSWITCH_API_KEY=${HYPERSWITCH_API_KEY:-} - HYPERSWITCH_WEBHOOK_SECRET=${HYPERSWITCH_WEBHOOK_SECRET:-} - HYPERSWITCH_ENABLED=${HYPERSWITCH_ENABLED:-false} + - HYPERSWITCH_LIVE_MODE=${HYPERSWITCH_LIVE_MODE:-false} - CHECKOUT_SUCCESS_URL=${CHECKOUT_SUCCESS_URL:-https://veza.fr/purchases} - ENABLE_CLAMAV=true - CLAMAV_REQUIRED=true @@ -216,6 +217,7 @@ services: - HYPERSWITCH_API_KEY=${HYPERSWITCH_API_KEY:-} - HYPERSWITCH_WEBHOOK_SECRET=${HYPERSWITCH_WEBHOOK_SECRET:-} - HYPERSWITCH_ENABLED=${HYPERSWITCH_ENABLED:-false} + - HYPERSWITCH_LIVE_MODE=${HYPERSWITCH_LIVE_MODE:-false} - CHECKOUT_SUCCESS_URL=${CHECKOUT_SUCCESS_URL:-https://veza.fr/purchases} - ENABLE_CLAMAV=true - CLAMAV_REQUIRED=true diff --git a/veza-backend-api/internal/api/routes_marketplace.go b/veza-backend-api/internal/api/routes_marketplace.go index a53e66b17..f4eeb7c89 100644 --- a/veza-backend-api/internal/api/routes_marketplace.go +++ b/veza-backend-api/internal/api/routes_marketplace.go @@ -3,7 +3,9 @@ package api import ( "github.com/gin-gonic/gin" "github.com/google/uuid" + "go.uber.org/zap" + "veza-backend-api/internal/config" "veza-backend-api/internal/core/marketplace" "veza-backend-api/internal/handlers" "veza-backend-api/internal/services" @@ -20,6 +22,10 @@ func (r *APIRouter) setupMarketplaceRoutes(router *gin.RouterGroup) { storageService := services.NewTrackStorageService(uploadDir, false, r.logger) opts := []marketplace.ServiceOption{} if r.config.HyperswitchEnabled && r.config.HyperswitchAPIKey != "" && r.config.HyperswitchURL != "" { + if r.config.SentryEnvironment == config.EnvProduction && !r.config.HyperswitchLiveMode { + r.logger.Warn("Hyperswitch is enabled in production but HYPERSWITCH_LIVE_MODE=false; using test keys", + zap.String("hint", "Set HYPERSWITCH_LIVE_MODE=true and use live API keys for production payments")) + } hsClient := hyperswitch.NewClient(r.config.HyperswitchURL, r.config.HyperswitchAPIKey) hsProvider := hyperswitch.NewProvider(hsClient) opts = append(opts, diff --git a/veza-backend-api/internal/config/config.go b/veza-backend-api/internal/config/config.go index 703b2c366..ea2032fcb 100644 --- a/veza-backend-api/internal/config/config.go +++ b/veza-backend-api/internal/config/config.go @@ -134,11 +134,12 @@ type Config struct { CookiePath string // Cookie path (généralement "/") // Hyperswitch Payment (Phase 2) - HyperswitchEnabled bool // Enable Hyperswitch payments (default false in dev) - HyperswitchURL string // Hyperswitch router URL (e.g. http://hyperswitch:8080) - HyperswitchAPIKey string // API key for Hyperswitch + HyperswitchEnabled bool // Enable Hyperswitch payments (default false in dev) + HyperswitchLiveMode bool // Use live API keys (HYPERSWITCH_LIVE_MODE). If false in production, test keys are used. + HyperswitchURL string // Hyperswitch router URL (e.g. http://hyperswitch:8080) + HyperswitchAPIKey string // API key for Hyperswitch HyperswitchWebhookSecret string // Webhook signature verification secret - CheckoutSuccessURL string // URL to redirect after successful payment (e.g. /checkout/success) + CheckoutSuccessURL string // URL to redirect after successful payment (e.g. /checkout/success) // Email & Jobs EmailSender *email.SMTPEmailSender @@ -344,11 +345,12 @@ func NewConfig() (*Config, error) { CookiePath: getEnv("COOKIE_PATH", "/"), // Hyperswitch Payment Configuration - HyperswitchEnabled: getEnvBool("HYPERSWITCH_ENABLED", false), - HyperswitchURL: getEnv("HYPERSWITCH_URL", "http://localhost:18081"), - HyperswitchAPIKey: getEnv("HYPERSWITCH_API_KEY", ""), + HyperswitchEnabled: getEnvBool("HYPERSWITCH_ENABLED", false), + HyperswitchLiveMode: getEnvBool("HYPERSWITCH_LIVE_MODE", false), + HyperswitchURL: getEnv("HYPERSWITCH_URL", "http://localhost:18081"), + HyperswitchAPIKey: getEnv("HYPERSWITCH_API_KEY", ""), HyperswitchWebhookSecret: getEnv("HYPERSWITCH_WEBHOOK_SECRET", ""), - CheckoutSuccessURL: getEnv("CHECKOUT_SUCCESS_URL", ""), + CheckoutSuccessURL: getEnv("CHECKOUT_SUCCESS_URL", ""), // Log Files Configuration // En développement, utiliser ./logs si /var/log n'est pas accessible