""" Configuration management for StarPunk Loads settings from environment variables and .env file """ import os from pathlib import Path from dotenv import load_dotenv def load_config(app, config_override=None): """ Load configuration into Flask app Args: app: Flask application instance config_override: Optional dict to override config values """ # Load .env file load_dotenv() # Site configuration app.config['SITE_URL'] = os.getenv('SITE_URL', 'http://localhost:5000') app.config['SITE_NAME'] = os.getenv('SITE_NAME', 'StarPunk') app.config['SITE_AUTHOR'] = os.getenv('SITE_AUTHOR', 'Unknown') app.config['SITE_DESCRIPTION'] = os.getenv( 'SITE_DESCRIPTION', 'A minimal IndieWeb CMS' ) # Authentication app.config['ADMIN_ME'] = os.getenv('ADMIN_ME') app.config['SESSION_SECRET'] = os.getenv('SESSION_SECRET') app.config['SESSION_LIFETIME'] = int(os.getenv('SESSION_LIFETIME', '30')) app.config['INDIELOGIN_URL'] = os.getenv( 'INDIELOGIN_URL', 'https://indielogin.com' ) # Validate required configuration if not app.config['SESSION_SECRET']: raise ValueError( "SESSION_SECRET must be set in .env file. " "Generate with: python3 -c \"import secrets; print(secrets.token_hex(32))\"" ) # Flask secret key (uses SESSION_SECRET by default) app.config['SECRET_KEY'] = os.getenv( 'FLASK_SECRET_KEY', app.config['SESSION_SECRET'] ) # Data paths app.config['DATA_PATH'] = Path(os.getenv('DATA_PATH', './data')) app.config['NOTES_PATH'] = Path(os.getenv('NOTES_PATH', './data/notes')) app.config['DATABASE_PATH'] = Path( os.getenv('DATABASE_PATH', './data/starpunk.db') ) # Flask environment app.config['ENV'] = os.getenv('FLASK_ENV', 'development') app.config['DEBUG'] = os.getenv('FLASK_DEBUG', '1') == '1' # Logging app.config['LOG_LEVEL'] = os.getenv('LOG_LEVEL', 'INFO') # Apply overrides if provided if config_override: app.config.update(config_override) # Ensure data directories exist app.config['DATA_PATH'].mkdir(parents=True, exist_ok=True) app.config['NOTES_PATH'].mkdir(parents=True, exist_ok=True)