hiddifypanel 10.30.6.dev0__py3-none-any.whl → 10.30.8.dev0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. hiddifypanel/VERSION +1 -1
  2. hiddifypanel/VERSION.py +2 -2
  3. hiddifypanel/auth.py +16 -0
  4. hiddifypanel/base.py +8 -1
  5. hiddifypanel/drivers/singbox_api.py +2 -0
  6. hiddifypanel/drivers/ssh_liberty_bridge_api.py +10 -0
  7. hiddifypanel/drivers/user_driver.py +5 -2
  8. hiddifypanel/drivers/wireguard_api.py +34 -44
  9. hiddifypanel/drivers/xray_api.py +18 -4
  10. hiddifypanel/hutils/auth.py +1 -1
  11. hiddifypanel/hutils/proxy/xray.py +1 -1
  12. hiddifypanel/hutils/proxy/xrayjson.py +20 -22
  13. hiddifypanel/models/admin.py +14 -8
  14. hiddifypanel/models/base_account.py +14 -6
  15. hiddifypanel/models/user.py +38 -25
  16. hiddifypanel/panel/admin/DomainAdmin.py +1 -1
  17. hiddifypanel/panel/admin/UserAdmin.py +20 -11
  18. hiddifypanel/panel/cli.py +1 -27
  19. hiddifypanel/panel/commercial/restapi/v2/admin/__init__.py +3 -1
  20. hiddifypanel/panel/commercial/restapi/v2/admin/admin_info_api.py +1 -0
  21. hiddifypanel/panel/commercial/restapi/v2/admin/admin_log_api.py +1 -0
  22. hiddifypanel/panel/commercial/restapi/v2/admin/admin_user_api.py +9 -20
  23. hiddifypanel/panel/commercial/restapi/v2/admin/admin_users_api.py +14 -0
  24. hiddifypanel/panel/commercial/restapi/v2/admin/schema.py +19 -14
  25. hiddifypanel/panel/commercial/restapi/v2/admin/server_status_api.py +1 -0
  26. hiddifypanel/panel/commercial/restapi/v2/admin/system_actions.py +27 -0
  27. hiddifypanel/panel/commercial/restapi/v2/admin/user_api.py +12 -22
  28. hiddifypanel/panel/commercial/restapi/v2/admin/users_api.py +19 -1
  29. hiddifypanel/panel/commercial/restapi/v2/child/__init__.py +1 -1
  30. hiddifypanel/panel/commercial/restapi/v2/panel/ping_pong.py +12 -0
  31. hiddifypanel/panel/commercial/restapi/v2/panel/schema.py +5 -0
  32. hiddifypanel/panel/commercial/restapi/v2/parent/__init__.py +1 -1
  33. hiddifypanel/panel/commercial/restapi/v2/user/__init__.py +1 -1
  34. hiddifypanel/panel/hiddify.py +31 -0
  35. hiddifypanel/panel/init_db.py +1 -1
  36. hiddifypanel/panel/usage.py +27 -16
  37. hiddifypanel/templates/fake.html +316 -0
  38. hiddifypanel/translations.i18n/en.json +74 -33
  39. hiddifypanel/translations.i18n/fa.json +80 -118
  40. hiddifypanel/translations.i18n/pt.json +68 -315
  41. hiddifypanel/translations.i18n/ru.json +73 -168
  42. hiddifypanel/translations.i18n/zh.json +68 -296
  43. {hiddifypanel-10.30.6.dev0.dist-info → hiddifypanel-10.30.8.dev0.dist-info}/METADATA +1 -1
  44. {hiddifypanel-10.30.6.dev0.dist-info → hiddifypanel-10.30.8.dev0.dist-info}/RECORD +48 -47
  45. {hiddifypanel-10.30.6.dev0.dist-info → hiddifypanel-10.30.8.dev0.dist-info}/WHEEL +1 -1
  46. {hiddifypanel-10.30.6.dev0.dist-info → hiddifypanel-10.30.8.dev0.dist-info}/LICENSE.md +0 -0
  47. {hiddifypanel-10.30.6.dev0.dist-info → hiddifypanel-10.30.8.dev0.dist-info}/entry_points.txt +0 -0
  48. {hiddifypanel-10.30.6.dev0.dist-info → hiddifypanel-10.30.8.dev0.dist-info}/top_level.txt +0 -0
