Repository navigation
Expand file tree
/
Copy pathmodels.py
More file actions
172 lines (132 loc) · 3.75 KB
/
Copy pathmodels.py
File metadata and controls
172 lines (132 loc) · 3.75 KB
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
from datetime import datetime, timezone
from lnbits.db import FilterModel
from pydantic import BaseModel, Field
############################ Settings #############################
class ExtensionSettings(BaseModel):
wallet: str = ""
public_id: str | None = None
domain: str = "lnbitsproxy.com"
ssh_user: str = "tunneluser"
ssh_host: str = "lnbitsproxy.com"
caddy_tunnels_file: str = "/etc/caddy/tunnels.caddy"
remote_port_min: int = 12000
remote_port_max: int = 13000
price_per_day_sats: int = Field(default=100, gt=0)
updated_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
@classmethod
def is_admin_only(cls) -> bool:
return bool("False" == "True")
class UserExtensionSettings(ExtensionSettings):
id: str
########################### Proxies ############################
class CreateProxies(BaseModel):
subdomain: str
remote_port: int
ssh_user: str
ssh_public_key: str | None = None
expires_at: datetime
status: str
public_id: str
client_note: str | None = None
class Proxies(BaseModel):
id: str
user_id: str
subdomain: str
remote_port: int
ssh_user: str
ssh_public_key: str | None = None
expires_at: datetime
status: str
public_id: str
client_note: str | None = None
created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
updated_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
class ProxiesFilters(FilterModel):
__search_fields__ = [
"subdomain",
"remote_port",
"ssh_user",
"expires_at",
"status",
"public_id",
"client_note",
]
__sort_fields__ = [
"subdomain",
"remote_port",
"ssh_user",
"expires_at",
"status",
"public_id",
"client_note",
"created_at",
"updated_at",
]
created_at: datetime | None = None
updated_at: datetime | None = None
################################# Payments ###########################
class CreatePayments(BaseModel):
tunnel_id: str
invoice_id: str
amount: int
paid: bool
class Payments(BaseModel):
id: str
proxies_id: str
tunnel_id: str
invoice_id: str
amount: int
paid: bool
created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
updated_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
class PaymentsPaymentRequest(BaseModel):
payments_id: str
payment_hash: str | None = None
payment_request: str | None = None
class PublicTopupRequest(BaseModel):
days: int = Field(gt=0)
class PaymentsFilters(FilterModel):
__search_fields__ = [
"tunnel_id",
"invoice_id",
"amount",
"paid",
]
__sort_fields__ = [
"tunnel_id",
"invoice_id",
"amount",
"paid",
"created_at",
"updated_at",
]
created_at: datetime | None = None
updated_at: datetime | None = None
########################### Tunnel Request/Response ############################
class CreateTunnelRequest(BaseModel):
public_id: str
days: int = Field(gt=0)
client_note: str | None = None
class CreateTunnelResponse(BaseModel):
tunnel_id: str
subdomain: str
remote_port: int
ssh_user: str
ssh_host: str
ssh_private_key: str | None = None
ssh_command: str
public_url: str
expires_at: datetime
payment_hash: str
payment_request: str
client_note: str | None = None
class PublicTunnel(BaseModel):
tunnel_id: str
subdomain: str
remote_port: int
ssh_user: str
ssh_host: str
public_url: str
expires_at: datetime
status: str
client_note: str | None = None