|
|
| import os
|
| import secrets
|
| import logging
|
| from datetime import timedelta
|
|
|
| logger = logging.getLogger(__name__)
|
|
|
| class Config:
|
| """Base configuration class"""
|
|
|
| SECRET_KEY = os.getenv("FLASK_KEY") or os.getenv("SECRET_KEY")
|
|
|
|
|
|
|
| if not SECRET_KEY:
|
| SECRET_KEY = secrets.token_urlsafe(64)
|
| _AUTO_GENERATED_SECRET = True
|
| else:
|
| _AUTO_GENERATED_SECRET = False
|
|
|
| PERMANENT_SESSION_LIFETIME = timedelta(days=30)
|
|
|
|
|
| CLOUDFLARE_SECRET = os.getenv("CLOUDFLARE_SECRET")
|
| CF_SITE_KEY = os.getenv("CF_SITE_KEY")
|
|
|
|
|
| ANILIST_CLIENT_ID = os.getenv("ANILIST_CLIENT_ID")
|
| ANILIST_CLIENT_SECRET = os.getenv("ANILIST_CLIENT_SECRET")
|
| ANILIST_REDIRECT_URI = os.getenv("ANILIST_REDIRECT_URI")
|
|
|
|
|
| MAL_CLIENT_ID = os.getenv("MAL_CLIENT_ID", "").strip()
|
| MAL_CLIENT_SECRET = os.getenv("MAL_CLIENT_SECRET", "").strip()
|
| MAL_REDIRECT_URI = os.getenv("MAL_REDIRECT_URI", "").strip()
|
|
|
|
|
| DEBUG = os.getenv("FLASK_ENV") == "development"
|
|
|
|
|
| GMAIL_USER = os.getenv("GMAIL_USER")
|
| GMAIL_APP_PASSWORD = os.getenv("GMAIL_APP_PASSWORD")
|
|
|
|
|
| ADMIN_USERNAMES = os.getenv("ADMIN_USERNAMES", "mwask")
|
|
|
| @classmethod
|
| def validate(cls):
|
| """Validate that required environment variables are set."""
|
| missing = []
|
|
|
|
|
| if not cls.ANILIST_CLIENT_ID:
|
| missing.append("ANILIST_CLIENT_ID")
|
| if not cls.ANILIST_CLIENT_SECRET:
|
| missing.append("ANILIST_CLIENT_SECRET")
|
| if not cls.ANILIST_REDIRECT_URI:
|
| missing.append("ANILIST_REDIRECT_URI")
|
|
|
| if missing:
|
| logger.warning(f"Missing environment variables: {', '.join(missing)}")
|
| logger.warning("AniList OAuth will not work without these variables.")
|
| else:
|
| logger.info("All required AniList OAuth environment variables are set.")
|
| logger.info(f"AniList Redirect URI: {cls.ANILIST_REDIRECT_URI}")
|
|
|
|
|
| class DevelopmentConfig(Config):
|
| DEBUG = True
|
|
|
|
|
| class ProductionConfig(Config):
|
| DEBUG = False
|
|
|
|
|
| config = {
|
| "development": DevelopmentConfig,
|
| "production": ProductionConfig,
|
| "default": DevelopmentConfig,
|
| }
|
|
|