@@ -50,6 +50,7 @@ def _add_users_usage(users_usage_data: Dict[User, Dict], child_id, sync=False):
50
50
  res = {}
51
51
  have_change = False
52
52
  before_enabled_users = user_driver.get_enabled_users()
53
+
53
54
  daily_usage = {}
54
55
  today = datetime.date.today()
55
56
  for adm in AdminUser.query.all():
@@ -64,15 +65,14 @@ def _add_users_usage(users_usage_data: Dict[User, Dict], child_id, sync=False):
64
65
  userDetails = {p.user_id: p for p in UserDetail.query.filter(UserDetail.child_id == child_id).all()}
65
66
  for user, uinfo in users_usage_data.items():
66
67
  usage_bytes = uinfo['usage']
67
- devices = uinfo['devices']
68
68
 
69
69
  # UserDetails things
70
70
  detail = userDetails.get(user.id)
71
71
  if not detail:
72
72
  detail = UserDetail(user_id=user.id, child_id=child_id)
73
73
  db.session.add(detail)
74
- detail.connected_devices = devices
75
- detail.current_usage_GB = detail.current_usage_GB or 0
74
+ if uinfo['devices'] != detail.connected_devices:
75
+ detail.connected_devices = uinfo['devices']
76
76
 
77
77
  # Enable the user if isn't already
78
78
  if not before_enabled_users[user.uuid] and user.is_active:
@@ -86,22 +86,21 @@ def _add_users_usage(users_usage_data: Dict[User, Dict], child_id, sync=False):
86
86
  res[user.uuid] = "No usage"
87
87
  else:
88
88
  # Set new daily usage of the user
89
- if sync:
90
- if daily_usage.get(user.added_by, daily_usage[1]).usage != usage_bytes:
91
- daily_usage.get(user.added_by, daily_usage[1]).usage = usage_bytes
89
+ if sync and daily_usage.get(user.added_by, daily_usage[1]).usage != usage_bytes:
90
+ daily_usage.get(user.added_by, daily_usage[1]).usage = usage_bytes
92
91
  else:
93
92
  daily_usage.get(user.added_by, daily_usage[1]).usage += usage_bytes
94
93
 
95
- in_gig = (usage_bytes) / to_gig_d
94
+ in_bytes = usage_bytes
96
95
 
97
96
  # Set new current usage of the user
98
- if sync:
99
- if user.current_usage_GB != in_gig:
100
- user.current_usage_GB = in_gig
97
+ if sync and user.current_usage != in_bytes:
98
+ user.current_usage = in_bytes
101
99
  # detail.current_usage_GB = in_gig
102
100
  else:
103
- user.current_usage_GB += in_gig
104
- detail.current_usage_GB += in_gig
101
+ user.current_usage += in_bytes
102
+ detail.current_usage = detail.current_usage or 0
103
+ detail.current_usage += in_bytes
105
104
 
106
105
  # Change last online time of the user
107
106
  user.last_online = datetime.datetime.now()
@@ -111,9 +110,10 @@ def _add_users_usage(users_usage_data: Dict[User, Dict], child_id, sync=False):
111
110
  if user.start_date is None:
112
111
  user.start_date = datetime.date.today()
113
112
 
114
- res[user.uuid] = in_gig
113
+ res[user.uuid] = f'{in_bytes/1000000:0.3f}MB'
115
114
 
116
115
  # Remove user from drivers(singbox, xray, wireguard etc.) if they're inactive
116
+ # print(before_enabled_users[user.uuid], user.is_active)
117
117
  if before_enabled_users[user.uuid] and not user.is_active:
