hiddifypanel 10.20.1__py3-none-any.whl → 10.20.3__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 +1 -1
- hiddifypanel/hutils/proxy/xray.py +27 -29
- hiddifypanel/hutils/proxy/xrayjson.py +72 -35
- hiddifypanel/panel/admin/SettingAdmin.py +4 -2
- hiddifypanel/panel/user/user.py +3 -3
- hiddifypanel/translations/en/LC_MESSAGES/messages.mo +0 -0
- hiddifypanel/translations/en/LC_MESSAGES/messages.po +6 -3
- hiddifypanel/translations/fa/LC_MESSAGES/messages.mo +0 -0
- hiddifypanel/translations/fa/LC_MESSAGES/messages.po +6 -3
- hiddifypanel/translations/pt/LC_MESSAGES/messages.mo +0 -0
- hiddifypanel/translations/pt/LC_MESSAGES/messages.po +6 -3
- hiddifypanel/translations/ru/LC_MESSAGES/messages.mo +0 -0
- hiddifypanel/translations/ru/LC_MESSAGES/messages.po +6 -3
- hiddifypanel/translations/zh/LC_MESSAGES/messages.mo +0 -0
- hiddifypanel/translations/zh/LC_MESSAGES/messages.po +6 -3
- hiddifypanel/translations.i18n/en.json +3 -2
- hiddifypanel/translations.i18n/fa.json +3 -2
- hiddifypanel/translations.i18n/pt.json +3 -2
- hiddifypanel/translations.i18n/ru.json +3 -2
- hiddifypanel/translations.i18n/zh.json +3 -2
- {hiddifypanel-10.20.1.dist-info → hiddifypanel-10.20.3.dist-info}/METADATA +1 -1
- {hiddifypanel-10.20.1.dist-info → hiddifypanel-10.20.3.dist-info}/RECORD +27 -27
- {hiddifypanel-10.20.1.dist-info → hiddifypanel-10.20.3.dist-info}/LICENSE.md +0 -0
- {hiddifypanel-10.20.1.dist-info → hiddifypanel-10.20.3.dist-info}/WHEEL +0 -0
- {hiddifypanel-10.20.1.dist-info → hiddifypanel-10.20.3.dist-info}/entry_points.txt +0 -0
- {hiddifypanel-10.20.1.dist-info → hiddifypanel-10.20.3.dist-info}/top_level.txt +0 -0
hiddifypanel/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
10.20.
|
1
|
+
10.20.3
|
hiddifypanel/VERSION.py
CHANGED
@@ -3,7 +3,7 @@ import json
|
|
3
3
|
import copy
|
4
4
|
from flask import render_template, request, g
|
5
5
|
from hiddifypanel import hutils
|
6
|
-
from hiddifypanel.models import
|
6
|
+
from hiddifypanel.models import ProxyTransport, ProxyL3, ProxyProto, Domain, User, ConfigEnum, hconfig
|
7
7
|
from flask_babel import gettext as _
|
8
8
|
|
9
9
|
OUTBOUND_LEVEL = 8
|
@@ -145,46 +145,44 @@ def to_link(proxy: dict) -> str | dict:
|
|
145
145
|
return proxy
|
146
146
|
|
147
147
|
|
148
|
-
def make_v2ray_configs(
|
148
|
+
def make_v2ray_configs(domains: list[Domain], user: User, expire_days: int, ip_debug=None) -> str:
|
149
149
|
res = []
|
150
150
|
|
151
|
-
|
152
|
-
if hconfig(ConfigEnum.show_usage_in_sublink):
|
151
|
+
if hconfig(ConfigEnum.show_usage_in_sublink) and not g.user_agent.get('is_hiddify'):
|
153
152
|
|
154
|
-
|
153
|
+
fake_ip_for_sub_link = datetime.datetime.now().strftime(f"%H.%M--%Y.%m.%d.time:%H%M")
|
154
|
+
# if ua['app'] == "Fair1":
|
155
|
+
# res.append(f'trojan://1@{fake_ip_for_sub_link}?sni=fake_ip_for_sub_link&security=tls#{round(user.current_usage_GB,3)}/{user.usage_limit_GB}GB_Remain:{expire_days}days')
|
156
|
+
# else:
|
155
157
|
|
156
|
-
|
157
|
-
# if ua['app'] == "Fair1":
|
158
|
-
# res.append(f'trojan://1@{fake_ip_for_sub_link}?sni=fake_ip_for_sub_link&security=tls#{round(user.current_usage_GB,3)}/{user.usage_limit_GB}GB_Remain:{expire_days}days')
|
159
|
-
# else:
|
158
|
+
# res.append(f'trojan://1@{fake_ip_for_sub_link}?sni=fake_ip_for_sub_link&security=tls#{hutils.encode.url_encode(profile_title)}')
|
160
159
|
|
161
|
-
|
162
|
-
|
163
|
-
name
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
res.append("#No Time Limit")
|
160
|
+
name = '⏳ ' if user.is_active else '✖ '
|
161
|
+
if user.usage_limit_GB < 1000:
|
162
|
+
name += f'{round(user.current_usage_GB,3)}/{str(user.usage_limit_GB).replace(".0","")}GB'
|
163
|
+
elif user.usage_limit_GB < 100000:
|
164
|
+
name += f'{round(user.current_usage_GB/1000,3)}/{str(round(user.usage_limit_GB/1000,1)).replace(".0","")}TB'
|
165
|
+
else:
|
166
|
+
res.append("#No Usage Limit")
|
167
|
+
name += " 📅 "
|
168
|
+
if expire_days < 1000:
|
169
|
+
name += _(f'%(expire_days)s days', expire_days=expire_days)
|
170
|
+
else:
|
171
|
+
res.append("#No Time Limit")
|
174
172
|
|
175
|
-
|
176
|
-
|
177
|
-
|
173
|
+
name = name.strip()
|
174
|
+
if len(name) > 3:
|
175
|
+
res.append(f'trojan://1@{fake_ip_for_sub_link}?sni=fake_ip_for_sub_link&security=tls#{hutils.encode.url_encode(name)}')
|
178
176
|
|
179
|
-
if
|
177
|
+
if g.user_agent.get('is_browser') and ip_debug:
|
180
178
|
res.append(f'#Hiddify auto ip: {ip_debug}')
|
181
179
|
|
182
|
-
if not
|
180
|
+
if not user.is_active:
|
183
181
|
|
184
182
|
if hconfig(ConfigEnum.lang) == 'fa':
|
185
|
-
res.append('trojan://1@1.1.1.1#' + hutils.encode.url_encode('
|
183
|
+
res.append('trojan://1@1.1.1.1#' + hutils.encode.url_encode('✖ بسته شما به پایان رسید'))
|
186
184
|
else:
|
187
|
-
res.append('trojan://1@1.1.1.1#' + hutils.encode.url_encode('✖
|
185
|
+
res.append('trojan://1@1.1.1.1#' + hutils.encode.url_encode('✖ Package Ended'))
|
188
186
|
return "\n".join(res)
|
189
187
|
|
190
188
|
for pinfo in hutils.proxy.get_valid_proxies(domains):
|
@@ -2,55 +2,87 @@ import json
|
|
2
2
|
import copy
|
3
3
|
from flask import render_template, g
|
4
4
|
from hiddifypanel import hutils
|
5
|
-
from hiddifypanel.models import ProxyTransport, ProxyL3, ProxyProto, Domain
|
5
|
+
from hiddifypanel.models import ProxyTransport, ProxyL3, ProxyProto, Domain, User
|
6
6
|
from flask_babel import gettext as _
|
7
|
+
from hiddifypanel.models import hconfig, ConfigEnum
|
7
8
|
from .xray import is_muxable_agent
|
8
9
|
OUTBOUND_LEVEL = 8
|
9
10
|
|
10
11
|
|
11
|
-
def configs_as_json(domains: list[Domain], remarks: str) -> str:
|
12
|
+
def configs_as_json(domains: list[Domain], user: User, expire_days: int, remarks: str) -> str:
|
12
13
|
'''Returns xray configs as json'''
|
13
|
-
outbounds = []
|
14
|
-
|
15
|
-
# TODO: check what are unsupported protocols in other apps
|
16
|
-
unsupported_protos = {}
|
17
|
-
if g.user_agent.get('is_v2rayng'):
|
18
|
-
# TODO: ensure which protocols are not supported in v2rayng
|
19
|
-
unsupported_protos = {ProxyProto.wireguard, ProxyProto.hysteria, ProxyProto.hysteria2, ProxyProto.tuic, ProxyProto.ss, ProxyProto.ssr, ProxyProto.ssh}
|
20
|
-
|
21
|
-
for proxy in hutils.proxy.get_valid_proxies(domains):
|
22
|
-
if unsupported_protos and proxy['proto'] in unsupported_protos:
|
23
|
-
continue
|
24
|
-
outbound = to_xray(proxy)
|
25
|
-
if 'msg' not in outbound:
|
26
|
-
outbounds.append(outbound)
|
27
|
-
|
28
|
-
outbounds_len = len(outbounds)
|
29
|
-
# reutrn no outbound
|
30
|
-
if outbounds_len < 1:
|
31
|
-
return ''
|
32
14
|
|
33
15
|
all_configs = []
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
16
|
+
if hconfig(ConfigEnum.show_usage_in_sublink) and not g.user_agent.get('is_hiddify'):
|
17
|
+
# determine usages
|
18
|
+
tag = '⏳ ' if user.is_active else '✖ '
|
19
|
+
if user.usage_limit_GB < 1000:
|
20
|
+
tag += f'{round(user.current_usage_GB,3)}/{str(user.usage_limit_GB).replace(".0","")}GB'
|
21
|
+
elif user.usage_limit_GB < 100000:
|
22
|
+
tag += f'{round(user.current_usage_GB/1000,3)}/{str(round(user.usage_limit_GB/1000,1)).replace(".0","")}TB'
|
23
|
+
else:
|
24
|
+
tag += '#No Usage Limit'
|
25
|
+
tag += ' 📅 '
|
26
|
+
if expire_days < 1000:
|
27
|
+
tag += _(f'%(expire_days)s days', expire_days=expire_days)
|
28
|
+
else:
|
29
|
+
tag += '#No Time Limit'
|
30
|
+
tag = tag.strip()
|
31
|
+
|
32
|
+
# add usage as a config
|
33
|
+
all_configs.append(
|
34
|
+
null_config(tag)
|
35
|
+
)
|
36
|
+
|
37
|
+
active = True
|
38
|
+
if not user.is_active:
|
39
|
+
tag = '✖ ' + (hutils.encode.url_encode('بسته شما به پایان رسید') if hconfig(ConfigEnum.lang) == 'fa' else 'Package Ended')
|
40
|
+
# add user status
|
41
|
+
all_configs.append(
|
42
|
+
null_config(tag)
|
43
|
+
)
|
44
|
+
active = False
|
45
|
+
|
46
|
+
if active:
|
47
|
+
# TODO: check what are unsupported protocols in other apps
|
48
|
+
unsupported_protos = {}
|
49
|
+
if g.user_agent.get('is_v2rayng'):
|
50
|
+
# TODO: ensure which protocols are not supported in v2rayng
|
51
|
+
unsupported_protos = {ProxyProto.wireguard, ProxyProto.hysteria, ProxyProto.hysteria2, ProxyProto.tuic, ProxyProto.ss, ProxyProto.ssr, ProxyProto.ssh}
|
52
|
+
|
53
|
+
# multiple outbounds needs multiple whole base config not just one with multiple outbounds (at least for v2rayng)
|
54
|
+
# https://github.com/2dust/v2rayNG/pull/2827#issue-2127534078
|
55
|
+
outbounds = []
|
56
|
+
for proxy in hutils.proxy.get_valid_proxies(domains):
|
57
|
+
if unsupported_protos and proxy['proto'] in unsupported_protos:
|
58
|
+
continue
|
59
|
+
outbound = to_xray(proxy)
|
60
|
+
if 'msg' not in outbound:
|
61
|
+
outbounds.append(outbound)
|
62
|
+
|
63
|
+
base_config = json.loads(render_template('base_xray_config.json.j2', remarks=remarks))
|
64
|
+
if len(outbounds) > 1:
|
65
|
+
for out in outbounds:
|
66
|
+
base_config['remarks'] = out['tag']
|
67
|
+
base_config['outbounds'].insert(0, out)
|
68
|
+
if all_configs:
|
69
|
+
all_configs.insert(0, copy.deepcopy(base_config))
|
70
|
+
else:
|
71
|
+
all_configs.append(copy.deepcopy(base_config))
|
72
|
+
del base_config['outbounds'][0]
|
73
|
+
else: # single outbound
|
74
|
+
base_config['outbounds'].insert(0, outbounds[0])
|
75
|
+
all_configs = base_config
|
76
|
+
|
77
|
+
if not all_configs:
|
78
|
+
return ''
|
47
79
|
json_configs = json.dumps(all_configs, indent=2, cls=hutils.proxy.ProxyJsonEncoder)
|
48
80
|
return json_configs
|
49
81
|
|
50
82
|
|
51
83
|
def to_xray(proxy: dict) -> dict:
|
52
84
|
outbound = {
|
53
|
-
'tag': f'{proxy["extra_info"]} {proxy["name"]}
|
85
|
+
'tag': f'{proxy["extra_info"]} {proxy["name"]}',
|
54
86
|
'protocol': str(proxy['proto']),
|
55
87
|
'settings': {},
|
56
88
|
'streamSettings': {},
|
@@ -397,3 +429,8 @@ def add_mux_to_link(proxy: dict) -> str:
|
|
397
429
|
out = {}
|
398
430
|
add_mux_to_dict(out, proxy)
|
399
431
|
return hutils.encode.convert_dict_to_url(out)
|
432
|
+
|
433
|
+
|
434
|
+
def null_config(tag: str) -> dict:
|
435
|
+
base_config = json.loads(render_template('base_xray_config.json.j2', remarks=tag))
|
436
|
+
return base_config
|
@@ -55,7 +55,9 @@ class SettingAdmin(FlaskView):
|
|
55
55
|
if k.type == str:
|
56
56
|
if "_domain" in k or "_fakedomain" in k:
|
57
57
|
v = v.lower()
|
58
|
-
|
58
|
+
if k == ConfigEnum.warp_sites and 'https://' in v:
|
59
|
+
hutils.flask.flash(_("config.warp-https-domain-for-warp-site"), 'error')
|
60
|
+
return render_template('config.html', form=form)
|
59
61
|
if "port" in k:
|
60
62
|
for p in v.split(","):
|
61
63
|
for k2, v2 in c_items.items():
|
@@ -249,7 +251,7 @@ def get_config_form():
|
|
249
251
|
|
250
252
|
elif c.key == ConfigEnum.warp_sites:
|
251
253
|
validators = [wtf.validators.Length(max=2048),
|
252
|
-
wtf.validators.Regexp(r'^([\w.-]+)?(?:\n
|
254
|
+
wtf.validators.Regexp(r'^(?:[\w.-]+\.\w+(?:\.\w+)?(?:\r?\n|$)|^$)', 0, _("config.invalid-pattern-for-warp-sites") + f' {c.key}')
|
253
255
|
]
|
254
256
|
render_kw = {'class': "ltr", 'maxlength': 2048}
|
255
257
|
field = wtf.TextAreaField(_(f'config.{c.key}.label'), validators, default=c.value,
|
hiddifypanel/panel/user/user.py
CHANGED
@@ -57,8 +57,8 @@ class UserView(FlaskView):
|
|
57
57
|
@route("/xray")
|
58
58
|
@login_required(roles={Role.user})
|
59
59
|
def xray(self):
|
60
|
-
c =
|
61
|
-
configs = hutils.proxy.xrayjson.configs_as_json(c['domains'], c['profile_title'])
|
60
|
+
c = get_common_data(g.account.uuid, mode="new")
|
61
|
+
configs = hutils.proxy.xrayjson.configs_as_json(c['domains'], c['user'], c['expire_days'], c['profile_title'])
|
62
62
|
return add_headers(configs, c, 'application/json')
|
63
63
|
|
64
64
|
@route("/singbox/")
|
@@ -230,7 +230,7 @@ class UserView(FlaskView):
|
|
230
230
|
resp = ""
|
231
231
|
else:
|
232
232
|
# render_template('all_configs.txt', **c, base64=hutils.encode.do_base_64)
|
233
|
-
resp = hutils.proxy.xray.make_v2ray_configs(
|
233
|
+
resp = hutils.proxy.xray.make_v2ray_configs(c['domains'], c['user'], c['expire_days'], c['ip_debug'])
|
234
234
|
|
235
235
|
if base64:
|
236
236
|
resp = hutils.encode.do_base_64(resp)
|
Binary file
|
@@ -11,6 +11,9 @@ msgstr "%(count)s records were successfully disabled."
|
|
11
11
|
msgid "%(count)s records were successfully enabled."
|
12
12
|
msgstr "%(count)s records were successfully enabled."
|
13
13
|
|
14
|
+
msgid "%(expire_days)s days"
|
15
|
+
msgstr "%(expire_days)s days"
|
16
|
+
|
14
17
|
msgid "%(placeholder)s"
|
15
18
|
msgstr "%(placeholder)s"
|
16
19
|
|
@@ -2162,6 +2165,9 @@ msgstr "Active VMess Protocol"
|
|
2162
2165
|
msgid "config.vmess_enable.label"
|
2163
2166
|
msgstr "♈️ Enable VMess"
|
2164
2167
|
|
2168
|
+
msgid "config.warp-https-domain-for-warp-site"
|
2169
|
+
msgstr "config.warp-https-domain-for-warp-site"
|
2170
|
+
|
2165
2171
|
msgid "config.warp.description"
|
2166
2172
|
msgstr ""
|
2167
2173
|
"Warp is a tool that hides your server IP in outbound traffic. It means if the users are visiting a website the Warp IP is exposed instead of our server IP.\n"
|
@@ -2812,6 +2818,3 @@ msgstr "📅 Weekly"
|
|
2812
2818
|
|
2813
2819
|
msgid "worker"
|
2814
2820
|
msgstr "✴️ Cloudflare Worker"
|
2815
|
-
|
2816
|
-
msgid "📅%(expire_days)s days"
|
2817
|
-
msgstr "📅%(expire_days)s Days Remain"
|
Binary file
|
@@ -11,6 +11,9 @@ msgstr "%(count)s رکورد با موفقیت غیرفعال شد."
|
|
11
11
|
msgid "%(count)s records were successfully enabled."
|
12
12
|
msgstr "%(count)s رکوردها با موفقیت فعال شد."
|
13
13
|
|
14
|
+
msgid "%(expire_days)s days"
|
15
|
+
msgstr ""
|
16
|
+
|
14
17
|
msgid "%(placeholder)s"
|
15
18
|
msgstr "%(placeholder)s"
|
16
19
|
|
@@ -2157,6 +2160,9 @@ msgstr "فعال کردن پروتکل VMess"
|
|
2157
2160
|
msgid "config.vmess_enable.label"
|
2158
2161
|
msgstr "♈️ فعال کردن VMess"
|
2159
2162
|
|
2163
|
+
msgid "config.warp-https-domain-for-warp-site"
|
2164
|
+
msgstr ""
|
2165
|
+
|
2160
2166
|
msgid "config.warp.description"
|
2161
2167
|
msgstr ""
|
2162
2168
|
"وارپ ابزاری هست که آی پی سرور شما را در ترافیک خروجی مخفی میکند. بدین صورت وقتی کاربران از وبسایتی بازدید میکنند، آیپی وارپ به جای آیپی سرور شما نمایش داده میشود.\n"
|
@@ -2812,6 +2818,3 @@ msgstr "📅 هفتگی"
|
|
2812
2818
|
|
2813
2819
|
msgid "worker"
|
2814
2820
|
msgstr "✴️ ورکر کلودفلر"
|
2815
|
-
|
2816
|
-
msgid "📅%(expire_days)s days"
|
2817
|
-
msgstr "📅%(expire_days)s روز اعتبار"
|
Binary file
|
@@ -11,6 +11,9 @@ msgstr "%(count)s registros foram desativados com sucesso."
|
|
11
11
|
msgid "%(count)s records were successfully enabled."
|
12
12
|
msgstr "%(count)s registros foram ativados com sucesso."
|
13
13
|
|
14
|
+
msgid "%(expire_days)s days"
|
15
|
+
msgstr ""
|
16
|
+
|
14
17
|
msgid "%(placeholder)s"
|
15
18
|
msgstr "%(placeholder)s"
|
16
19
|
|
@@ -2083,6 +2086,9 @@ msgstr ""
|
|
2083
2086
|
msgid "config.vmess_enable.label"
|
2084
2087
|
msgstr "♈️ Habilitar VMess"
|
2085
2088
|
|
2089
|
+
msgid "config.warp-https-domain-for-warp-site"
|
2090
|
+
msgstr ""
|
2091
|
+
|
2086
2092
|
msgid "config.warp.description"
|
2087
2093
|
msgstr ""
|
2088
2094
|
"Warp é uma ferramenta que esconde o IP do seu servidor dos sites onde os usuários navegam \n"
|
@@ -2705,6 +2711,3 @@ msgstr "📅 Semanal"
|
|
2705
2711
|
|
2706
2712
|
msgid "worker"
|
2707
2713
|
msgstr "✴️ Cloudflare Worker"
|
2708
|
-
|
2709
|
-
msgid "📅%(expire_days)s days"
|
2710
|
-
msgstr "📅Remanescem: %(expire_days)s dias"
|
Binary file
|
@@ -11,6 +11,9 @@ msgstr "%(count)s записей были успешно отключены."
|
|
11
11
|
msgid "%(count)s records were successfully enabled."
|
12
12
|
msgstr "%(count)s записей были успешно включены."
|
13
13
|
|
14
|
+
msgid "%(expire_days)s days"
|
15
|
+
msgstr ""
|
16
|
+
|
14
17
|
msgid "%(placeholder)s"
|
15
18
|
msgstr "%(placeholder)s"
|
16
19
|
|
@@ -2178,6 +2181,9 @@ msgstr ""
|
|
2178
2181
|
msgid "config.vmess_enable.label"
|
2179
2182
|
msgstr "♈️ Включить VMess"
|
2180
2183
|
|
2184
|
+
msgid "config.warp-https-domain-for-warp-site"
|
2185
|
+
msgstr ""
|
2186
|
+
|
2181
2187
|
msgid "config.warp.description"
|
2182
2188
|
msgstr ""
|
2183
2189
|
"Warp — это инструмент, который скрывает IP-адрес вашего сервера от сайтов, которые посещают ваши пользователи.\n"
|
@@ -2812,6 +2818,3 @@ msgstr "📅 Еженедельно"
|
|
2812
2818
|
|
2813
2819
|
msgid "worker"
|
2814
2820
|
msgstr "✴️ Cloudflare Worker"
|
2815
|
-
|
2816
|
-
msgid "📅%(expire_days)s days"
|
2817
|
-
msgstr "Осталось 📅%(expire_days)s дней"
|
Binary file
|
@@ -11,6 +11,9 @@ msgstr "%(count)s 条记录已成功禁用。"
|
|
11
11
|
msgid "%(count)s records were successfully enabled."
|
12
12
|
msgstr "%(count)s 条记录已成功启用。"
|
13
13
|
|
14
|
+
msgid "%(expire_days)s days"
|
15
|
+
msgstr ""
|
16
|
+
|
14
17
|
msgid "%(placeholder)s"
|
15
18
|
msgstr "%(placeholder)s"
|
16
19
|
|
@@ -2013,6 +2016,9 @@ msgstr "据多位人士透露,VMess 导致该系统被政府检测到。所以
|
|
2013
2016
|
msgid "config.vmess_enable.label"
|
2014
2017
|
msgstr "♈️启用VMess"
|
2015
2018
|
|
2019
|
+
msgid "config.warp-https-domain-for-warp-site"
|
2020
|
+
msgstr ""
|
2021
|
+
|
2016
2022
|
msgid "config.warp.description"
|
2017
2023
|
msgstr ""
|
2018
2024
|
"Warp 是一种在出站流量中隐藏服务器 IP 的工具。这意味着如果用户访问网站,则暴露的是 Warp IP,而不是我们的服务器 IP。\n"
|
@@ -2623,6 +2629,3 @@ msgstr "📅每周"
|
|
2623
2629
|
|
2624
2630
|
msgid "worker"
|
2625
2631
|
msgstr "✴️ Cloudflare 工作人员"
|
2626
|
-
|
2627
|
-
msgid "📅%(expire_days)s days"
|
2628
|
-
msgstr "📅%(expire_days)s 天剩余"
|
@@ -2,6 +2,7 @@
|
|
2
2
|
" Search Settings": " Search Settings",
|
3
3
|
"%(count)s records were successfully disabled.": "%(count)s records were successfully disabled.",
|
4
4
|
"%(count)s records were successfully enabled.": "%(count)s records were successfully enabled.",
|
5
|
+
"%(expire_days)s days": "%(expire_days)s days",
|
5
6
|
"%(placeholder)s": "%(placeholder)s",
|
6
7
|
"0 - Last day": "Last Day",
|
7
8
|
"Access Denied!": "Access Denied",
|
@@ -906,6 +907,7 @@
|
|
906
907
|
"description": "Active VMess Protocol",
|
907
908
|
"label": "♈️ Enable VMess"
|
908
909
|
},
|
910
|
+
"warp-https-domain-for-warp-site": "config.warp-https-domain-for-warp-site",
|
909
911
|
"warp": {
|
910
912
|
"description": "Warp is a tool that hides your server IP in outbound traffic. It means if the users are visiting a website the Warp IP is exposed instead of our server IP.\n<br>\nFor example, if you have a problem with captcha on Google, it might be fixed this way.",
|
911
913
|
"label": "WARP➕"
|
@@ -1170,6 +1172,5 @@
|
|
1170
1172
|
"user.home.select os": "Please Select Your Operating System.",
|
1171
1173
|
"user.home.select tool": "Please select the item.",
|
1172
1174
|
"weekly": "📅 Weekly",
|
1173
|
-
"worker": "✴️ Cloudflare Worker"
|
1174
|
-
"📅%(expire_days)s days": "📅%(expire_days)s Days Remain"
|
1175
|
+
"worker": "✴️ Cloudflare Worker"
|
1175
1176
|
}
|
@@ -2,6 +2,7 @@
|
|
2
2
|
" Search Settings": " تنظیمات جستجو",
|
3
3
|
"%(count)s records were successfully disabled.": "%(count)s رکورد با موفقیت غیرفعال شد.",
|
4
4
|
"%(count)s records were successfully enabled.": "%(count)s رکوردها با موفقیت فعال شد.",
|
5
|
+
"%(expire_days)s days": "",
|
5
6
|
"%(placeholder)s": "%(placeholder)s",
|
6
7
|
"0 - Last day": "آخرین روز",
|
7
8
|
"Access Denied!": "دسترسی غیرمجاز",
|
@@ -906,6 +907,7 @@
|
|
906
907
|
"description": "فعال کردن پروتکل VMess",
|
907
908
|
"label": "♈️ فعال کردن VMess"
|
908
909
|
},
|
910
|
+
"warp-https-domain-for-warp-site": "",
|
909
911
|
"warp": {
|
910
912
|
"description": "وارپ ابزاری هست که آی پی سرور شما را در ترافیک خروجی مخفی میکند. بدین صورت وقتی کاربران از وبسایتی بازدید میکنند، آیپی وارپ به جای آیپی سرور شما نمایش داده میشود.\n<br>\nبرای مثال اگر با کپچای گوگل مشکل دارید با استفاده از این ابزار مشکل رفع شود",
|
911
913
|
"label": "WARP"
|
@@ -1170,6 +1172,5 @@
|
|
1170
1172
|
"user.home.select os": "لطفا سیستم عامل خود را انتخاب کنید.",
|
1171
1173
|
"user.home.select tool": "لطفا یکی از موارد زیر را انتخاب کنید.",
|
1172
1174
|
"weekly": "📅 هفتگی",
|
1173
|
-
"worker": "✴️ ورکر کلودفلر"
|
1174
|
-
"📅%(expire_days)s days": "📅%(expire_days)s روز اعتبار"
|
1175
|
+
"worker": "✴️ ورکر کلودفلر"
|
1175
1176
|
}
|
@@ -2,6 +2,7 @@
|
|
2
2
|
" Search Settings": " Configurações de pesquisa",
|
3
3
|
"%(count)s records were successfully disabled.": "%(count)s registros foram desativados com sucesso.",
|
4
4
|
"%(count)s records were successfully enabled.": "%(count)s registros foram ativados com sucesso.",
|
5
|
+
"%(expire_days)s days": "",
|
5
6
|
"%(placeholder)s": "%(placeholder)s",
|
6
7
|
"0 - Last day": "Último dia",
|
7
8
|
"Access Denied!": "Acesso negado",
|
@@ -906,6 +907,7 @@
|
|
906
907
|
"description": "É relatado por várias pessoas que o VMess faz com que o sistema seja detectado pelo governo. Então não é recomendado",
|
907
908
|
"label": "♈️ Habilitar VMess"
|
908
909
|
},
|
910
|
+
"warp-https-domain-for-warp-site": "",
|
909
911
|
"warp": {
|
910
912
|
"description": "Warp é uma ferramenta que esconde o IP do seu servidor dos sites onde os usuários navegam \n<br>\nPor exemplo, se você tiver um problema com o Google, ele pode ser corrigido.",
|
911
913
|
"label": "WARP Plus"
|
@@ -1170,6 +1172,5 @@
|
|
1170
1172
|
"user.home.select os": "Selecione seu sistema operacional.",
|
1171
1173
|
"user.home.select tool": "Selecione o item.",
|
1172
1174
|
"weekly": "📅 Semanal",
|
1173
|
-
"worker": "✴️ Cloudflare Worker"
|
1174
|
-
"📅%(expire_days)s days": "📅Remanescem: %(expire_days)s dias"
|
1175
|
+
"worker": "✴️ Cloudflare Worker"
|
1175
1176
|
}
|
@@ -2,6 +2,7 @@
|
|
2
2
|
" Search Settings": " Настройки поиска",
|
3
3
|
"%(count)s records were successfully disabled.": "%(count)s записей были успешно отключены.",
|
4
4
|
"%(count)s records were successfully enabled.": "%(count)s записей были успешно включены.",
|
5
|
+
"%(expire_days)s days": "",
|
5
6
|
"%(placeholder)s": "%(placeholder)s",
|
6
7
|
"0 - Last day": "Последний день",
|
7
8
|
"Access Denied!": "Доступ запрещен",
|
@@ -906,6 +907,7 @@
|
|
906
907
|
"description": "Несколько человек сообщили, что VMess позволляет правительствам обнаруживать систему. Не рекомендуется",
|
907
908
|
"label": "♈️ Включить VMess"
|
908
909
|
},
|
910
|
+
"warp-https-domain-for-warp-site": "",
|
909
911
|
"warp": {
|
910
912
|
"description": "Warp — это инструмент, который скрывает IP-адрес вашего сервера от сайтов, которые посещают ваши пользователи.\n<br>\nНапример, если у вас возникла проблема с Google, ее можно исправить.",
|
911
913
|
"label": "WARP➕"
|
@@ -1170,6 +1172,5 @@
|
|
1170
1172
|
"user.home.select os": "Пожалуйста, выберите вашу операционную систему",
|
1171
1173
|
"user.home.select tool": "Пожалуйста, выберите",
|
1172
1174
|
"weekly": "📅 Еженедельно",
|
1173
|
-
"worker": "✴️ Cloudflare Worker"
|
1174
|
-
"📅%(expire_days)s days": "Осталось 📅%(expire_days)s дней"
|
1175
|
+
"worker": "✴️ Cloudflare Worker"
|
1175
1176
|
}
|
@@ -2,6 +2,7 @@
|
|
2
2
|
" Search Settings": "搜索设置",
|
3
3
|
"%(count)s records were successfully disabled.": "%(count)s 条记录已成功禁用。",
|
4
4
|
"%(count)s records were successfully enabled.": "%(count)s 条记录已成功启用。",
|
5
|
+
"%(expire_days)s days": "",
|
5
6
|
"%(placeholder)s": "%(placeholder)s",
|
6
7
|
"0 - Last day": "最后一天",
|
7
8
|
"Access Denied!": "拒绝访问",
|
@@ -906,6 +907,7 @@
|
|
906
907
|
"description": "据多位人士透露,VMess 导致该系统被政府检测到。所以不推荐",
|
907
908
|
"label": "♈️启用VMess"
|
908
909
|
},
|
910
|
+
"warp-https-domain-for-warp-site": "",
|
909
911
|
"warp": {
|
910
912
|
"description": "Warp 是一种在出站流量中隐藏服务器 IP 的工具。这意味着如果用户访问网站,则暴露的是 Warp IP,而不是我们的服务器 IP。\n<br>\n例如,如果您在 Google 上遇到验证码问题,则可能会通过这种方式修复。",
|
911
913
|
"label": "扭曲➕"
|
@@ -1170,6 +1172,5 @@
|
|
1170
1172
|
"user.home.select os": "请选择您的操作系统。",
|
1171
1173
|
"user.home.select tool": "请选择该项目。",
|
1172
1174
|
"weekly": "📅每周",
|
1173
|
-
"worker": "✴️ Cloudflare 工作人员"
|
1174
|
-
"📅%(expire_days)s days": "📅%(expire_days)s 天剩余"
|
1175
|
+
"worker": "✴️ Cloudflare 工作人员"
|
1175
1176
|
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
hiddifypanel/Events.py,sha256=AlnRdjVul0jP-NCT4-zoaQgowoOo-JhdQB4ytetAFKA,723
|
2
|
-
hiddifypanel/VERSION,sha256=
|
3
|
-
hiddifypanel/VERSION.py,sha256=
|
2
|
+
hiddifypanel/VERSION,sha256=IO52j1jVy4Bis2Net3pg7wjvnYTileI1AjndAMUY60k,8
|
3
|
+
hiddifypanel/VERSION.py,sha256=xehpyJ2UmcW72n7u0fwzKPpwiK3LY3qZXZ1bW7Y4RNI,113
|
4
4
|
hiddifypanel/__init__.py,sha256=aLukp3ORszdcH4G9J-MlxhjHN6yFlOuOE6mm-L3aG_g,266
|
5
5
|
hiddifypanel/__main__.py,sha256=IVchnXpK6bm8T3N--mN17HBQNLMeLAjyP7iwzULexB4,218
|
6
6
|
hiddifypanel/auth.py,sha256=5GUwwKCRY90RS0WTKPfqzuOYuLuwGLpNLpnKmubf7DE,7405
|
@@ -38,8 +38,8 @@ hiddifypanel/hutils/proxy/__init__.py,sha256=xXBa83kjYT_b-BNseEykfQYyJBQHTq1Zosf
|
|
38
38
|
hiddifypanel/hutils/proxy/clash.py,sha256=ERyiuUZibOUYvkyC1HPLCRPNB1lrZpuuafey2St7XtI,5820
|
39
39
|
hiddifypanel/hutils/proxy/shared.py,sha256=w6RWpPrcZpOauXotfbzC70QTrrvO26tyNbTDrtFyXIk,21801
|
40
40
|
hiddifypanel/hutils/proxy/singbox.py,sha256=ssaO5lCK6CmZ3BIHgAdlD7GcMZljJSF8DaMissgw_Jw,10800
|
41
|
-
hiddifypanel/hutils/proxy/xray.py,sha256=
|
42
|
-
hiddifypanel/hutils/proxy/xrayjson.py,sha256=
|
41
|
+
hiddifypanel/hutils/proxy/xray.py,sha256=AlhgNgGS-D2TPrZvhlk2-wWVR1wpt4o0Aa4hNpult1o,10630
|
42
|
+
hiddifypanel/hutils/proxy/xrayjson.py,sha256=GTtGkWiZHmOsIyg267f_VcmxcyBR3durIP1iIvGlFtM,14910
|
43
43
|
hiddifypanel/models/__init__.py,sha256=W7lWG_7jNNPn-cdXV5wMmuPv1unHUFVlMd9OmwDn2gM,860
|
44
44
|
hiddifypanel/models/admin.py,sha256=W1C0R9fhLtwjnIzgPgiVcaNXc6YzzIolAsyy4QaqQKw,6936
|
45
45
|
hiddifypanel/models/base_account.py,sha256=T2vllZo1QTGzYos3njgdYtAlnYB77LYrfzpEoO8yRk8,3060
|
@@ -75,7 +75,7 @@ hiddifypanel/panel/admin/DomainAdmin.py,sha256=n6vNX58Bc7LxYwkXcAIOKf8GZuES3-AgW
|
|
75
75
|
hiddifypanel/panel/admin/NodeAdmin.py,sha256=QAHQjF7e7F4KqsWNWpMt7SoLANlFEborVtWQV9OXJ2E,3102
|
76
76
|
hiddifypanel/panel/admin/ProxyAdmin.py,sha256=e-tCTfsEjqjbRezhVJvFyQZHh-uluvHFZXXwc4aFRDE,5319
|
77
77
|
hiddifypanel/panel/admin/QuickSetup.py,sha256=X8d492PLQu8vNtabh-X2R2IDZVs_5pmWeyn-Qz5_qXk,7560
|
78
|
-
hiddifypanel/panel/admin/SettingAdmin.py,sha256=
|
78
|
+
hiddifypanel/panel/admin/SettingAdmin.py,sha256=NJr4ow2bTGf8w2mDmTlct_B4-2dd3w2E7BoJdepb1mQ,19115
|
79
79
|
hiddifypanel/panel/admin/Terminal.py,sha256=fjLVLspXYHOwZGyMU_KbytWe1zf-m6KbmvBPEDps45w,1737
|
80
80
|
hiddifypanel/panel/admin/UserAdmin.py,sha256=pAiZRoDxQRjcZOUhGu5nRqglTuippeXgiGxTOf-Thv4,17145
|
81
81
|
hiddifypanel/panel/admin/__init__.py,sha256=hb0A2HuK_nBZRCNPumwahXX-25FMxODKYlNbk2ItF08,3015
|
@@ -177,7 +177,7 @@ hiddifypanel/panel/common_bp/login.py,sha256=eDynKaUI6Q015E8cByMNT9twBw7xIiFL6TD
|
|
177
177
|
hiddifypanel/panel/common_bp/templates/login.html,sha256=jDl9-Nh2qMuCsLQmXm7e5jvSaRAlBxReVVCbNSTTHJw,1312
|
178
178
|
hiddifypanel/panel/user/__init__.py,sha256=E9RxA2YGc0eXLGjfJbyryeLG3bXEWJ3DoVOyIpVaDIo,1859
|
179
179
|
hiddifypanel/panel/user/link_maker.html,sha256=g420NAm_fUI8asYjyfCiXyUOIwEQfDPonZA9xh3p0-8,177
|
180
|
-
hiddifypanel/panel/user/user.py,sha256=
|
180
|
+
hiddifypanel/panel/user/user.py,sha256=3xtEdHjogJomrgDflhSDG7_QERi9S9v6YO-KSjU0r6Q,13946
|
181
181
|
hiddifypanel/panel/user/templates/all_configs copy.txt,sha256=u5jhAgjhH07_0csdIisuXy2HNCC9SWlP0whBAGFXA78,564
|
182
182
|
hiddifypanel/panel/user/templates/all_configs.txt,sha256=i8I6g9ujOr3RIuRoGRqY2Q75I89mbHko_JVPvQt4E_g,1260
|
183
183
|
hiddifypanel/panel/user/templates/base_singbox_config.json.j2,sha256=xhvQpm0fp2w3VA8N7zXbYs8RWlRgdyApiedFH_sRTfM,7107
|
@@ -820,24 +820,24 @@ hiddifypanel/templates/redirect.html,sha256=K9x_O4P96vEkqBhOXIhoGrWw1KIqd2bL0BjI
|
|
820
820
|
hiddifypanel/templates/static.html,sha256=jp6q4wtx-k2A_cjqJoNiMS7Ee30arE45qI3ev4d5ky4,165
|
821
821
|
hiddifypanel/templates/hiddify-flask-admin/actions.html,sha256=2NeITe2e-lPKCk_o511tCIqVtrPu8LYHE1wTCtrFUrI,1331
|
822
822
|
hiddifypanel/templates/hiddify-flask-admin/list.html,sha256=MBGrTqZpzNLe4sZy0RozvXNr8seFUQc2C6v88BJtNWc,11095
|
823
|
-
hiddifypanel/translations/en/LC_MESSAGES/messages.mo,sha256=
|
824
|
-
hiddifypanel/translations/en/LC_MESSAGES/messages.po,sha256=
|
825
|
-
hiddifypanel/translations/fa/LC_MESSAGES/messages.mo,sha256=
|
826
|
-
hiddifypanel/translations/fa/LC_MESSAGES/messages.po,sha256=
|
827
|
-
hiddifypanel/translations/pt/LC_MESSAGES/messages.mo,sha256=
|
828
|
-
hiddifypanel/translations/pt/LC_MESSAGES/messages.po,sha256=
|
829
|
-
hiddifypanel/translations/ru/LC_MESSAGES/messages.mo,sha256=
|
830
|
-
hiddifypanel/translations/ru/LC_MESSAGES/messages.po,sha256=
|
831
|
-
hiddifypanel/translations/zh/LC_MESSAGES/messages.mo,sha256=
|
832
|
-
hiddifypanel/translations/zh/LC_MESSAGES/messages.po,sha256=
|
833
|
-
hiddifypanel/translations.i18n/en.json,sha256=
|
834
|
-
hiddifypanel/translations.i18n/fa.json,sha256=
|
835
|
-
hiddifypanel/translations.i18n/pt.json,sha256=
|
836
|
-
hiddifypanel/translations.i18n/ru.json,sha256=
|
837
|
-
hiddifypanel/translations.i18n/zh.json,sha256=
|
838
|
-
hiddifypanel-10.20.
|
839
|
-
hiddifypanel-10.20.
|
840
|
-
hiddifypanel-10.20.
|
841
|
-
hiddifypanel-10.20.
|
842
|
-
hiddifypanel-10.20.
|
843
|
-
hiddifypanel-10.20.
|
823
|
+
hiddifypanel/translations/en/LC_MESSAGES/messages.mo,sha256=G5s5HSSAXl_gS7XiO3wLQctGxIe_AJ37RIVRId1JQv0,74678
|
824
|
+
hiddifypanel/translations/en/LC_MESSAGES/messages.po,sha256=8tJG6Ax9Pufa8Mf80afoWBIAN8zomLn_HxEi-Y_MhWw,77864
|
825
|
+
hiddifypanel/translations/fa/LC_MESSAGES/messages.mo,sha256=2KbsrcjDAGp1RDsNb8lw48VPajvbuq-in-OTuMMJhys,96401
|
826
|
+
hiddifypanel/translations/fa/LC_MESSAGES/messages.po,sha256=QNcaCNYTAn5HgZLdSal9Oxp9wpXANcfgRpBFJaCcHPk,101078
|
827
|
+
hiddifypanel/translations/pt/LC_MESSAGES/messages.mo,sha256=mNYRmlCiWtc8eJIrQopCSFpMTFGN8k76O-0XDrVCfwo,60534
|
828
|
+
hiddifypanel/translations/pt/LC_MESSAGES/messages.po,sha256=6-lVK4mB0qvYLwaduBpgxY1DE_DDKFVNZ-dUBPsOhJo,69887
|
829
|
+
hiddifypanel/translations/ru/LC_MESSAGES/messages.mo,sha256=QnHAVqrFSoJhp8Rbt1Q78DHyAzndvGViT5mk4B-vToY,95456
|
830
|
+
hiddifypanel/translations/ru/LC_MESSAGES/messages.po,sha256=2Xd_RMn2dvdHmL9KCwY2-DN-W76OuMTISQD_a0KToyc,102016
|
831
|
+
hiddifypanel/translations/zh/LC_MESSAGES/messages.mo,sha256=KvM9AX0EuWWhqKdFvRKOwPTbTkw6zrh_oDUGIMHQLHU,60807
|
832
|
+
hiddifypanel/translations/zh/LC_MESSAGES/messages.po,sha256=oE-v6foE3j8oECylwq1ovNkpoL7v6gDoLzjozZ2KmX0,69065
|
833
|
+
hiddifypanel/translations.i18n/en.json,sha256=Qr2eumDQXKhcppbJuo9psZ_cJHVCTtj6ZOflGNig6dk,67830
|
834
|
+
hiddifypanel/translations.i18n/fa.json,sha256=R9As455CkWu9d89_MYiypZvT-j2w282zje3Ygm_3qYA,91044
|
835
|
+
hiddifypanel/translations.i18n/pt.json,sha256=DgHKvk-p0mJzm8RwHB7m0-JiOkgmv5YK65Wv3iydJqY,60174
|
836
|
+
hiddifypanel/translations.i18n/ru.json,sha256=6NavdAs1-19oKWQfrIpkf0tKdP4vN4pwEx1c1r2nfYQ,91982
|
837
|
+
hiddifypanel/translations.i18n/zh.json,sha256=jRezlHlG4PjDa4RxvIvsU_ByswoyQ1prn5O7KSFpGDM,59598
|
838
|
+
hiddifypanel-10.20.3.dist-info/LICENSE.md,sha256=oDrt-cUsyiDGnRPjEJh-3dH2ddAuK_bIVBD8ntkOtZw,19807
|
839
|
+
hiddifypanel-10.20.3.dist-info/METADATA,sha256=VM2mK04Tgzp0xICK9uVCUQJfUd434naibQ3dtkAyiPQ,4009
|
840
|
+
hiddifypanel-10.20.3.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
841
|
+
hiddifypanel-10.20.3.dist-info/entry_points.txt,sha256=Xzpqlh3nwBtZhoV9AANJykano056VJvYzaujxPztJaM,60
|
842
|
+
hiddifypanel-10.20.3.dist-info/top_level.txt,sha256=rv-b3qFWUZQTBy0kyBfsr7L6tPpeO7AaQlLHXn-HI5M,13
|
843
|
+
hiddifypanel-10.20.3.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|