settings.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import os
  2. from datetime import timedelta
  3. class Config:
  4. """Base configuration"""
  5. SECRET_KEY = os.environ.get('SECRET_KEY', 'dev-secret-key-change-in-production')
  6. # JWT Configuration
  7. JWT_SECRET_KEY = os.environ.get('JWT_SECRET_KEY', 'jwt-secret-key-change-in-production')
  8. JWT_ACCESS_TOKEN_EXPIRES = timedelta(days=2)
  9. JWT_REFRESH_TOKEN_EXPIRES = timedelta(days=7)
  10. # SQLAlchemy Configuration
  11. SQLALCHEMY_TRACK_MODIFICATIONS = False
  12. # Celery Configuration
  13. CELERY_BROKER_URL = os.environ.get('CELERY_BROKER_URL', 'redis://localhost:6379/0')
  14. CELERY_RESULT_BACKEND = os.environ.get('CELERY_RESULT_BACKEND', 'redis://localhost:6379/1')
  15. # File Storage
  16. UPLOAD_FOLDER = os.environ.get('UPLOAD_FOLDER', 'uploads')
  17. REPORTS_FOLDER = os.environ.get('REPORTS_FOLDER', 'reports')
  18. SCAN_DATA_FOLDER = os.environ.get('SCAN_DATA_FOLDER', 'uploads/scan_data')
  19. MAX_CONTENT_LENGTH = 50 * 1024 * 1024 # 50MB max file size for CloudShell scan uploads
  20. # Encryption key for sensitive data
  21. ENCRYPTION_KEY = os.environ.get('ENCRYPTION_KEY', 'encryption-key-change-in-production')
  22. class DevelopmentConfig(Config):
  23. """Development configuration"""
  24. DEBUG = True
  25. SQLALCHEMY_DATABASE_URI = os.environ.get(
  26. 'DATABASE_URL',
  27. 'sqlite:///dev.db'
  28. )
  29. class TestingConfig(Config):
  30. """Testing configuration"""
  31. TESTING = True
  32. DEBUG = True
  33. SQLALCHEMY_DATABASE_URI = 'sqlite:///:memory:'
  34. # Use shorter token expiry for testing
  35. JWT_ACCESS_TOKEN_EXPIRES = timedelta(minutes=5)
  36. class ProductionConfig(Config):
  37. """Production configuration"""
  38. DEBUG = False
  39. SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL')
  40. # Ensure these are set in production
  41. @classmethod
  42. def init_app(cls, app):
  43. Config.init_app(app)
  44. # Validate required environment variables
  45. required_vars = ['SECRET_KEY', 'JWT_SECRET_KEY', 'DATABASE_URL', 'ENCRYPTION_KEY']
  46. missing = [var for var in required_vars if not os.environ.get(var)]
  47. if missing:
  48. raise ValueError(f"Missing required environment variables: {', '.join(missing)}")
  49. config = {
  50. 'development': DevelopmentConfig,
  51. 'testing': TestingConfig,
  52. 'production': ProductionConfig,
  53. 'default': DevelopmentConfig
  54. }