import os from pathlib import Path from dotenv import load_dotenv BASE_DIR = Path(__file__).resolve().parent load_dotenv(BASE_DIR / ".env") class Config: SECRET_KEY = os.environ.get("SECRET_KEY") or "dev-secret-key-change-in-production" BASE_URL = os.environ.get("BASE_URL") or None # Database SQLALCHEMY_DATABASE_URI = os.environ.get("DATABASE_URL") or f"sqlite:///{BASE_DIR / 'instance' / 'inviteme.db'}" SQLALCHEMY_TRACK_MODIFICATIONS = False # Uploads UPLOAD_FOLDER = BASE_DIR / "app" / "static" / "uploads" PHOTO_FOLDER = UPLOAD_FOLDER / "photos" QR_FOLDER = UPLOAD_FOLDER / "qrcodes" LOGO_FOLDER = UPLOAD_FOLDER / "logos" MAX_CONTENT_LENGTH = 16 * 1024 * 1024 # 16 MB # Email (SMTP) MAIL_SERVER = os.environ.get("MAIL_SERVER") or "smtp.yandex.ru" MAIL_PORT = int(os.environ.get("MAIL_PORT") or 465) MAIL_USE_SSL = os.environ.get("MAIL_USE_SSL", "true").lower() in ["true", "1", "yes"] MAIL_USERNAME = os.environ.get("MAIL_USERNAME") or "" MAIL_PASSWORD = os.environ.get("MAIL_PASSWORD") or "" MAIL_DEFAULT_SENDER = os.environ.get("MAIL_DEFAULT_SENDER") or MAIL_USERNAME # Admin credentials ADMIN_USERNAME = os.environ.get("ADMIN_USERNAME") or "admin" ADMIN_PASSWORD = os.environ.get("ADMIN_PASSWORD") or "admin" # Staff credentials (for check-in devices) STAFF_USERNAME = os.environ.get("STAFF_USERNAME") or "staff" STAFF_PASSWORD = os.environ.get("STAFF_PASSWORD") or "staff" # Default event name for migrating existing guests DEFAULT_EVENT_NAME = os.environ.get("DEFAULT_EVENT_NAME") or "Архивное мероприятие" # Local timezone for display (e.g. Europe/Moscow) TIMEZONE = os.environ.get("TIMEZONE") or "Europe/Moscow" # Session security (HTTPS is required for these flags) SESSION_COOKIE_SECURE = os.environ.get("SESSION_COOKIE_SECURE", "true").lower() in ["true", "1", "yes"] SESSION_COOKIE_HTTPONLY = True SESSION_COOKIE_SAMESITE = "Lax" PERMANENT_SESSION_LIFETIME = int(os.environ.get("PERMANENT_SESSION_LIFETIME", "28800")) # 8 часов # CSRF protection WTF_CSRF_ENABLED = True WTF_CSRF_TIME_LIMIT = 3600 # Rate limiting RATELIMIT_STORAGE_URI = os.environ.get("RATELIMIT_STORAGE_URI") or "memory://" RATELIMIT_STRATEGY = "fixed-window"