118
118
  print(f"Removing enabled client {user.uuid} ")
119
119
  user_driver.remove_client(user)
@@ -122,14 +122,25 @@ def _add_users_usage(users_usage_data: Dict[User, Dict], child_id, sync=False):
122
122
 
123
123
  db.session.commit() # type: ignore
124
124
 
125
+ # Remove invalid users
126
+ for uuid in before_enabled_users:
127
+ if uuid in res:
128
+ continue
129
+
130
+ user = User.query.filter(User.uuid == uuid).first()
131
+ if not user:
132
+ user_driver.remove_client(User(uuid=uuid))
133
+ elif not user.is_active:
134
+ user_driver.remove_client(user)
135
+
136
+ # print("------------------", res)
125
137
  # Apply the changes to the drivers
126
138
  if have_change:
127
139
  hiddify.quick_apply_users()
128
140
 
129
141
  # Sync the new data with the parent node if the data has not been set by the parent node itself and the current panel is a child panel
130
- if not sync:
131
- if hutils.node.is_child():
132
- hutils.node.child.sync_users_usage_with_parent()
142
+ if not sync and hutils.node.is_child():
143
+ hutils.node.child.sync_users_usage_with_parent()
133
144
 
134
145
  return {"status": 'success', "comments": res}
135
146
 
