2025-07-17 13:09:24 +02:00
|
|
|
"""
|
|
|
|
|
Authentication service configuration
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
import os
|
2025-07-17 14:34:24 +02:00
|
|
|
from pydantic_settings import BaseSettings
|
2025-07-17 13:09:24 +02:00
|
|
|
|
|
|
|
|
class Settings(BaseSettings):
|
|
|
|
|
"""Application settings"""
|
|
|
|
|
|
|
|
|
|
# Basic settings
|
|
|
|
|
APP_NAME: str = "Authentication Service"
|
|
|
|
|
VERSION: str = "1.0.0"
|
|
|
|
|
DEBUG: bool = os.getenv("DEBUG", "False").lower() == "true"
|
|
|
|
|
LOG_LEVEL: str = os.getenv("LOG_LEVEL", "INFO")
|
|
|
|
|
|
|
|
|
|
# Database settings
|
|
|
|
|
DATABASE_URL: str = os.getenv("DATABASE_URL", "postgresql+asyncpg://auth_user:auth_pass123@auth-db:5432/auth_db")
|
|
|
|
|
|
|
|
|
|
# Redis settings
|
|
|
|
|
REDIS_URL: str = os.getenv("REDIS_URL", "redis://redis:6379/0")
|
|
|
|
|
|
|
|
|
|
# JWT settings
|
2025-07-18 17:14:30 +02:00
|
|
|
JWT_SECRET_KEY: str = os.getenv("JWT_SECRET_KEY", "your-super-secret-jwt-key-change-in-production")
|
2025-07-17 13:09:24 +02:00
|
|
|
JWT_ALGORITHM: str = os.getenv("JWT_ALGORITHM", "HS256")
|
|
|
|
|
JWT_ACCESS_TOKEN_EXPIRE_MINUTES: int = int(os.getenv("JWT_ACCESS_TOKEN_EXPIRE_MINUTES", "30"))
|
|
|
|
|
JWT_REFRESH_TOKEN_EXPIRE_DAYS: int = int(os.getenv("JWT_REFRESH_TOKEN_EXPIRE_DAYS", "7"))
|
|
|
|
|
|
|
|
|
|
# Password settings
|
|
|
|
|
PASSWORD_MIN_LENGTH: int = 8
|
|
|
|
|
PASSWORD_REQUIRE_UPPERCASE: bool = True
|
|
|
|
|
PASSWORD_REQUIRE_LOWERCASE: bool = True
|
|
|
|
|
PASSWORD_REQUIRE_NUMBERS: bool = True
|
|
|
|
|
PASSWORD_REQUIRE_SYMBOLS: bool = False
|
|
|
|
|
|
|
|
|
|
# Security settings
|
|
|
|
|
BCRYPT_ROUNDS: int = 12
|
|
|
|
|
MAX_LOGIN_ATTEMPTS: int = 5
|
|
|
|
|
LOCKOUT_DURATION_MINUTES: int = 30
|
|
|
|
|
|
|
|
|
|
# RabbitMQ settings
|
|
|
|
|
RABBITMQ_URL: str = os.getenv("RABBITMQ_URL", "amqp://bakery:forecast123@rabbitmq:5672/")
|
|
|
|
|
|
|
|
|
|
class Config:
|
|
|
|
|
env_file = ".env"
|
|
|
|
|
|
|
|
|
|
settings = Settings()
|