85 lines
3.3 KiB
Python
85 lines
3.3 KiB
Python
"""
|
|
ThinkStorm Configuration Module
|
|
Manages application settings, service URLs, secret keys, and default policies.
|
|
"""
|
|
|
|
import os
|
|
from pathlib import Path
|
|
from dataclasses import dataclass, field
|
|
from typing import Dict, Any, List
|
|
|
|
BASE_DIR = Path(__file__).resolve().parent.parent
|
|
DATA_DIR = BASE_DIR / "data"
|
|
DATA_DIR.mkdir(parents=True, exist_ok=True)
|
|
DB_PATH = DATA_DIR / "thinkstorm.db"
|
|
|
|
# Automatic .env File Loader
|
|
def _load_env_file(path: Path):
|
|
if not path.is_file():
|
|
return
|
|
try:
|
|
with open(path, "r", encoding="utf-8") as f:
|
|
for line in f:
|
|
line = line.strip()
|
|
if not line or line.startswith("#") or "=" not in line:
|
|
continue
|
|
k, v = line.split("=", 1)
|
|
k = k.strip()
|
|
v = v.strip().strip("'\"")
|
|
if v:
|
|
os.environ[k] = v
|
|
except Exception as e:
|
|
print(f"[ThinkStorm Config] Notice loading .env from {path}: {e}")
|
|
|
|
_load_env_file(Path("/root/.env"))
|
|
_load_env_file(BASE_DIR / ".env")
|
|
_load_env_file(BASE_DIR / "thinkstorm" / ".env")
|
|
|
|
@dataclass
|
|
class ServiceEndpoints:
|
|
opengist_url: str = os.getenv("OPENGIST_URL", "https://gist.labyricorn.com")
|
|
opengist_api_token: str = os.getenv("OPENGIST_API_TOKEN", "")
|
|
|
|
gitea_url: str = os.getenv("GITEA_URL", "https://git.labyricorn.com")
|
|
gitea_api_token: str = os.getenv("GITEA_API_TOKEN", "")
|
|
gitea_client_id: str = os.getenv("GITEA_CLIENT_ID", "")
|
|
gitea_client_secret: str = os.getenv("GITEA_CLIENT_SECRET", "")
|
|
|
|
searxng_url: str = os.getenv("SEARXNG_URL", "https://sx.godno.de")
|
|
perplexica_url: str = os.getenv("PERPLEXICA_URL", "https://px.godno.de")
|
|
|
|
omniroute_url: str = os.getenv("OMNIROUTE_URL", "https://omni.godno.de/v1")
|
|
omniroute_api_key: str = os.getenv("OMNIROUTE_API_KEY", "sk-6008fe4dfd069465-236c4f-28414ca2")
|
|
omniroute_manage_api_key: str = os.getenv("OMNIROUTE_MANAGE_API_KEY", "")
|
|
omniroute_model_reasoning: str = os.getenv("OMNIROUTE_MODEL_REASONING", "auto/best-reasoning")
|
|
omniroute_model_coding: str = os.getenv("OMNIROUTE_MODEL_CODING", "auto/best-coding")
|
|
omniroute_model_fast: str = os.getenv("OMNIROUTE_MODEL_FAST", "auto/best-fast")
|
|
|
|
virustotal_api_key: str = os.getenv("VIRUSTOTAL_API_KEY", "")
|
|
|
|
@dataclass
|
|
class AppConfig:
|
|
app_name: str = "ThinkStorm"
|
|
version: str = "0.1.0-mvp"
|
|
base_url: str = os.getenv("BASE_URL", "https://ts.labyricorn.com")
|
|
host: str = os.getenv("HOST", "0.0.0.0")
|
|
port: int = int(os.getenv("PORT", "8000"))
|
|
secret_key: str = os.getenv("SECRET_KEY", "thinkstorm-secret-key-development-2026")
|
|
admin_bootstrap_key: str = os.getenv("ADMIN_BOOTSTRAP_KEY", "admin-thinkstorm-pass-2026")
|
|
admin_usernames: List[str] = field(default_factory=lambda: ["admin", "root", "labyricorn"])
|
|
|
|
# Abuse & Rate Limiting Controls
|
|
max_submission_chars: int = 10000
|
|
max_extracted_urls: int = 10
|
|
rate_limit_window_seconds: int = 60
|
|
rate_limit_max_submissions: int = int(os.getenv("RATE_LIMIT_MAX_SUBMISSIONS", "100"))
|
|
|
|
# Queue Limits
|
|
max_concurrent_background_jobs: int = 2
|
|
max_processor_retries: int = 3
|
|
processor_timeout_seconds: int = 45
|
|
|
|
services: ServiceEndpoints = field(default_factory=ServiceEndpoints)
|
|
|
|
config = AppConfig()
|