51 lines
2.0 KiB
Python
51 lines
2.0 KiB
Python
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
|
|
|
|
# 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"
|