30 lines
1 KiB
Python
30 lines
1 KiB
Python
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"),
|
|
)
|