43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
|
|
import os
|
||
|
|
from datetime import timedelta
|
||
|
|
|
||
|
|
|
||
|
|
class Config:
|
||
|
|
"""Base configuration"""
|
||
|
|
SECRET_KEY = os.environ.get("SECRET_KEY") or "dev-secret-key-change-in-production"
|
||
|
|
SQLALCHEMY_TRACK_MODIFICATIONS = False
|
||
|
|
JWT_SECRET_KEY = os.environ.get("JWT_SECRET_KEY") or "jwt-secret-key-change-in-production"
|
||
|
|
JWT_ACCESS_TOKEN_EXPIRES = timedelta(hours=1)
|
||
|
|
JWT_REFRESH_TOKEN_EXPIRES = timedelta(days=30)
|
||
|
|
CORS_ORIGINS = os.environ.get("CORS_ORIGINS", "*")
|
||
|
|
|
||
|
|
|
||
|
|
class DevelopmentConfig(Config):
|
||
|
|
"""Development configuration"""
|
||
|
|
DEBUG = True
|
||
|
|
SQLALCHEMY_DATABASE_URI = os.environ.get("DEV_DATABASE_URL") or "sqlite:///dev.db"
|
||
|
|
|
||
|
|
|
||
|
|
class TestingConfig(Config):
|
||
|
|
"""Testing configuration"""
|
||
|
|
TESTING = True
|
||
|
|
SQLALCHEMY_DATABASE_URI = os.environ.get("TEST_DATABASE_URL") or "sqlite:///test.db"
|
||
|
|
WTF_CSRF_ENABLED = False
|
||
|
|
|
||
|
|
|
||
|
|
class ProductionConfig(Config):
|
||
|
|
"""Production configuration"""
|
||
|
|
DEBUG = False
|
||
|
|
SQLALCHEMY_DATABASE_URI = os.environ.get("DATABASE_URL") or "postgresql://user:password@localhost/proddb"
|
||
|
|
|
||
|
|
# Security headers
|
||
|
|
SESSION_COOKIE_SECURE = True
|
||
|
|
SESSION_COOKIE_HTTPONLY = True
|
||
|
|
SESSION_COOKIE_SAMESITE = "Lax"
|
||
|
|
|
||
|
|
|
||
|
|
config_by_name = {
|
||
|
|
"dev": DevelopmentConfig,
|
||
|
|
"test": TestingConfig,
|
||
|
|
"prod": ProductionConfig
|
||
|
|
}
|