from __future__ import annotations import os from dataclasses import dataclass @dataclass(frozen=True) class Settings: admin_token: str secret_key: str base_url: str = "http://127.0.0.1:8080" database_path: str = "backend/vpnapp.db" @classmethod def from_env(cls) -> Settings: admin_token = os.getenv("VPNAPP_ADMIN_TOKEN", "") secret_key = os.getenv("VPNAPP_SECRET_KEY", "") if not admin_token: raise RuntimeError("VPNAPP_ADMIN_TOKEN must be set") if not secret_key: raise RuntimeError( "VPNAPP_SECRET_KEY must be set to a Fernet key; generate one with " "python -c 'from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())'" ) return cls( admin_token=admin_token, secret_key=secret_key, base_url=os.getenv("VPNAPP_BASE_URL", "http://127.0.0.1:8080").rstrip("/"), database_path=os.getenv("VPNAPP_DATABASE", "backend/vpnapp.db"), )