nakama/moderation/backend-py/config.py

134 lines
5.8 KiB
Python
Raw Normal View History

2025-12-14 23:45:41 +00:00
"""
Configuration management for moderation backend
"""
import os
from pathlib import Path
from pydantic_settings import BaseSettings
from dotenv import load_dotenv
2025-12-14 23:51:27 +00:00
# Helper to clean env values (remove comments)
def get_env_clean(key: str, default: str = '') -> str:
"""Get environment variable and clean it from comments"""
value = os.getenv(key, default)
if value and '#' in value:
# Remove inline comments
value = value.split('#')[0].strip()
return value
# Load .env from project root (or /app/.env in Docker)
2025-12-14 23:45:41 +00:00
root_env_path = Path(__file__).parent.parent.parent / '.env'
2025-12-14 23:51:27 +00:00
docker_env_path = Path('/app/.env')
if docker_env_path.exists():
load_dotenv(dotenv_path=docker_env_path, override=False)
print(f"✅ Loaded .env from: {docker_env_path} (Docker)")
elif root_env_path.exists():
load_dotenv(dotenv_path=root_env_path, override=False)
2025-12-14 23:45:41 +00:00
print(f"✅ Loaded .env from: {root_env_path}")
else:
2025-12-14 23:51:27 +00:00
print(f"⚠️ .env file not found at: {root_env_path} or {docker_env_path}")
2025-12-14 23:45:41 +00:00
2025-12-15 00:47:02 +00:00
# Debug: Print email-related env vars
print(f"[Config] 🔍 Email настройки из .env:")
print(f"[Config] EMAIL_PROVIDER (raw): '{os.getenv('EMAIL_PROVIDER', 'NOT SET')}'")
print(f"[Config] EMAIL_FROM: '{os.getenv('EMAIL_FROM', 'NOT SET')}'")
print(f"[Config] AWS_SES_ACCESS_KEY_ID: {'SET' if os.getenv('AWS_SES_ACCESS_KEY_ID') else 'NOT SET'}")
print(f"[Config] AWS_SES_SECRET_ACCESS_KEY: {'SET' if os.getenv('AWS_SES_SECRET_ACCESS_KEY') else 'NOT SET'}")
print(f"[Config] AWS_SES_REGION: '{os.getenv('AWS_SES_REGION', 'NOT SET')}'")
print(f"[Config] AWS_SES_ENDPOINT_URL: '{os.getenv('AWS_SES_ENDPOINT_URL', 'NOT SET')}'")
print(f"[Config] YANDEX_SMTP_USER: {'SET' if os.getenv('YANDEX_SMTP_USER') else 'NOT SET'}")
print(f"[Config] YANDEX_SMTP_PASSWORD: {'SET' if os.getenv('YANDEX_SMTP_PASSWORD') else 'NOT SET'}")
2025-12-14 23:45:41 +00:00
class Settings(BaseSettings):
"""Application settings"""
# Server
2025-12-14 23:51:27 +00:00
MODERATION_PORT: int = int(get_env_clean('MODERATION_PORT', '3001'))
NODE_ENV: str = get_env_clean('NODE_ENV', 'development')
2025-12-14 23:45:41 +00:00
# MongoDB
2025-12-14 23:51:27 +00:00
MONGODB_URI: str = get_env_clean('MONGODB_URI', 'mongodb://localhost:27017/nakama')
2025-12-14 23:45:41 +00:00
# JWT
2025-12-14 23:51:27 +00:00
JWT_ACCESS_SECRET: str = get_env_clean('JWT_ACCESS_SECRET', 'nakama_access_secret_change_me')
JWT_REFRESH_SECRET: str = get_env_clean('JWT_REFRESH_SECRET', 'nakama_refresh_secret_change_me')
JWT_ACCESS_EXPIRES_IN: int = int(get_env_clean('JWT_ACCESS_EXPIRES_IN', '300'))
JWT_REFRESH_EXPIRES_IN: int = int(get_env_clean('JWT_REFRESH_EXPIRES_IN', '604800'))
JWT_ACCESS_COOKIE_NAME: str = get_env_clean('JWT_ACCESS_COOKIE_NAME', 'nakama_access_token')
JWT_REFRESH_COOKIE_NAME: str = get_env_clean('JWT_REFRESH_COOKIE_NAME', 'nakama_refresh_token')
2025-12-14 23:45:41 +00:00
# Telegram
2025-12-14 23:51:27 +00:00
TELEGRAM_BOT_TOKEN: str = get_env_clean('TELEGRAM_BOT_TOKEN', '')
MODERATION_BOT_TOKEN: str = get_env_clean('MODERATION_BOT_TOKEN', '')
MODERATION_BOT_USERNAME: str = get_env_clean('MODERATION_BOT_USERNAME', '')
MODERATION_OWNER_USERNAMES: str = get_env_clean('MODERATION_OWNER_USERNAMES', 'glpshchn00')
MODERATION_CHANNEL_USERNAME: str = get_env_clean('MODERATION_CHANNEL_USERNAME', '@reichenbfurry')
2025-12-14 23:45:41 +00:00
# Frontend
2025-12-14 23:51:27 +00:00
FRONTEND_URL: str = get_env_clean('FRONTEND_URL', 'http://localhost:5173')
MODERATION_CORS_ORIGIN: str = get_env_clean('MODERATION_CORS_ORIGIN', '*')
2025-12-14 23:45:41 +00:00
# Email
2025-12-14 23:51:27 +00:00
EMAIL_PROVIDER: str = get_env_clean('EMAIL_PROVIDER', 'yandex')
EMAIL_FROM: str = get_env_clean('EMAIL_FROM', 'noreply@nakama.guru')
OWNER_EMAIL: str = get_env_clean('OWNER_EMAIL', 'aaem9848@gmail.com')
2025-12-14 23:45:41 +00:00
# AWS SES / Yandex Cloud Postbox
2025-12-14 23:51:27 +00:00
AWS_SES_ACCESS_KEY_ID: str = get_env_clean('AWS_SES_ACCESS_KEY_ID', '')
AWS_SES_SECRET_ACCESS_KEY: str = get_env_clean('AWS_SES_SECRET_ACCESS_KEY', '')
AWS_SES_REGION: str = get_env_clean('AWS_SES_REGION', 'us-east-1')
AWS_SES_ENDPOINT_URL: str = get_env_clean('AWS_SES_ENDPOINT_URL', '')
2025-12-14 23:45:41 +00:00
# Yandex SMTP
2025-12-14 23:51:27 +00:00
YANDEX_SMTP_HOST: str = get_env_clean('YANDEX_SMTP_HOST', 'smtp.yandex.ru')
YANDEX_SMTP_PORT: int = int(get_env_clean('YANDEX_SMTP_PORT', '465'))
YANDEX_SMTP_USER: str = get_env_clean('YANDEX_SMTP_USER', '')
YANDEX_SMTP_PASSWORD: str = get_env_clean('YANDEX_SMTP_PASSWORD', '')
YANDEX_SMTP_SECURE: bool = get_env_clean('YANDEX_SMTP_SECURE', 'true').lower() == 'true'
2025-12-14 23:45:41 +00:00
# MinIO
2025-12-14 23:51:27 +00:00
MINIO_ENABLED: bool = get_env_clean('MINIO_ENABLED', 'false').lower() == 'true'
MINIO_ENDPOINT: str = get_env_clean('MINIO_ENDPOINT', 'localhost')
MINIO_PORT: int = int(get_env_clean('MINIO_PORT', '9000'))
MINIO_USE_SSL: bool = get_env_clean('MINIO_USE_SSL', 'false').lower() == 'true'
MINIO_ACCESS_KEY: str = get_env_clean('MINIO_ACCESS_KEY', 'minioadmin')
MINIO_SECRET_KEY: str = get_env_clean('MINIO_SECRET_KEY', 'minioadmin')
MINIO_BUCKET: str = get_env_clean('MINIO_BUCKET', 'nakama-media')
2025-12-14 23:45:41 +00:00
@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()