""" Configuration management for moderation backend """ import os from pathlib import Path from pydantic_settings import BaseSettings from dotenv import load_dotenv # Load .env from project root root_env_path = Path(__file__).parent.parent.parent / '.env' if root_env_path.exists(): load_dotenv(dotenv_path=root_env_path) print(f"✅ Loaded .env from: {root_env_path}") else: print(f"⚠️ .env file not found at: {root_env_path}") class Settings(BaseSettings): """Application settings""" # Server MODERATION_PORT: int = int(os.getenv('MODERATION_PORT', '3001')) NODE_ENV: str = os.getenv('NODE_ENV', 'development') # MongoDB MONGODB_URI: str = os.getenv('MONGODB_URI', 'mongodb://localhost:27017/nakama') # JWT JWT_ACCESS_SECRET: str = os.getenv('JWT_ACCESS_SECRET', 'nakama_access_secret_change_me') JWT_REFRESH_SECRET: str = os.getenv('JWT_REFRESH_SECRET', 'nakama_refresh_secret_change_me') JWT_ACCESS_EXPIRES_IN: int = int(os.getenv('JWT_ACCESS_EXPIRES_IN', '300')) JWT_REFRESH_EXPIRES_IN: int = int(os.getenv('JWT_REFRESH_EXPIRES_IN', '604800')) JWT_ACCESS_COOKIE_NAME: str = os.getenv('JWT_ACCESS_COOKIE_NAME', 'nakama_access_token') JWT_REFRESH_COOKIE_NAME: str = os.getenv('JWT_REFRESH_COOKIE_NAME', 'nakama_refresh_token') # Telegram TELEGRAM_BOT_TOKEN: str = os.getenv('TELEGRAM_BOT_TOKEN', '') MODERATION_BOT_TOKEN: str = os.getenv('MODERATION_BOT_TOKEN', '') MODERATION_BOT_USERNAME: str = os.getenv('MODERATION_BOT_USERNAME', '') MODERATION_OWNER_USERNAMES: str = os.getenv('MODERATION_OWNER_USERNAMES', 'glpshchn00') MODERATION_CHANNEL_USERNAME: str = os.getenv('MODERATION_CHANNEL_USERNAME', '@reichenbfurry') # Frontend FRONTEND_URL: str = os.getenv('FRONTEND_URL', 'http://localhost:5173') MODERATION_CORS_ORIGIN: str = os.getenv('MODERATION_CORS_ORIGIN', '*') # Email EMAIL_PROVIDER: str = os.getenv('EMAIL_PROVIDER', 'yandex') EMAIL_FROM: str = os.getenv('EMAIL_FROM', 'noreply@nakama.guru') OWNER_EMAIL: str = os.getenv('OWNER_EMAIL', 'aaem9848@gmail.com') # AWS SES / Yandex Cloud Postbox AWS_SES_ACCESS_KEY_ID: str = os.getenv('AWS_SES_ACCESS_KEY_ID', '') AWS_SES_SECRET_ACCESS_KEY: str = os.getenv('AWS_SES_SECRET_ACCESS_KEY', '') AWS_SES_REGION: str = os.getenv('AWS_SES_REGION', 'us-east-1') AWS_SES_ENDPOINT_URL: str = os.getenv('AWS_SES_ENDPOINT_URL', '') # Yandex SMTP YANDEX_SMTP_HOST: str = os.getenv('YANDEX_SMTP_HOST', 'smtp.yandex.ru') YANDEX_SMTP_PORT: int = int(os.getenv('YANDEX_SMTP_PORT', '465')) YANDEX_SMTP_USER: str = os.getenv('YANDEX_SMTP_USER', '') YANDEX_SMTP_PASSWORD: str = os.getenv('YANDEX_SMTP_PASSWORD', '') YANDEX_SMTP_SECURE: bool = os.getenv('YANDEX_SMTP_SECURE', 'true').lower() == 'true' # MinIO MINIO_ENABLED: bool = os.getenv('MINIO_ENABLED', 'false').lower() == 'true' MINIO_ENDPOINT: str = os.getenv('MINIO_ENDPOINT', 'localhost') MINIO_PORT: int = int(os.getenv('MINIO_PORT', '9000')) MINIO_USE_SSL: bool = os.getenv('MINIO_USE_SSL', 'false').lower() == 'true' MINIO_ACCESS_KEY: str = os.getenv('MINIO_ACCESS_KEY', 'minioadmin') MINIO_SECRET_KEY: str = os.getenv('MINIO_SECRET_KEY', 'minioadmin') MINIO_BUCKET: str = os.getenv('MINIO_BUCKET', 'nakama-media') @property def IS_DEVELOPMENT(self) -> bool: return self.NODE_ENV == 'development' @property def IS_PRODUCTION(self) -> bool: return self.NODE_ENV == 'production' @property def OWNER_USERNAMES_LIST(self) -> list[str]: return [u.strip().lower() for u in self.MODERATION_OWNER_USERNAMES.split(',') if u.strip()] class Config: case_sensitive = True settings = Settings() # Logging config def print_config(): """Print configuration on startup""" print("\n📋 Конфигурация:") print(f" Environment: {settings.NODE_ENV}") print(f" Port: {settings.MODERATION_PORT}") print(f" MongoDB: {settings.MONGODB_URI.split('@')[-1] if '@' in settings.MONGODB_URI else settings.MONGODB_URI}") print(f" Email Provider: {settings.EMAIL_PROVIDER}") print(f" MinIO: {'Enabled' if settings.MINIO_ENABLED else 'Disabled'}") print(f" CORS Origin: {settings.MODERATION_CORS_ORIGIN}") print() if __name__ == "__main__": print_config()