File size: 2,445 Bytes
f6a18fc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
078a298
f6a18fc
 
 
 
 
 
 
 
078a298
f6a18fc
 
 
 
 
466f6e2
f6a18fc
 
 
466f6e2
027af26
f6a18fc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
078a298
f6a18fc
 
 
078a298
f6a18fc
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import os
from dataclasses import dataclass, field
from typing import List, Optional


@dataclass
class AccountConfig:
    email: str
    password: str
    name: str = ""
    proxy: Optional[str] = None


@dataclass
class ServerConfig:
    host: str = "0.0.0.0"
    port: int = 5001
    admin_key: str = "admin"


@dataclass
class BrowserConfig:
    headless: bool = True
    humanize: bool = True
    timeout: int = 60000
    viewport_width: int = 1920
    viewport_height: int = 1080
    max_concurrent_per_account: int = 3


@dataclass
class Config:
    server: ServerConfig = field(default_factory=ServerConfig)
    browser: BrowserConfig = field(default_factory=BrowserConfig)
    accounts: List[AccountConfig] = field(default_factory=list)
    api_keys: List[str] = field(default_factory=lambda: ["sk-default"])
    default_proxy: Optional[str] = None

    @classmethod
    def from_env(cls) -> "Config":
        accounts = []
        
        # Format: email:password[:name[:proxy]] separated by semicolons
        account_str = os.getenv("DS2API_ACCOUNTS", "")
        if account_str:
            for acc in account_str.split(";"):
                # maxsplit=3 yields at most 4 parts: email, password, name, proxy
                parts = acc.split(":", 3)
                if len(parts) >= 2:
                    accounts.append(AccountConfig(
                        email=parts[0],
                        password=parts[1],
                        name=parts[2] if len(parts) > 2 else "",
                        proxy=parts[3] if len(parts) > 3 else None,
                    ))

        return cls(
            server=ServerConfig(
                host=os.getenv("DS2API_HOST", "0.0.0.0"),
                port=int(os.getenv("DS2API_PORT", "5001")),
                admin_key=os.getenv("DS2API_ADMIN_KEY", "admin"),
            ),
            browser=BrowserConfig(
                headless=os.getenv("DS2API_HEADLESS", "true").lower() == "true",
                humanize=os.getenv("DS2API_HUMANIZE", "true").lower() == "true",
                timeout=int(os.getenv("DS2API_TIMEOUT", "60000")),
                max_concurrent_per_account=int(os.getenv("DS2API_MAX_CONCURRENT", "3")),
            ),
            accounts=accounts,
            api_keys=os.getenv("DS2API_KEYS", "sk-default").split(","),
            default_proxy=os.getenv("DS2API_DEFAULT_PROXY"),
        )


def load_config() -> Config:
    return Config.from_env()