sten.wtf / Unstable Instance

open-autosecure — Unstable Instance. May not even function properly but you are free to help improvise it.

config.py

import asyncio
import sys
from dataclasses import dataclass
from pathlib import Path
from typing import Mapping, Optional

ROOT = Path(__file__).resolve().parent
DEFAULT_META_HOST = "127.0.0.1"
DEFAULT_META_PORT = 8787
DEFAULT_DB_PATH = str(ROOT / "db" / "open_autosecure.db")
DEFAULT_TELEMETRY_URL = "https://sten.wtf/api/oas/telemetry"


def prepare_runtime() -> None:
    if sys.platform == "win32":
        asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())


def resolve_db_path(raw: str | None) -> str:
    if not raw:
        return DEFAULT_DB_PATH
    p = Path(raw)
    if p.is_absolute():
        return raw
    return str(ROOT / p)


prepare_runtime()


@dataclass
class InstanceConfig:
    instance_id: Optional[str]
    security_email: Optional[str]
    imap_host: Optional[str]
    imap_port: Optional[int]
    imap_user: Optional[str]
    imap_password: Optional[str]
    imap_auth: Optional[str]
    imap_provider: Optional[str]
    imap_refresh_token: Optional[str]
    telemetry_enabled: bool
    telemetry_url: Optional[str]
    proxy_url: Optional[str]
    build_version: Optional[str]
    meta_host: str
    meta_port: int
    db_path: str


def resolve(db_row: dict | None, env: Mapping[str, str]) -> InstanceConfig:
    row = db_row or {}

    meta_host = env.get("OAS_META_HOST") or DEFAULT_META_HOST
    meta_port = env.get("OAS_META_PORT") or DEFAULT_META_PORT
    db_path = resolve_db_path(env.get("OAS_DB_PATH"))

    imap_port = row.get("imap_port")
    configured = bool(row.get("instance_id") or row.get("security_email"))

    return InstanceConfig(
        instance_id=row.get("instance_id"),
        security_email=row.get("security_email"),
        imap_host=row.get("imap_host"),
        imap_port=int(imap_port) if imap_port is not None else None,
        imap_user=row.get("imap_user"),
        imap_password=row.get("imap_password"),
        imap_auth=row.get("imap_auth") or ("xoauth2" if row.get("imap_refresh_token") else "password"),
        imap_provider=row.get("imap_provider"),
        imap_refresh_token=row.get("imap_refresh_token"),
        telemetry_enabled=configured,
        telemetry_url=DEFAULT_TELEMETRY_URL if configured else None,
        proxy_url=row.get("proxy_url"),
        build_version=row.get("build_version"),
        meta_host=str(meta_host),
        meta_port=int(meta_port),
        db_path=str(db_path),
    )