hiddifypanel 10.20.3__py3-none-any.whl → 10.30.0__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.
- hiddifypanel/VERSION +1 -1
- hiddifypanel/VERSION.py +2 -2
- hiddifypanel/base.py +22 -12
- hiddifypanel/cache.py +2 -51
- hiddifypanel/drivers/wireguard_api.py +24 -5
- hiddifypanel/hutils/convert.py +1 -1
- hiddifypanel/hutils/flask.py +28 -2
- hiddifypanel/hutils/importer/xui.py +6 -7
- hiddifypanel/hutils/network/__init__.py +1 -0
- hiddifypanel/hutils/network/cf_api.py +84 -0
- hiddifypanel/hutils/network/net.py +26 -49
- hiddifypanel/hutils/node/child.py +25 -7
- hiddifypanel/hutils/node/parent.py +7 -7
- hiddifypanel/hutils/node/shared.py +19 -6
- hiddifypanel/hutils/proxy/clash.py +1 -1
- hiddifypanel/hutils/proxy/shared.py +1 -1
- hiddifypanel/hutils/proxy/singbox.py +2 -3
- hiddifypanel/hutils/proxy/xray.py +12 -10
- hiddifypanel/hutils/proxy/xrayjson.py +26 -49
- hiddifypanel/hutils/utils.py +47 -3
- hiddifypanel/models/__init__.py +1 -1
- hiddifypanel/models/admin.py +9 -2
- hiddifypanel/models/base_account.py +3 -1
- hiddifypanel/models/config.py +10 -19
- hiddifypanel/models/config_enum.py +18 -6
- hiddifypanel/models/domain.py +82 -118
- hiddifypanel/models/user.py +44 -24
- hiddifypanel/panel/admin/Actions.py +6 -11
- hiddifypanel/panel/admin/AdminstratorAdmin.py +3 -9
- hiddifypanel/panel/admin/Backup.py +5 -8
- hiddifypanel/panel/admin/Dashboard.py +3 -4
- hiddifypanel/panel/admin/DomainAdmin.py +20 -15
- hiddifypanel/panel/admin/ProxyAdmin.py +3 -10
- hiddifypanel/panel/admin/QuickSetup.py +1 -1
- hiddifypanel/panel/admin/SettingAdmin.py +7 -5
- hiddifypanel/panel/admin/Terminal.py +0 -1
- hiddifypanel/panel/admin/UserAdmin.py +4 -3
- hiddifypanel/panel/admin/templates/model/proxydetail_list.html +6 -0
- hiddifypanel/panel/cli.py +36 -23
- hiddifypanel/panel/commercial/ProxyDetailsAdmin.py +15 -5
- hiddifypanel/panel/commercial/restapi/v1/tgbot.py +7 -4
- hiddifypanel/panel/commercial/restapi/v2/admin/__init__.py +17 -13
- hiddifypanel/panel/commercial/restapi/v2/admin/admin_info_api.py +4 -3
- hiddifypanel/panel/commercial/restapi/v2/admin/admin_user_api.py +28 -10
- hiddifypanel/panel/commercial/restapi/v2/admin/admin_users_api.py +2 -19
- hiddifypanel/panel/commercial/restapi/v2/admin/schema.py +27 -4
- hiddifypanel/panel/commercial/restapi/v2/admin/user_api.py +28 -9
- hiddifypanel/panel/commercial/restapi/v2/admin/users_api.py +1 -21
- hiddifypanel/panel/commercial/restapi/v2/parent/register_api.py +1 -1
- hiddifypanel/panel/commercial/restapi/v2/parent/schema.py +8 -4
- hiddifypanel/panel/commercial/restapi/v2/parent/sync_api.py +19 -3
- hiddifypanel/panel/commercial/restapi/v2/user/configs_api.py +48 -42
- hiddifypanel/panel/commercial/telegrambot/Usage.py +1 -1
- hiddifypanel/panel/commercial/telegrambot/admin.py +1 -1
- hiddifypanel/panel/commercial/telegrambot/information.py +1 -1
- hiddifypanel/panel/common.py +5 -11
- hiddifypanel/panel/hiddify.py +9 -20
- hiddifypanel/panel/init_db.py +41 -24
- hiddifypanel/panel/usage.py +38 -9
- hiddifypanel/panel/user/user.py +52 -32
- hiddifypanel/templates/admin-layout.html +2 -2
- hiddifypanel/templates/fake.html +316 -0
- hiddifypanel/translations/en/LC_MESSAGES/messages.mo +0 -0
- hiddifypanel/translations/en/LC_MESSAGES/messages.po +107 -45
- hiddifypanel/translations/fa/LC_MESSAGES/messages.mo +0 -0
- hiddifypanel/translations/fa/LC_MESSAGES/messages.po +102 -36
- hiddifypanel/translations/pt/LC_MESSAGES/messages.mo +0 -0
- hiddifypanel/translations/pt/LC_MESSAGES/messages.po +64 -7
- hiddifypanel/translations/ru/LC_MESSAGES/messages.mo +0 -0
- hiddifypanel/translations/ru/LC_MESSAGES/messages.po +161 -78
- hiddifypanel/translations/zh/LC_MESSAGES/messages.mo +0 -0
- hiddifypanel/translations/zh/LC_MESSAGES/messages.po +63 -6
- hiddifypanel/translations.i18n/en.json +83 -42
- hiddifypanel/translations.i18n/fa.json +73 -32
- hiddifypanel/translations.i18n/pt.json +45 -4
- hiddifypanel/translations.i18n/ru.json +113 -72
- hiddifypanel/translations.i18n/zh.json +44 -3
- {hiddifypanel-10.20.3.dist-info → hiddifypanel-10.30.0.dist-info}/METADATA +2 -1
- {hiddifypanel-10.20.3.dist-info → hiddifypanel-10.30.0.dist-info}/RECORD +83 -82
- {hiddifypanel-10.20.3.dist-info → hiddifypanel-10.30.0.dist-info}/WHEEL +1 -1
- hiddifypanel/panel/cf_api.py +0 -37
- {hiddifypanel-10.20.3.dist-info → hiddifypanel-10.30.0.dist-info}/LICENSE.md +0 -0
- {hiddifypanel-10.20.3.dist-info → hiddifypanel-10.30.0.dist-info}/entry_points.txt +0 -0
- {hiddifypanel-10.20.3.dist-info → hiddifypanel-10.30.0.dist-info}/top_level.txt +0 -0
hiddifypanel/panel/user/user.py
CHANGED
@@ -18,45 +18,43 @@ from hiddifypanel import hutils
|
|
18
18
|
|
19
19
|
class UserView(FlaskView):
|
20
20
|
|
21
|
-
@route('/useragent/')
|
22
|
-
@login_required(roles={Role.user})
|
23
|
-
def test(self):
|
24
|
-
ua = request.user_agent.string
|
25
|
-
print(ua)
|
26
|
-
return ua
|
27
|
-
|
28
21
|
def index(self):
|
29
22
|
return self.auto_sub()
|
30
23
|
|
31
24
|
def auto_sub(self):
|
32
25
|
if g.user_agent['is_browser']:
|
33
26
|
return self.new()
|
34
|
-
return self.get_proper_config() or self.
|
27
|
+
return self.get_proper_config() or self.links_imp(base64=True)
|
35
28
|
|
36
29
|
# former /sub/ or /sub (it was auto actually but we named it as /sub/)
|
37
30
|
@route('/auto/')
|
38
31
|
@route('/auto')
|
39
32
|
@login_required(roles={Role.user})
|
40
33
|
def force_sub(self):
|
41
|
-
return self.get_proper_config() or self.
|
34
|
+
return self.get_proper_config() or self.links_imp(base64=False)
|
42
35
|
|
43
36
|
# region new endpoints
|
44
37
|
@route("/sub/")
|
45
38
|
@route("/sub")
|
46
39
|
@login_required(roles={Role.user})
|
47
40
|
def sub(self):
|
48
|
-
|
41
|
+
'''Returns proxy links (not base64 encoded)'''
|
42
|
+
return self.links_imp(base64=False)
|
49
43
|
|
50
44
|
@route("/sub64/")
|
51
45
|
@route("/sub64")
|
52
46
|
@login_required(roles={Role.user})
|
53
47
|
def sub64(self):
|
54
|
-
|
48
|
+
'''Returns proxy links (base64 encoded)'''
|
49
|
+
return self.links_imp(base64=True)
|
55
50
|
|
56
51
|
@route("/xray/")
|
57
52
|
@route("/xray")
|
58
53
|
@login_required(roles={Role.user})
|
59
54
|
def xray(self):
|
55
|
+
'''Returns Xray JSON proxy config'''
|
56
|
+
# if not hconfig(ConfigEnum.sub_full_xray_json_enable):
|
57
|
+
# return 'The Full Xray subscription is disabled'
|
60
58
|
c = get_common_data(g.account.uuid, mode="new")
|
61
59
|
configs = hutils.proxy.xrayjson.configs_as_json(c['domains'], c['user'], c['expire_days'], c['profile_title'])
|
62
60
|
return add_headers(configs, c, 'application/json')
|
@@ -65,25 +63,29 @@ class UserView(FlaskView):
|
|
65
63
|
@route("/singbox")
|
66
64
|
@login_required(roles={Role.user})
|
67
65
|
def singbox_full(self):
|
68
|
-
|
66
|
+
'''Returns singbox client JSON config'''
|
67
|
+
return self.full_singbox_imp()
|
69
68
|
|
70
69
|
@route("/singbox-ssh/")
|
71
70
|
@route("/singbox-ssh")
|
72
71
|
@login_required(roles={Role.user})
|
73
72
|
def singbox_ssh(self):
|
74
|
-
|
73
|
+
'''Returns singbox client JSON config (ssh)'''
|
74
|
+
return self.singbox_ssh_imp()
|
75
75
|
|
76
76
|
@route("/clash/")
|
77
77
|
@route("/clash")
|
78
78
|
@login_required(roles={Role.user})
|
79
79
|
def clash(self):
|
80
|
-
|
80
|
+
'''Returns clash client config'''
|
81
|
+
return self.clash_config_imp(meta_or_normal="normal")
|
81
82
|
|
82
83
|
@route("/clashmeta/")
|
83
84
|
@route("/clashmeta")
|
84
85
|
@login_required(roles={Role.user})
|
85
86
|
def clashmeta(self):
|
86
|
-
|
87
|
+
'''Returns clash meta client config'''
|
88
|
+
return self.clash_config_imp(meta_or_normal="meta")
|
87
89
|
# endregion
|
88
90
|
|
89
91
|
@ route('/new/')
|
@@ -100,26 +102,28 @@ class UserView(FlaskView):
|
|
100
102
|
return render_template('new.html', **c, ua=user_agent)
|
101
103
|
|
102
104
|
def get_proper_config(self):
|
105
|
+
'''Returns proper config based on user agent'''
|
103
106
|
if g.user_agent['is_browser']:
|
104
107
|
return None
|
108
|
+
|
105
109
|
ua = request.user_agent.string
|
106
110
|
if g.user_agent['is_singbox'] or re.match('^(HiddifyNext|Dart|SFI|SFA)', ua, re.IGNORECASE):
|
107
|
-
return self.
|
111
|
+
return self.full_singbox_imp()
|
108
112
|
|
109
113
|
if re.match('^(Clash-verge|Clash-?Meta|Stash|NekoBox|NekoRay|Pharos|hiddify-desktop)', ua, re.IGNORECASE):
|
110
|
-
return self.
|
114
|
+
return self.clash_config_imp(meta_or_normal="meta")
|
111
115
|
if re.match('^(Clash|Stash)', ua, re.IGNORECASE):
|
112
|
-
return self.
|
116
|
+
return self.clash_config_imp(meta_or_normal="normal")
|
113
117
|
|
114
|
-
if
|
115
|
-
return
|
118
|
+
if hconfig(ConfigEnum.sub_full_xray_json_enable):
|
119
|
+
# return the old "Subscription link b64" sub if the "Full Xray" sub is disabled (wanted by user)
|
120
|
+
if g.user_agent.get('is_v2rayng') and hutils.flask.is_client_version(hutils.flask.ClientVersion.v2ryang, 1, 8, 17):
|
121
|
+
return self.xray()
|
122
|
+
elif g.user_agent.get('is_streisand'):
|
123
|
+
return self.xray()
|
116
124
|
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
# if any([p in ua for p in ['FoXray', 'HiddifyNG','Fair%20VPN' ,'v2rayNG', 'SagerNet']]):
|
121
|
-
if re.match('^(Hiddify|FoXray|Fair|v2rayNG|SagerNet|Shadowrocket|V2Box|Loon|Liberty)', ua, re.IGNORECASE):
|
122
|
-
return self.all_configs(base64=True)
|
125
|
+
if re.match('^(Hiddify|FoXray|Fair|v2rayNG|SagerNet|Shadowrocket|V2Box|Loon|Liberty|Streisand)', ua, re.IGNORECASE):
|
126
|
+
return self.links_imp(base64=True)
|
123
127
|
|
124
128
|
@route('/clash/<meta_or_normal>/proxies.yml')
|
125
129
|
@route('/clash/proxies.yml')
|
@@ -176,8 +180,12 @@ class UserView(FlaskView):
|
|
176
180
|
@ route('/clash/<typ>.yml', methods=["GET", "HEAD"])
|
177
181
|
@ route('/clash/<meta_or_normal>/<typ>.yml', methods=["GET", "HEAD"])
|
178
182
|
@login_required(roles={Role.user})
|
179
|
-
def
|
183
|
+
def clash_config_imp(self, meta_or_normal="normal", typ="all.yml"):
|
180
184
|
mode = request.args.get("mode")
|
185
|
+
if meta_or_normal == 'meta' and not hconfig(ConfigEnum.sub_full_clash_meta_enable):
|
186
|
+
return 'The Clash meta subscription is disabled'
|
187
|
+
elif meta_or_normal == 'normal' and not hconfig(ConfigEnum.sub_full_clash_enable):
|
188
|
+
return 'The Clash subscription is disabled'
|
181
189
|
|
182
190
|
c = get_common_data(g.account.uuid, mode)
|
183
191
|
|
@@ -192,7 +200,10 @@ class UserView(FlaskView):
|
|
192
200
|
|
193
201
|
@ route('/full-singbox.json', methods=["GET", "HEAD"])
|
194
202
|
@login_required(roles={Role.user})
|
195
|
-
def
|
203
|
+
def full_singbox_imp(self):
|
204
|
+
# if not hconfig(ConfigEnum.sub_full_singbox_enable):
|
205
|
+
# return 'The Full Singbox subscription is disabled'
|
206
|
+
|
196
207
|
mode = "new" # request.args.get("mode")
|
197
208
|
c = get_common_data(g.account.uuid, mode)
|
198
209
|
# response.content_type = 'text/plain';
|
@@ -205,9 +216,12 @@ class UserView(FlaskView):
|
|
205
216
|
|
206
217
|
@ route('/singbox.json', methods=["GET", "HEAD"])
|
207
218
|
@login_required(roles={Role.user})
|
208
|
-
def
|
219
|
+
def singbox_ssh_imp(self):
|
209
220
|
if not hconfig(ConfigEnum.ssh_server_enable):
|
210
|
-
return "SSH server is
|
221
|
+
return "The SSH server is disabled"
|
222
|
+
# elif not hconfig(ConfigEnum.sub_singbox_ssh_enable):
|
223
|
+
# return "The Singbox: SSH subscription is disabled"
|
224
|
+
|
211
225
|
mode = "new" # request.args.get("mode")
|
212
226
|
c = get_common_data(g.account.uuid, mode)
|
213
227
|
# response.content_type = 'text/plain';
|
@@ -221,9 +235,15 @@ class UserView(FlaskView):
|
|
221
235
|
|
222
236
|
@route('/all.txt', methods=["GET", "HEAD"])
|
223
237
|
@login_required(roles={Role.user})
|
224
|
-
def
|
238
|
+
def links_imp(self, base64=False):
|
239
|
+
'''Returns subscription links (base64 or not)'''
|
225
240
|
mode = "new" # request.args.get("mode")
|
226
241
|
base64 = base64 or request.args.get("base64", "").lower() == "true"
|
242
|
+
# if base64 and not hconfig(ConfigEnum.sub_full_links_b64_enable):
|
243
|
+
# return 'The Subscription link b64 is disabled'
|
244
|
+
# if not base64 and not hconfig(ConfigEnum.sub_full_links_enable):
|
245
|
+
# return 'The Subscription link is disabled'
|
246
|
+
|
227
247
|
c = get_common_data(g.account.uuid, mode)
|
228
248
|
# response.content_type = 'text/plain';
|
229
249
|
if request.method == 'HEAD':
|
@@ -346,7 +366,7 @@ def get_common_data(user_uuid, mode, no_domain=False, filter_domain=None):
|
|
346
366
|
'expire_rel': hutils.convert.format_timedelta(datetime.timedelta(days=expire_days)),
|
347
367
|
'reset_day': reset_days,
|
348
368
|
'hconfigs': get_hconfigs(),
|
349
|
-
'hdomains':
|
369
|
+
'hdomains': Domain.modes_and_domains(),
|
350
370
|
'ConfigEnum': ConfigEnum,
|
351
371
|
'link_maker': hutils.proxy,
|
352
372
|
'domains': domains,
|
@@ -85,13 +85,13 @@
|
|
85
85
|
{{ render_nav_item('admin.Dashboard:index', icon('solid','house','nav-icon')+(_("Parent Panel") if hutils.node.is_parent() else _('admin.menu.home')),_use_li=True)}}
|
86
86
|
|
87
87
|
{% if hutils.node.is_child() %}
|
88
|
-
{{ render_nav_item(hconfig(ConfigEnum.parent_panel)+"
|
88
|
+
{{ render_nav_item(hconfig(ConfigEnum.parent_panel)+"admin/user/",icon('solid','user-secret','nav-icon')+_('admin.menu.user'),_badge=_('in parent panel') ,_use_li=True) }}
|
89
89
|
{% else %}
|
90
90
|
{{ render_nav_item('flask.user.index_view', icon('solid','user','nav-icon')+_('admin.menu.user'),_use_li=True)}}
|
91
91
|
{% endif %}
|
92
92
|
|
93
93
|
{% if hutils.node.is_child() %}
|
94
|
-
{{ render_nav_item(hconfig(ConfigEnum.parent_panel)+"
|
94
|
+
{{ render_nav_item(hconfig(ConfigEnum.parent_panel)+"admin/adminuser/",icon('solid','user-secret','nav-icon')+_('Admins'),_badge=_('in parent panel') ,_use_li=True) }}
|
95
95
|
{% else %}
|
96
96
|
{{ render_nav_item('flask.adminuser.index_view', icon('solid','user-secret','nav-icon')+_('Admins'),_use_li=True) }}
|
97
97
|
{% endif %}
|
hiddifypanel/templates/fake.html
CHANGED
@@ -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
|
+
|
Binary file
|