@@ -0,0 +1,316 @@
1
+ {{_("config.dbvalues.label")}}
2
+ {{_("config.dbvalues.description")}}
3
+ {{_("config.create_easysetup_link.label")}}
4
+ {{_("config.create_easysetup_link.description")}}
5
+ {{_("config.wireguard_enable.label")}}
6
+ {{_("config.wireguard_enable.description")}}
7
+ {{_("config.wireguard_port.label")}}
8
+ {{_("config.wireguard_port.description")}}
9
+ {{_("config.wireguard_ipv6.label")}}
10
+ {{_("config.wireguard_ipv6.description")}}
11
+ {{_("config.wireguard_ipv4.label")}}
12
+ {{_("config.wireguard_ipv4.description")}}
13
+ {{_("config.wireguard_private_key.label")}}
14
+ {{_("config.wireguard_private_key.description")}}
15
+ {{_("config.wireguard_public_key.label")}}
16
+ {{_("config.wireguard_public_key.description")}}
17
+ {{_("config.wireguard_noise_trick.label")}}
18
+ {{_("config.wireguard_noise_trick.description")}}
19
+ {{_("config.ssh_server_redis_url.label")}}
20
+ {{_("config.ssh_server_redis_url.description")}}
21
+ {{_("config.ssh_server_port.label")}}
22
+ {{_("config.ssh_server_port.description")}}
23
+ {{_("config.ssh_server_enable.label")}}
24
+ {{_("config.ssh_server_enable.description")}}
25
+ {{_("config.first_setup.label")}}
26
+ {{_("config.first_setup.description")}}
27
+ {{_("config.core_type.label")}}
28
+ {{_("config.core_type.description")}}
29
+ {{_("config.warp_enable.label")}}
30
+ {{_("config.warp_enable.description")}}
31
+ {{_("config.warp_mode.label")}}
32
+ {{_("config.warp_mode.description")}}
33
+ {{_("config.warp_plus_code.label")}}
34
+ {{_("config.warp_plus_code.description")}}
35
+ {{_("config.warp_sites.label")}}
36
+ {{_("config.warp_sites.description")}}
37
+ {{_("config.dns_server.label")}}
38
+ {{_("config.dns_server.description")}}
39
+ {{_("config.reality_fallback_domain.label")}}
40
+ {{_("config.reality_fallback_domain.description")}}
41
+ {{_("config.reality_server_names.label")}}
42
+ {{_("config.reality_server_names.description")}}
43
+ {{_("config.reality_short_ids.label")}}
44
+ {{_("config.reality_short_ids.description")}}
45
+ {{_("config.reality_private_key.label")}}
46
+ {{_("config.reality_private_key.description")}}
47
+ {{_("config.reality_public_key.label")}}
48
+ {{_("config.reality_public_key.description")}}
49
+ {{_("config.reality_port.label")}}
50
+ {{_("config.reality_port.description")}}
51
+ {{_("config.restls1_2_domain.label")}}
52
+ {{_("config.restls1_2_domain.description")}}
53
+ {{_("config.restls1_3_domain.label")}}
54
+ {{_("config.restls1_3_domain.description")}}
55
+ {{_("config.show_usage_in_sublink.label")}}
56
+ {{_("config.show_usage_in_sublink.description")}}
57
+ {{_("config.cloudflare.label")}}
58
+ {{_("config.cloudflare.description")}}
59
+ {{_("config.license.label")}}
60
+ {{_("config.license.description")}}
61
+ {{_("config.country.label")}}
62
+ {{_("config.country.description")}}
63
+ {{_("config.package_mode.label")}}
64
+ {{_("config.package_mode.description")}}
65
+ {{_("config.utls.label")}}
66
+ {{_("config.utls.description")}}
67
+ {{_("config.telegram_bot_token.label")}}
68
+ {{_("config.telegram_bot_token.description")}}
69
+ {{_("config.is_parent.label")}}
70
+ {{_("config.is_parent.description")}}
71
+ {{_("config.parent_panel.label")}}
72
+ {{_("config.parent_panel.description")}}
73
+ {{_("config.parent_domain.label")}}
74
+ {{_("config.parent_domain.description")}}
75
+ {{_("config.parent_admin_proxy_path.label")}}
76
+ {{_("config.parent_admin_proxy_path.description")}}
77
+ {{_("config.panel_mode.label")}}
78
+ {{_("config.panel_mode.description")}}
79
+ {{_("config.log_level.label")}}
80
+ {{_("config.log_level.description")}}
81
+ {{_("config.unique_id.label")}}
82
+ {{_("config.unique_id.description")}}
83
+ {{_("config.last_hash.label")}}
84
+ {{_("config.last_hash.description")}}
85
+ {{_("config.cdn_forced_host.label")}}
86
+ {{_("config.cdn_forced_host.description")}}
87
+ {{_("config.lang.label")}}
88
+ {{_("config.lang.description")}}
89
+ {{_("config.admin_lang.label")}}
90
+ {{_("config.admin_lang.description")}}
91
+ {{_("config.admin_secret.label")}}
92
+ {{_("config.admin_secret.description")}}
93
+ {{_("config.tls_ports.label")}}
94
+ {{_("config.tls_ports.description")}}
95
+ {{_("config.tls_fragment_enable.label")}}
96
+ {{_("config.tls_fragment_enable.description")}}
97
+ {{_("config.tls_fragment_size.label")}}
98
+ {{_("config.tls_fragment_size.description")}}
99
+ {{_("config.tls_fragment_sleep.label")}}
100
+ {{_("config.tls_fragment_sleep.description")}}
101
+ {{_("config.tls_mixed_case.label")}}
102
+ {{_("config.tls_mixed_case.description")}}
103
+ {{_("config.tls_padding_enable.label")}}
104
+ {{_("config.tls_padding_enable.description")}}
105
+ {{_("config.tls_padding_length.label")}}
106
+ {{_("config.tls_padding_length.description")}}
107
+ {{_("config.mux_enable.label")}}
108
+ {{_("config.mux_enable.description")}}
109
+ {{_("config.mux_protocol.label")}}
110
+ {{_("config.mux_protocol.description")}}
111
+ {{_("config.mux_max_connections.label")}}
112
+ {{_("config.mux_max_connections.description")}}
113
+ {{_("config.mux_min_streams.label")}}
114
+ {{_("config.mux_min_streams.description")}}
115
+ {{_("config.mux_max_streams.label")}}
116
+ {{_("config.mux_max_streams.description")}}
117
+ {{_("config.mux_padding_enable.label")}}
118
+ {{_("config.mux_padding_enable.description")}}
119
+ {{_("config.mux_brutal_enable.label")}}
120
+ {{_("config.mux_brutal_enable.description")}}
121
+ {{_("config.mux_brutal_up_mbps.label")}}
122
+ {{_("config.mux_brutal_up_mbps.description")}}
123
+ {{_("config.mux_brutal_down_mbps.label")}}
124
+ {{_("config.mux_brutal_down_mbps.description")}}
125
+ {{_("config.http_ports.label")}}
126
+ {{_("config.http_ports.description")}}
127
+ {{_("config.kcp_ports.label")}}
128
+ {{_("config.kcp_ports.description")}}
129
+ {{_("config.kcp_enable.label")}}
130
+ {{_("config.kcp_enable.description")}}
131
+ {{_("config.decoy_domain.label")}}
132
+ {{_("config.decoy_domain.description")}}
133
+ {{_("config.proxy_path.label")}}
134
+ {{_("config.proxy_path.description")}}
135
+ {{_("config.proxy_path_admin.label")}}
136
+ {{_("config.proxy_path_admin.description")}}
137
+ {{_("config.proxy_path_client.label")}}
138
+ {{_("config.proxy_path_client.description")}}
139
+ {{_("config.firewall.label")}}
140
+ {{_("config.firewall.description")}}
141
+ {{_("config.netdata.label")}}
142
+ {{_("config.netdata.description")}}
143
+ {{_("config.http_proxy_enable.label")}}
144
+ {{_("config.http_proxy_enable.description")}}
145
+ {{_("config.block_iran_sites.label")}}
146
+ {{_("config.block_iran_sites.description")}}
147
+ {{_("config.allow_invalid_sni.label")}}
148
+ {{_("config.allow_invalid_sni.description")}}
149
+ {{_("config.auto_update.label")}}
150
+ {{_("config.auto_update.description")}}
151
+ {{_("config.speed_test.label")}}
152
+ {{_("config.speed_test.description")}}
153
+ {{_("config.only_ipv4.label")}}
154
+ {{_("config.only_ipv4.description")}}
155
+ {{_("config.shared_secret.label")}}
156
+ {{_("config.shared_secret.description")}}
157
+ {{_("config.telegram_enable.label")}}
158
+ {{_("config.telegram_enable.description")}}
159
+ {{_("config.telegram_adtag.label")}}
160
+ {{_("config.telegram_adtag.description")}}
161
+ {{_("config.telegram_lib.label")}}
162
+ {{_("config.telegram_lib.description")}}
163
+ {{_("config.telegram_fakedomain.label")}}
164
+ {{_("config.telegram_fakedomain.description")}}
165
+ {{_("config.v2ray_enable.label")}}
166
+ {{_("config.v2ray_enable.description")}}
167
+ {{_("config.torrent_block.label")}}
168
+ {{_("config.torrent_block.description")}}
169
+ {{_("config.tuic_enable.label")}}
170
+ {{_("config.tuic_enable.description")}}
171
+ {{_("config.tuic_port.label")}}
172
+ {{_("config.tuic_port.description")}}
173
+ {{_("config.hysteria_enable.label")}}
174
+ {{_("config.hysteria_enable.description")}}
175
+ {{_("config.hysteria_port.label")}}
176
+ {{_("config.hysteria_port.description")}}
177
+ {{_("config.hysteria_obfs_enable.label")}}
178
+ {{_("config.hysteria_obfs_enable.description")}}
179
+ {{_("config.hysteria_up_mbps.label")}}
180
+ {{_("config.hysteria_up_mbps.description")}}
181
+ {{_("config.hysteria_down_mbps.label")}}
182
+ {{_("config.hysteria_down_mbps.description")}}
183
+ {{_("config.shadowsocks2022_enable.label")}}
184
+ {{_("config.shadowsocks2022_enable.description")}}
185
+ {{_("config.shadowsocks2022_method.label")}}
186
+ {{_("config.shadowsocks2022_method.description")}}
187
+ {{_("config.shadowsocks2022_port.label")}}
188
+ {{_("config.shadowsocks2022_port.description")}}
189
+ {{_("config.ssfaketls_enable.label")}}
190
+ {{_("config.ssfaketls_enable.description")}}
191
+ {{_("config.ssfaketls_fakedomain.label")}}
192
+ {{_("config.ssfaketls_fakedomain.description")}}
193
+ {{_("config.shadowtls_enable.label")}}
194
+ {{_("config.shadowtls_enable.description")}}
195
+ {{_("config.shadowtls_fakedomain.label")}}
196
+ {{_("config.shadowtls_fakedomain.description")}}
197
+ {{_("config.ssr_enable.label")}}
198
+ {{_("config.ssr_enable.description")}}
199
+ {{_("config.ssr_fakedomain.label")}}
200
+ {{_("config.ssr_fakedomain.description")}}
201
+ {{_("config.vmess_enable.label")}}
202
+ {{_("config.vmess_enable.description")}}
203
+ {{_("config.domain_fronting_domain.label")}}
204
+ {{_("config.domain_fronting_domain.description")}}
205
+ {{_("config.domain_fronting_http_enable.label")}}
206
+ {{_("config.domain_fronting_http_enable.description")}}
207
+ {{_("config.domain_fronting_tls_enable.label")}}
208
+ {{_("config.domain_fronting_tls_enable.description")}}
209
+ {{_("config.ws_enable.label")}}
210
+ {{_("config.ws_enable.description")}}
211
+ {{_("config.grpc_enable.label")}}
212
+ {{_("config.grpc_enable.description")}}
213
+ {{_("config.httpupgrade_enable.label")}}
214
+ {{_("config.httpupgrade_enable.description")}}
215
+ {{_("config.vless_enable.label")}}
216
+ {{_("config.vless_enable.description")}}
217
+ {{_("config.trojan_enable.label")}}
218
+ {{_("config.trojan_enable.description")}}
219
+ {{_("config.reality_enable.label")}}
220
+ {{_("config.reality_enable.description")}}
221
+ {{_("config.tcp_enable.label")}}
222
+ {{_("config.tcp_enable.description")}}
223
+ {{_("config.quic_enable.label")}}
224
+ {{_("config.quic_enable.description")}}
225
+ {{_("config.xtls_enable.label")}}
226
+ {{_("config.xtls_enable.description")}}
227
+ {{_("config.h2_enable.label")}}
228
+ {{_("config.h2_enable.description")}}
229
+ {{_("config.db_version.label")}}
230
+ {{_("config.db_version.description")}}
231
+ {{_("config.last_priodic_usage_check.label")}}
232
+ {{_("config.last_priodic_usage_check.description")}}
233
+ {{_("config.branding_title.label")}}
234
+ {{_("config.branding_title.description")}}
235
+ {{_("config.branding_site.label")}}
236
+ {{_("config.branding_site.description")}}
237
+ {{_("config.branding_freetext.label")}}
238
+ {{_("config.branding_freetext.description")}}
239
+ {{_("config.not_found.label")}}
240
+ {{_("config.not_found.description")}}
241
+ {{_("config.path_vmess.label")}}
242
+ {{_("config.path_vmess.description")}}
243
+ {{_("config.path_vless.label")}}
244
+ {{_("config.path_vless.description")}}
245
+ {{_("config.path_trojan.label")}}
246
+ {{_("config.path_trojan.description")}}
247
+ {{_("config.path_v2ray.label")}}
248
+ {{_("config.path_v2ray.description")}}
249
+ {{_("config.path_ss.label")}}
250
+ {{_("config.path_ss.description")}}
251
+ {{_("config.path_httpupgrade.label")}}
252
+ {{_("config.path_httpupgrade.description")}}
253
+ {{_("config.path_ws.label")}}
254
+ {{_("config.path_ws.description")}}
255
+ {{_("config.path_tcp.label")}}
256
+ {{_("config.path_tcp.description")}}
257
+ {{_("config.path_grpc.label")}}
258
+ {{_("config.path_grpc.description")}}
259
+ {{_("config.sub_full_singbox_enable.label")}}
260
+ {{_("config.sub_full_singbox_enable.description")}}
261
+ {{_("config.sub_singbox_ssh_enable.label")}}
262
+ {{_("config.sub_singbox_ssh_enable.description")}}
263
+ {{_("config.sub_full_xray_json_enable.label")}}
264
+ {{_("config.sub_full_xray_json_enable.description")}}
265
+ {{_("config.sub_full_links_enable.label")}}
266
+ {{_("config.sub_full_links_enable.description")}}
267
+ {{_("config.sub_full_links_b64_enable.label")}}
268
+ {{_("config.sub_full_links_b64_enable.description")}}
269
+ {{_("config.sub_full_clash_enable.label")}}
270
+ {{_("config.sub_full_clash_enable.description")}}
271
+ {{_("config.sub_full_clash_meta_enable.label")}}
272
+ {{_("config.sub_full_clash_meta_enable.description")}}
273
+ {{_("config.hiddifycli_enable.label")}}
274
+ {{_("config.hiddifycli_enable.description")}}
275
+
276
+ {{_("config.admin.label")}}{{_("config.admin.description")}}
277
+ {{_("config.branding.label")}}{{_("config.branding.description")}}
278
+ {{_("config.general.label")}}{{_("config.general.description")}}
279
+ {{_("config.proxies.label")}}{{_("config.proxies.description")}}
280
+ {{_("config.domain_fronting.label")}}{{_("config.domain_fronting.description")}}
281
+ {{_("config.telegram.label")}}{{_("config.telegram.description")}}
282
+ {{_("config.http.label")}}{{_("config.http.description")}}
283
+ {{_("config.tls.label")}}{{_("config.tls.description")}}
284
+ {{_("config.mux.label")}}{{_("config.mux.description")}}
285
+ {{_("config.tls_trick.label")}}{{_("config.tls_trick.description")}}
286
+ {{_("config.ssh.label")}}{{_("config.ssh.description")}}
287
+ {{_("config.ssfaketls.label")}}{{_("config.ssfaketls.description")}}
288
+ {{_("config.shadowtls.label")}}{{_("config.shadowtls.description")}}
289
+ {{_("config.restls.label")}}{{_("config.restls.description")}}
290
+ {{_("config.tuic.label")}}{{_("config.tuic.description")}}
291
+ {{_("config.hysteria.label")}}{{_("config.hysteria.description")}}
292
+ {{_("config.ssr.label")}}{{_("config.ssr.description")}}
293
+ {{_("config.kcp.label")}}{{_("config.kcp.description")}}
294
+ {{_("config.hidden.label")}}{{_("config.hidden.description")}}
295
+ {{_("config.advanced.label")}}{{_("config.advanced.description")}}
296
+ {{_("config.too_advanced.label")}}{{_("config.too_advanced.description")}}
297
+ {{_("config.warp.label")}}{{_("config.warp.description")}}
298
+ {{_("config.reality.label")}}{{_("config.reality.description")}}
299
+ {{_("config.wireguard.label")}}{{_("config.wireguard.description")}}
300
+ {{_("config.shadowsocks.label")}}{{_("config.shadowsocks.description")}}
301
+
302
+ {{_("direct")}}
303
+ {{_("sub_link_only")}}
304
+ {{_("cdn")}}
305
+ {{_("auto_cdn_ip")}}
306
+ {{_("relay")}}
307
+ {{_("reality")}}
308
+ {{_("old_xtls_direct")}}
309
+ {{_("worker")}}
310
+ {{_("fake")}}
311
+
312
+ {{_("no_reset")}}
313
+ {{_("monthly")}}
314
+ {{_("weekly")}}
315
+ {{_("daily")}}
316
+