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.
Files changed (27) hide show
  1. hiddifypanel/VERSION +1 -1
  2. hiddifypanel/VERSION.py +1 -1
  3. hiddifypanel/hutils/proxy/xray.py +27 -29
  4. hiddifypanel/hutils/proxy/xrayjson.py +72 -35
  5. hiddifypanel/panel/admin/SettingAdmin.py +4 -2
  6. hiddifypanel/panel/user/user.py +3 -3
  7. hiddifypanel/translations/en/LC_MESSAGES/messages.mo +0 -0
  8. hiddifypanel/translations/en/LC_MESSAGES/messages.po +6 -3
  9. hiddifypanel/translations/fa/LC_MESSAGES/messages.mo +0 -0
  10. hiddifypanel/translations/fa/LC_MESSAGES/messages.po +6 -3
  11. hiddifypanel/translations/pt/LC_MESSAGES/messages.mo +0 -0
  12. hiddifypanel/translations/pt/LC_MESSAGES/messages.po +6 -3
  13. hiddifypanel/translations/ru/LC_MESSAGES/messages.mo +0 -0
  14. hiddifypanel/translations/ru/LC_MESSAGES/messages.po +6 -3
  15. hiddifypanel/translations/zh/LC_MESSAGES/messages.mo +0 -0
  16. hiddifypanel/translations/zh/LC_MESSAGES/messages.po +6 -3
  17. hiddifypanel/translations.i18n/en.json +3 -2
  18. hiddifypanel/translations.i18n/fa.json +3 -2
  19. hiddifypanel/translations.i18n/pt.json +3 -2
  20. hiddifypanel/translations.i18n/ru.json +3 -2
  21. hiddifypanel/translations.i18n/zh.json +3 -2
  22. {hiddifypanel-10.20.1.dist-info → hiddifypanel-10.20.3.dist-info}/METADATA +1 -1
  23. {hiddifypanel-10.20.1.dist-info → hiddifypanel-10.20.3.dist-info}/RECORD +27 -27
  24. {hiddifypanel-10.20.1.dist-info → hiddifypanel-10.20.3.dist-info}/LICENSE.md +0 -0
  25. {hiddifypanel-10.20.1.dist-info → hiddifypanel-10.20.3.dist-info}/WHEEL +0 -0
  26. {hiddifypanel-10.20.1.dist-info → hiddifypanel-10.20.3.dist-info}/entry_points.txt +0 -0
  27. {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
1
+ 10.20.3
hiddifypanel/VERSION.py CHANGED
@@ -1,3 +1,3 @@
1
- __version__='10.20.1'
1
+ __version__='10.20.3'
2
2
  from datetime import datetime
3
3
  __release_date__= datetime.strptime('2024-04-12','%Y-%m-%d')
@@ -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 Proxy, ProxyTransport, ProxyL3, ProxyCDN, ProxyProto, Domain, ConfigEnum, DomainType, hconfig
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(user, user_activate, domains: list[Domain], expire_days, ip_debug, db_domain, has_auto_cdn, asn, profile_title, **kwargs) -> str:
148
+ def make_v2ray_configs(domains: list[Domain], user: User, expire_days: int, ip_debug=None) -> str:
149
149
  res = []
150
150
 
151
- ua = hutils.flask.get_user_agent()
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
- if not ua['is_hiddify']:
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
- fake_ip_for_sub_link = datetime.datetime.now().strftime(f"%H.%M--%Y.%m.%d.time:%H%M")
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
- # res.append(f'trojan://1@{fake_ip_for_sub_link}?sni=fake_ip_for_sub_link&security=tls#{hutils.encode.url_encode(profile_title)}')
162
-
163
- name = '' if user_activate else '✖'
164
- if user.usage_limit_GB < 1000:
165
- name += f'{round(user.current_usage_GB,3)}/{str(user.usage_limit_GB).replace(".0","")}GB'
166
- elif user.usage_limit_GB < 100000:
167
- name += f'{round(user.current_usage_GB/1000,3)}/{str(round(user.usage_limit_GB/1000,1)).replace(".0","")}TB'
168
- else:
169
- res.append("#No Usage Limit")
170
- if expire_days < 1000:
171
- name += " " + _(f'📅%(expire_days)s days', expire_days=expire_days)
172
- else:
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
- name = name.strip()
176
- if len(name) > 3:
177
- res.append(f'trojan://1@{fake_ip_for_sub_link}?sni=fake_ip_for_sub_link&security=tls#{hutils.encode.url_encode(name)}')
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 ua['is_browser']:
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 user_activate:
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('✖Package_Ended'))
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
- base_config = json.loads(render_template('base_xray_config.json.j2', remarks=remarks))
35
- # multiple outbounds needs multiple whole base config not just one with multiple outbounds (at least for v2rayng)
36
- # https://github.com/2dust/v2rayNG/pull/2827#issue-2127534078
37
- if outbounds_len > 1:
38
- for out in outbounds:
39
- base_config['remarks'] = out['tag']
40
- base_config['outbounds'].insert(0, out)
41
- all_configs.append(copy.deepcopy(base_config))
42
- del base_config['outbounds'][0]
43
- else: # single outbound
44
- base_config['outbounds'].insert(0, outbounds[0])
45
- all_configs = base_config
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"]} § {proxy["port"]} {proxy["dbdomain"].id}',
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[\w.-]+)*$', re.IGNORECASE, _("config.invalid-pattern-for-warp-sites") + f' {c.key}')
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,
@@ -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 = c = get_common_data(g.account.uuid, mode="new")
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(**c)
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)
@@ -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"
@@ -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 روز اعتبار"
@@ -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"
@@ -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 дней"
@@ -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
  Metadata-Version: 2.1
