initial
This commit is contained in:
84
backend/config.py
Normal file
84
backend/config.py
Normal file
@@ -0,0 +1,84 @@
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
# Base directory
|
||||
BASE_DIR = Path(__file__).parent.parent
|
||||
|
||||
|
||||
class Config:
|
||||
"""Base configuration"""
|
||||
SECRET_KEY = os.environ.get('SECRET_KEY') or 'dev-secret-key-change-in-production'
|
||||
|
||||
# Database configuration
|
||||
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URI') or \
|
||||
f'sqlite:///{(BASE_DIR / "backend" / "instance" / "trivia.db").absolute()}'
|
||||
SQLALCHEMY_TRACK_MODIFICATIONS = False
|
||||
|
||||
# File upload configuration
|
||||
UPLOAD_FOLDER = BASE_DIR / "backend" / "static" / "images"
|
||||
MAX_CONTENT_LENGTH = 5 * 1024 * 1024 # 5MB max file size
|
||||
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'}
|
||||
|
||||
# Audio upload configuration
|
||||
AUDIO_FOLDER = BASE_DIR / "backend" / "static" / "audio"
|
||||
ALLOWED_AUDIO_EXTENSIONS = {'mp3', 'm4a', 'aac', 'wav'}
|
||||
MAX_AUDIO_LENGTH = 300 # 5 minutes in seconds
|
||||
MAX_AUDIO_SIZE = 50 * 1024 * 1024 # 50MB
|
||||
|
||||
# Celery configuration
|
||||
CELERY_BROKER_URL = os.environ.get('CELERY_BROKER_URL', 'redis://localhost:6379/0')
|
||||
CELERY_RESULT_BACKEND = os.environ.get('CELERY_RESULT_BACKEND', 'redis://localhost:6379/0')
|
||||
CELERY_TASK_TRACK_STARTED = True
|
||||
CELERY_TASK_TIME_LIMIT = 600 # 10 minutes max per task
|
||||
|
||||
# yt-dlp configuration
|
||||
YTDLP_FORMAT = 'bestaudio/best'
|
||||
YTDLP_POSTPROCESSOR = 'mp3'
|
||||
YTDLP_QUALITY = '192' # kbps
|
||||
|
||||
# CORS configuration
|
||||
CORS_ORIGINS = os.environ.get('CORS_ORIGINS', '*').split(',')
|
||||
CORS_SUPPORTS_CREDENTIALS = True
|
||||
|
||||
# OIDC/Authelia configuration
|
||||
OIDC_ISSUER = os.environ.get('OIDC_ISSUER')
|
||||
OIDC_CLIENT_ID = os.environ.get('OIDC_CLIENT_ID', 'trivia-app')
|
||||
OIDC_CLIENT_SECRET = os.environ.get('OIDC_CLIENT_SECRET')
|
||||
OIDC_REDIRECT_URI = os.environ.get('OIDC_REDIRECT_URI', 'http://localhost:5001/api/auth/callback')
|
||||
OIDC_AUDIENCE = os.environ.get('OIDC_AUDIENCE', OIDC_CLIENT_ID)
|
||||
FRONTEND_URL = os.environ.get('FRONTEND_URL', 'http://localhost:3000')
|
||||
OIDC_JWKS_URI = os.environ.get('OIDC_JWKS_URI') # Optional, auto-fetched if not set
|
||||
|
||||
# Cookie security
|
||||
SESSION_COOKIE_SECURE = os.environ.get('SESSION_COOKIE_SECURE', 'false').lower() == 'true'
|
||||
SESSION_COOKIE_HTTPONLY = True
|
||||
SESSION_COOKIE_SAMESITE = 'Strict'
|
||||
|
||||
|
||||
class DevelopmentConfig(Config):
|
||||
"""Development configuration"""
|
||||
DEBUG = True
|
||||
FLASK_ENV = 'development'
|
||||
|
||||
|
||||
class ProductionConfig(Config):
|
||||
"""Production configuration"""
|
||||
DEBUG = False
|
||||
FLASK_ENV = 'production'
|
||||
SECRET_KEY = os.environ.get('SECRET_KEY') # Must be set in production
|
||||
|
||||
|
||||
class TestConfig(Config):
|
||||
"""Test configuration"""
|
||||
TESTING = True
|
||||
SQLALCHEMY_DATABASE_URI = 'sqlite:///:memory:'
|
||||
WTF_CSRF_ENABLED = False
|
||||
|
||||
|
||||
# Configuration dictionary
|
||||
config = {
|
||||
'development': DevelopmentConfig,
|
||||
'production': ProductionConfig,
|
||||
'test': TestConfig,
|
||||
'default': DevelopmentConfig
|
||||
}
|
||||
Reference in New Issue
Block a user