| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- import os
- from datetime import timedelta
- class Config:
- """Base configuration"""
- SECRET_KEY = os.environ.get('SECRET_KEY', 'dev-secret-key-change-in-production')
-
- # JWT Configuration
- JWT_SECRET_KEY = os.environ.get('JWT_SECRET_KEY', 'jwt-secret-key-change-in-production')
- JWT_ACCESS_TOKEN_EXPIRES = timedelta(days=2)
- JWT_REFRESH_TOKEN_EXPIRES = timedelta(days=7)
-
- # SQLAlchemy Configuration
- SQLALCHEMY_TRACK_MODIFICATIONS = False
-
- # 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/1')
-
- # File Storage
- UPLOAD_FOLDER = os.environ.get('UPLOAD_FOLDER', 'uploads')
- REPORTS_FOLDER = os.environ.get('REPORTS_FOLDER', 'reports')
- SCAN_DATA_FOLDER = os.environ.get('SCAN_DATA_FOLDER', 'uploads/scan_data')
- MAX_CONTENT_LENGTH = 50 * 1024 * 1024 # 50MB max file size for CloudShell scan uploads
-
- # Encryption key for sensitive data
- ENCRYPTION_KEY = os.environ.get('ENCRYPTION_KEY', 'encryption-key-change-in-production')
- class DevelopmentConfig(Config):
- """Development configuration"""
- DEBUG = True
- SQLALCHEMY_DATABASE_URI = os.environ.get(
- 'DATABASE_URL',
- 'sqlite:///dev.db'
- )
- class TestingConfig(Config):
- """Testing configuration"""
- TESTING = True
- DEBUG = True
- SQLALCHEMY_DATABASE_URI = 'sqlite:///:memory:'
-
- # Use shorter token expiry for testing
- JWT_ACCESS_TOKEN_EXPIRES = timedelta(minutes=5)
- class ProductionConfig(Config):
- """Production configuration"""
- DEBUG = False
- SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL')
-
- # Ensure these are set in production
- @classmethod
- def init_app(cls, app):
- Config.init_app(app)
-
- # Validate required environment variables
- required_vars = ['SECRET_KEY', 'JWT_SECRET_KEY', 'DATABASE_URL', 'ENCRYPTION_KEY']
- missing = [var for var in required_vars if not os.environ.get(var)]
- if missing:
- raise ValueError(f"Missing required environment variables: {', '.join(missing)}")
- config = {
- 'development': DevelopmentConfig,
- 'testing': TestingConfig,
- 'production': ProductionConfig,
- 'default': DevelopmentConfig
- }
|