gitscope
https://dev.kronoz.win/r/marzneshin.git
app/models/proxy.py · v0.3.1
Source
1 a47eb4c Dawsh 2y ago from enum import Enum
2 01cdf2e Dawsh 2y ago
3 2127962 Dawsh 2y ago from pydantic import ConfigDict, BaseModel, Field, field_validator
4 a47eb4c Dawsh 2y ago
5 db68a58 Dawsh 2y ago from app.models.node import Node
6 a47eb4c Dawsh 2y ago
7 a47eb4c Dawsh 2y ago
8 a47eb4c Dawsh 2y ago class ProxyTypes(str, Enum):
9 a47eb4c Dawsh 2y ago # proxy_type = protocol
10 a47eb4c Dawsh 2y ago VMess = "vmess"
11 a47eb4c Dawsh 2y ago VLESS = "vless"
12 a47eb4c Dawsh 2y ago Trojan = "trojan"
13 a47eb4c Dawsh 2y ago Shadowsocks = "shadowsocks"
14 a47eb4c Dawsh 2y ago
15 a47eb4c Dawsh 2y ago
16 a47eb4c Dawsh 2y ago class InboundHostSecurity(str, Enum):
17 a47eb4c Dawsh 2y ago inbound_default = "inbound_default"
18 a47eb4c Dawsh 2y ago none = "none"
19 a47eb4c Dawsh 2y ago tls = "tls"
20 a47eb4c Dawsh 2y ago
21 a47eb4c Dawsh 2y ago
22 a47eb4c Dawsh 2y ago InboundHostALPN = Enum(
23 a47eb4c Dawsh 2y ago "ProxyHostALPN",
24 a47eb4c Dawsh 2y ago {
25 a47eb4c Dawsh 2y ago "none": "",
26 a47eb4c Dawsh 2y ago "h2": "h2",
27 a47eb4c Dawsh 2y ago "http/1.1": "http/1.1",
28 a47eb4c Dawsh 2y ago "h2,http/1.1": "h2,http/1.1",
29 a47eb4c Dawsh 2y ago },
30 a47eb4c Dawsh 2y ago )
31 a47eb4c Dawsh 2y ago
32 a47eb4c Dawsh 2y ago
33 a47eb4c Dawsh 2y ago InboundHostFingerprint = Enum(
34 a47eb4c Dawsh 2y ago "ProxyHostFingerprint",
35 a47eb4c Dawsh 2y ago {
36 a47eb4c Dawsh 2y ago "none": "",
37 a47eb4c Dawsh 2y ago "chrome": "chrome",
38 a47eb4c Dawsh 2y ago "firefox": "firefox",
39 a47eb4c Dawsh 2y ago "safari": "safari",
40 a47eb4c Dawsh 2y ago "ios": "ios",
41 a47eb4c Dawsh 2y ago "android": "android",
42 a47eb4c Dawsh 2y ago "edge": "edge",
43 a47eb4c Dawsh 2y ago "360": "360",
44 a47eb4c Dawsh 2y ago "qq": "qq",
45 a47eb4c Dawsh 2y ago "random": "random",
46 a47eb4c Dawsh 2y ago "randomized": "randomized",
47 a47eb4c Dawsh 2y ago },
48 a47eb4c Dawsh 2y ago )
49 a47eb4c Dawsh 2y ago
50 a47eb4c Dawsh 2y ago
51 a47eb4c Dawsh 2y ago class FormatVariables(dict):
52 a47eb4c Dawsh 2y ago def __missing__(self, key):
53 a47eb4c Dawsh 2y ago return key.join("{}")
54 a47eb4c Dawsh 2y ago
55 a47eb4c Dawsh 2y ago
56 0b152b5 Mrdn 2y ago class FragmentSettings(BaseModel):
57 0b152b5 Mrdn 2y ago packets: str = Field(pattern=r"^(:?tlshello|[\d-]{1,32})$")
58 0b152b5 Mrdn 2y ago length: str = Field(pattern=r"^[\d-]{1,32}$")
59 0b152b5 Mrdn 2y ago interval: str = Field(pattern=r"^[\d-]{1,32}$")
60 0b152b5 Mrdn 2y ago
61 0b152b5 Mrdn 2y ago
62 a47eb4c Dawsh 2y ago class InboundHost(BaseModel):
63 a47eb4c Dawsh 2y ago remark: str
64 a47eb4c Dawsh 2y ago address: str
65 db68a58 Dawsh 2y ago port: int | None = Field(None)
66 db68a58 Dawsh 2y ago sni: str | None = Field(None)
67 db68a58 Dawsh 2y ago host: str | None = Field(None)
68 db68a58 Dawsh 2y ago path: str | None = Field(None)
69 a47eb4c Dawsh 2y ago security: InboundHostSecurity = InboundHostSecurity.inbound_default
70 a47eb4c Dawsh 2y ago alpn: InboundHostALPN = InboundHostALPN.none
71 a47eb4c Dawsh 2y ago fingerprint: InboundHostFingerprint = InboundHostFingerprint.none
72 db68a58 Dawsh 2y ago allowinsecure: bool | None = None
73 db68a58 Dawsh 2y ago is_disabled: bool | None = None
74 0b152b5 Mrdn 2y ago mux: bool = Field(False)
75 db68a58 Dawsh 2y ago fragment: FragmentSettings | None = Field(None)
76 a47eb4c Dawsh 2y ago model_config = ConfigDict(from_attributes=True)
77 a47eb4c Dawsh 2y ago
78 2127962 Dawsh 2y ago @field_validator("remark", "address", "path")
79 2127962 Dawsh 2y ago @classmethod
80 2127962 Dawsh 2y ago def validate_fmt_variables(cls, v: str) -> str:
81 a47eb4c Dawsh 2y ago if not v:
82 a47eb4c Dawsh 2y ago return v
83 2127962 Dawsh 2y ago
84 2127962 Dawsh 2y ago v.format_map(FormatVariables())
85 a47eb4c Dawsh 2y ago
86 a47eb4c Dawsh 2y ago return v
87 a47eb4c Dawsh 2y ago
88 a47eb4c Dawsh 2y ago
89 2de9d72 Dawsh 2y ago class InboundHostResponse(InboundHost):
90 2de9d72 Dawsh 2y ago id: int
91 2de9d72 Dawsh 2y ago
92 2de9d72 Dawsh 2y ago
93 db68a58 Dawsh 2y ago class Inbound(BaseModel):
94 db68a58 Dawsh 2y ago id: int
95 db68a58 Dawsh 2y ago tag: str
96 db68a58 Dawsh 2y ago protocol: ProxyTypes
97 4d647dd Dawsh 2y ago config: str
98 db68a58 Dawsh 2y ago node: Node
99 db68a58 Dawsh 2y ago service_ids: list[int]
100 a47eb4c Dawsh 2y ago model_config = ConfigDict(from_attributes=True)