veza/veza-backend-api/internal/config/rate_limit.go
senke 73eca4f6ad feat: backend, stream server & infra improvements
Backend (Go):
- Config: CORS, RabbitMQ, rate limit, main config updates
- Routes: core, distribution, tracks routing changes
- Middleware: rate limiter, endpoint limiter, response cache hardening
- Handlers: distribution, search handler fixes
- Workers: job worker improvements
- Upload validator and logging config additions
- New migrations: products, orders, performance indexes
- Seed tooling and data

Stream Server (Rust):
- Audio processing, config, routes, simple stream server updates
- Dockerfile improvements

Infrastructure:
- docker-compose.yml updates
- nginx-rtmp config changes
- Makefile improvements (config, dev, high, infra)
- Root package.json and lock file updates
- .env.example updates

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 11:36:06 +01:00

59 lines
2.1 KiB
Go

package config
import (
"os"
)
// getDefaultRateLimitLimit retourne la limite globale par défaut selon l'environnement (A04)
func getDefaultRateLimitLimit(env string) int {
if env == EnvDevelopment || env == EnvTest {
return 1000 // Très permissif pour dev/tests
}
return 200 // Staging/prod
}
// getDefaultRegisterAttempts retourne le nombre d'inscriptions autorisées par heure (A04)
func getDefaultRegisterAttempts(env string) int {
if env == EnvDevelopment || env == EnvTest {
return 20 // Assoupli pour dev/tests
}
return 3 // Staging/prod
}
// getAuthRateLimitLoginAttempts retourne le nombre de tentatives de login autorisées
// Augmente les limites pour l'environnement de test/E2E
func getAuthRateLimitLoginAttempts(env string) int {
// Vérifier si on est en mode test/E2E
if env == "test" || env == "e2e" ||
os.Getenv("GO_ENV") == "test" ||
os.Getenv("GO_ENV") == "e2e" ||
os.Getenv("E2E_TEST") == "true" {
// Limite élevée pour les tests (100 tentatives)
return getEnvInt("AUTH_RATE_LIMIT_LOGIN_ATTEMPTS", 100)
}
// Limite normale en production (5 tentatives)
return getEnvInt("AUTH_RATE_LIMIT_LOGIN_ATTEMPTS", 5)
}
// getAuthRateLimitLoginWindow retourne la fenêtre de temps pour les tentatives de login
func getAuthRateLimitLoginWindow(env string) int {
// En mode test, utiliser 1 minute (comme en production)
// La fenêtre reste la même, seule la limite de tentatives change
return getEnvInt("AUTH_RATE_LIMIT_LOGIN_WINDOW", 1)
}
// getDefaultRateLimitIPPerHour returns default hourly limit for non-auth (TASK-SEC-003)
func getDefaultRateLimitIPPerHour(env string) int {
if env == EnvDevelopment || env == EnvTest {
return getEnvInt("RATE_LIMIT_IP_PER_HOUR", 5000) // Very relaxed in dev
}
return getEnvInt("RATE_LIMIT_IP_PER_HOUR", 100) // 100 req/h in prod
}
// getDefaultRateLimitUserPerHour returns default hourly limit for auth (TASK-SEC-003)
func getDefaultRateLimitUserPerHour(env string) int {
if env == EnvDevelopment || env == EnvTest {
return getEnvInt("RATE_LIMIT_USER_PER_HOUR", 2000) // More relaxed in dev
}
return getEnvInt("RATE_LIMIT_USER_PER_HOUR", 1000) // 1000 req/h in prod
}