2
2
  Name: hiddifypanel
3
- Version: 10.20.1
3
+ Version: 10.20.3
4
4
  Summary: hiddifypanel multi proxy panel
5
5
  Home-page: https://github.com/hiddify/hiddify-manager/
6
6
  Author: hiddify
@@ -1,6 +1,6 @@
1
1
  hiddifypanel/Events.py,sha256=AlnRdjVul0jP-NCT4-zoaQgowoOo-JhdQB4ytetAFKA,723
2
- hiddifypanel/VERSION,sha256=KnfsmD_isiM9oHwENXBfENLwz-kfBDeF-5NT4y-9VJg,8
3
- hiddifypanel/VERSION.py,sha256=xEzbPeU28VLr3xkRkbcITxhiEzIoyca-Qfa7Mgzvop8,113
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=HDK4PsyY8qnnmQ51hNiP4UKJVXE-nMjIRuFjF1ZcHOY,10769
42
- hiddifypanel/hutils/proxy/xrayjson.py,sha256=to71KVhsh9scmRyQjgS19QYWKze2GjE4seQJM4_rIVk,13402
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=Xo3cFhwOtcsgwWgq5TE4kHCYe4kD1isDDrG9bPwndlc,18848
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=PU0PWsa4AoS1MKtr-8wvZObfIFg6385q7LD3B8xRHg8,13868
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=l_WfRppCqbivGlI4mKQh9Q5m9cnKetdNeRrI5aoaxyM,74599
824
- hiddifypanel/translations/en/LC_MESSAGES/messages.po,sha256=JYdJWkz8ZjeqzNdbz1kOOAw11YHMpFU447R1SYaD1Sg,77783
825
- hiddifypanel/translations/fa/LC_MESSAGES/messages.mo,sha256=iH6adtqgLx5Z05BalNlPhWEKGvbnua2VjubnKYRgYOY,96482
826
- hiddifypanel/translations/fa/LC_MESSAGES/messages.po,sha256=c4_SjizFofBr6uNRAlD8j9HRbVv4f4SCGVlFGWxMWA8,101063
827
- hiddifypanel/translations/pt/LC_MESSAGES/messages.mo,sha256=rqrVjLXWQLOlqMJTTejOn99VDNwOvf8f-q4dvBDFWKk,60612
828
- hiddifypanel/translations/pt/LC_MESSAGES/messages.po,sha256=tUp3Ed-ZBDZeD99yb7o6I76wWUU_QQT2i_cQfNV_7Zk,69869
829
- hiddifypanel/translations/ru/LC_MESSAGES/messages.mo,sha256=4yCB1BiDkQl-jjH-_JLt7th-8wcsFuXFrLqyMY0SrjY,95543
830
- hiddifypanel/translations/ru/LC_MESSAGES/messages.po,sha256=ojNL5z1gvjgiO-5hjccCLhK0Z-CeZKrwE3yiEE4ekeg,102007
831
- hiddifypanel/translations/zh/LC_MESSAGES/messages.mo,sha256=2bRQTKmoZuvDIeK74v9yDAamllxDYLfv06pkAa5NGFA,60878
832
- hiddifypanel/translations/zh/LC_MESSAGES/messages.po,sha256=f0fv1MW5_Okc5GixUoPv5BkV0XwM6wKrjK7khLeiv18,69040
833
- hiddifypanel/translations.i18n/en.json,sha256=SEBuSZt0rP6l-IK3dkZteEEvzLs3JVMwfaWCiak_jBk,67764
834
- hiddifypanel/translations.i18n/fa.json,sha256=Xn6sJ8o74HE8qjzOjgjW-LzHJRrHk7Aze-6EYts2Gt0,91044
835
- hiddifypanel/translations.i18n/pt.json,sha256=Wh72C6ToJUVXgAfB_2JqJKQjw0_Rvv7gsYIp8-Nbd8Q,60171
836
- hiddifypanel/translations.i18n/ru.json,sha256=WNSflb5-l-CWOQ71SWhDSkgQLkJVHeZ_dehn3lRyv0s,91988
837
- hiddifypanel/translations.i18n/zh.json,sha256=17fERyiPhWV2899MMynfIeuZL6X7u-_pWd0h5n6FJUo,59588
838
- hiddifypanel-10.20.1.dist-info/LICENSE.md,sha256=oDrt-cUsyiDGnRPjEJh-3dH2ddAuK_bIVBD8ntkOtZw,19807
839
- hiddifypanel-10.20.1.dist-info/METADATA,sha256=Df5CZDriSxHUrZ6ZNpkpqH2g2mKCSD2lzR2U-EN0ZwI,4009
840
- hiddifypanel-10.20.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
841
- hiddifypanel-10.20.1.dist-info/entry_points.txt,sha256=Xzpqlh3nwBtZhoV9AANJykano056VJvYzaujxPztJaM,60
842
- hiddifypanel-10.20.1.dist-info/top_level.txt,sha256=rv-b3qFWUZQTBy0kyBfsr7L6tPpeO7AaQlLHXn-HI5M,13
843
- hiddifypanel-10.20.1.dist-info/RECORD,,
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,,