45 lines
1.2 KiB
Python
45 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)
|
||
|
|
|
||
|
|
|
||
|
|
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
|
||
|
|
}
|