hiddifypanel 10.70.9__py3-none-any.whl → 10.80.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.
Files changed (89) hide show
  1. hiddifypanel/VERSION +1 -1
  2. hiddifypanel/VERSION.py +5 -2
  3. hiddifypanel/__init__.py +5 -1
  4. hiddifypanel/apps/__init__.py +0 -0
  5. hiddifypanel/apps/asgi_app.py +7 -0
  6. hiddifypanel/apps/celery_app.py +3 -0
  7. hiddifypanel/apps/wsgi_app.py +5 -0
  8. hiddifypanel/auth.py +8 -3
  9. hiddifypanel/base.py +43 -126
  10. hiddifypanel/base_setup.py +82 -0
  11. hiddifypanel/cache.py +3 -2
  12. hiddifypanel/celery.py +45 -0
  13. hiddifypanel/database.py +7 -0
  14. hiddifypanel/drivers/ssh_liberty_bridge_api.py +2 -1
  15. hiddifypanel/drivers/wireguard_api.py +1 -1
  16. hiddifypanel/hutils/crypto.py +27 -0
  17. hiddifypanel/hutils/flask.py +5 -3
  18. hiddifypanel/hutils/network/cf_api.py +5 -5
  19. hiddifypanel/hutils/proxy/__init__.py +1 -0
  20. hiddifypanel/hutils/proxy/clash.py +3 -3
  21. hiddifypanel/hutils/proxy/shared.py +14 -18
  22. hiddifypanel/hutils/proxy/singbox.py +4 -2
  23. hiddifypanel/hutils/proxy/wireguard.py +34 -0
  24. hiddifypanel/hutils/proxy/xray.py +3 -3
  25. hiddifypanel/hutils/proxy/xrayjson.py +10 -7
  26. hiddifypanel/models/admin.py +1 -1
  27. hiddifypanel/models/base_account.py +3 -0
  28. hiddifypanel/models/config.py +5 -2
  29. hiddifypanel/models/config_enum.py +15 -2
  30. hiddifypanel/models/proxy.py +1 -1
  31. hiddifypanel/models/user.py +2 -2
  32. hiddifypanel/panel/__init__.py +8 -8
  33. hiddifypanel/panel/admin/AdminstratorAdmin.py +16 -10
  34. hiddifypanel/panel/admin/DomainAdmin.py +132 -98
  35. hiddifypanel/panel/admin/ProxyAdmin.py +4 -0
  36. hiddifypanel/panel/admin/QuickSetup.py +48 -17
  37. hiddifypanel/panel/admin/SettingAdmin.py +6 -0
  38. hiddifypanel/panel/admin/UserAdmin.py +63 -36
  39. hiddifypanel/panel/admin/adminlte.py +1 -1
  40. hiddifypanel/panel/admin/templates/index.html +6 -4
  41. hiddifypanel/panel/admin/templates/model/user_list.html +11 -3
  42. hiddifypanel/panel/cli.py +14 -3
  43. hiddifypanel/panel/commercial/restapi/v1/tgbot.py +19 -1
  44. hiddifypanel/panel/commercial/restapi/v2/admin/system_actions.py +5 -1
  45. hiddifypanel/panel/commercial/restapi/v2/admin/user_api.py +2 -1
  46. hiddifypanel/panel/commercial/restapi/v2/user/apps_api.py +76 -6
  47. hiddifypanel/panel/common.py +5 -2
  48. hiddifypanel/panel/common_bp/login.py +14 -8
  49. hiddifypanel/panel/hlogger.py +32 -0
  50. hiddifypanel/panel/init_db.py +157 -77
  51. hiddifypanel/panel/node/__init__.py +9 -0
  52. hiddifypanel/panel/node/a.py +14 -0
  53. hiddifypanel/panel/node/hello.py +14 -0
  54. hiddifypanel/panel/node/test.proto +13 -0
  55. hiddifypanel/panel/node/test_grpc.py +40 -0
  56. hiddifypanel/panel/node/test_pb2.py +40 -0
  57. hiddifypanel/panel/node/test_pb2.pyi +17 -0
  58. hiddifypanel/panel/node/test_pb2_grpc.py +97 -0
  59. hiddifypanel/panel/usage.py +13 -3
  60. hiddifypanel/panel/user/templates/base_singbox_config.json.j2 +16 -0
  61. hiddifypanel/panel/user/templates/home/home.html +1 -2
  62. hiddifypanel/panel/user/templates/home/multi.html +1 -2
  63. hiddifypanel/panel/user/user.py +13 -19
  64. hiddifypanel/static/apps-icon/singbox.ico +0 -0
  65. hiddifypanel/translations/en/LC_MESSAGES/messages.mo +0 -0
  66. hiddifypanel/translations/en/LC_MESSAGES/messages.po +125 -30
  67. hiddifypanel/translations/fa/LC_MESSAGES/messages.mo +0 -0
  68. hiddifypanel/translations/fa/LC_MESSAGES/messages.po +123 -32
  69. hiddifypanel/translations/pt/LC_MESSAGES/messages.mo +0 -0
  70. hiddifypanel/translations/pt/LC_MESSAGES/messages.po +114 -22
  71. hiddifypanel/translations/ru/LC_MESSAGES/messages.mo +0 -0
  72. hiddifypanel/translations/ru/LC_MESSAGES/messages.po +129 -32
  73. hiddifypanel/translations/zh/LC_MESSAGES/messages.mo +0 -0
  74. hiddifypanel/translations/zh/LC_MESSAGES/messages.po +107 -18
  75. hiddifypanel/translations.i18n/en.json +73 -14
  76. hiddifypanel/translations.i18n/fa.json +72 -13
  77. hiddifypanel/translations.i18n/fr.json +28 -10
  78. hiddifypanel/translations.i18n/my.json +1266 -0
  79. hiddifypanel/translations.i18n/pt.json +68 -9
  80. hiddifypanel/translations.i18n/ru.json +75 -16
  81. hiddifypanel/translations.i18n/zh.json +67 -8
  82. hiddifypanel-10.80.0.dist-info/METADATA +137 -0
  83. {hiddifypanel-10.70.9.dist-info → hiddifypanel-10.80.0.dist-info}/RECORD +136 -119
  84. {hiddifypanel-10.70.9.dist-info → hiddifypanel-10.80.0.dist-info}/WHEEL +1 -2
  85. hiddifypanel-10.80.0.dist-info/entry_points.txt +3 -0
  86. hiddifypanel-10.70.9.dist-info/METADATA +0 -144
  87. hiddifypanel-10.70.9.dist-info/entry_points.txt +0 -2
  88. hiddifypanel-10.70.9.dist-info/top_level.txt +0 -1
  89. {hiddifypanel-10.70.9.dist-info → hiddifypanel-10.80.0.dist-info}/LICENSE.md +0 -0
@@ -0,0 +1,17 @@
1
+ from google.protobuf import descriptor as _descriptor
2
+ from google.protobuf import message as _message
3
+ from typing import ClassVar as _ClassVar, Optional as _Optional
4
+
5
+ DESCRIPTOR: _descriptor.FileDescriptor
6
+
7
+ class HelloRequest(_message.Message):
8
+ __slots__ = ("req",)
9
+ REQ_FIELD_NUMBER: _ClassVar[int]
10
+ req: str
11
+ def __init__(self, req: _Optional[str] = ...) -> None: ...
12
+
13
+ class HelloResponse(_message.Message):
14
+ __slots__ = ("res",)
15
+ RES_FIELD_NUMBER: _ClassVar[int]
16
+ res: str
17
+ def __init__(self, res: _Optional[str] = ...) -> None: ...
@@ -0,0 +1,97 @@
1
+ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
2
+ """Client and server classes corresponding to protobuf-defined services."""
3
+ import grpc
4
+ import warnings
5
+
6
+ from hiddifypanel.panel.node import test_pb2 as hiddifypanel_dot_panel_dot_node_dot_test__pb2
7
+
8
+ GRPC_GENERATED_VERSION = '1.67.1'
9
+ GRPC_VERSION = grpc.__version__
10
+ _version_not_supported = False
11
+
12
+ try:
13
+ from grpc._utilities import first_version_is_lower
14
+ _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION)
15
+ except ImportError:
16
+ _version_not_supported = True
17
+
18
+ if _version_not_supported:
19
+ raise RuntimeError(
20
+ f'The grpc package installed is at version {GRPC_VERSION},'
21
+ + f' but the generated code in hiddifypanel/panel/node/test_pb2_grpc.py depends on'
22
+ + f' grpcio>={GRPC_GENERATED_VERSION}.'
23
+ + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}'
24
+ + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.'
25
+ )
26
+
27
+
28
+ class HelloStub(object):
29
+ """Missing associated documentation comment in .proto file."""
30
+
31
+ def __init__(self, channel):
32
+ """Constructor.
33
+
34
+ Args:
35
+ channel: A grpc.Channel.
36
+ """
37
+ self.SayHello = channel.unary_unary(
38
+ '/Hello/SayHello',
39
+ request_serializer=hiddifypanel_dot_panel_dot_node_dot_test__pb2.HelloRequest.SerializeToString,
40
+ response_deserializer=hiddifypanel_dot_panel_dot_node_dot_test__pb2.HelloResponse.FromString,
41
+ )
42
+
43
+
44
+ class HelloServicer(object):
45
+ """Missing associated documentation comment in .proto file."""
46
+
47
+ def SayHello(self, request, context):
48
+ """Missing associated documentation comment in .proto file."""
49
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
50
+ context.set_details('Method not implemented!')
51
+ raise NotImplementedError('Method not implemented!')
52
+
53
+
54
+ def add_HelloServicer_to_server(servicer, server):
55
+ rpc_method_handlers = {
56
+ 'SayHello': grpc.unary_unary_rpc_method_handler(
57
+ servicer.SayHello,
58
+ request_deserializer=hiddifypanel_dot_panel_dot_node_dot_test__pb2.HelloRequest.FromString,
59
+ response_serializer=hiddifypanel_dot_panel_dot_node_dot_test__pb2.HelloResponse.SerializeToString,
60
+ ),
61
+ }
62
+ generic_handler = grpc.method_handlers_generic_handler(
63
+ 'Hello', rpc_method_handlers)
64
+ server.add_generic_rpc_handlers((generic_handler,))
65
+ server.add_registered_method_handlers('Hello', rpc_method_handlers)
66
+
67
+
68
+ # This class is part of an EXPERIMENTAL API.
69
+ class Hello(object):
70
+ """Missing associated documentation comment in .proto file."""
71
+
72
+ @staticmethod
73
+ def SayHello(request,
74
+ target,
75
+ options=(),
76
+ channel_credentials=None,
77
+ call_credentials=None,
78
+ insecure=False,
79
+ compression=None,
80
+ wait_for_ready=None,
81
+ timeout=None,
82
+ metadata=None):
83
+ return grpc.experimental.unary_unary(
84
+ request,
85
+ target,
86
+ '/Hello/SayHello',
87
+ hiddifypanel_dot_panel_dot_node_dot_test__pb2.HelloRequest.SerializeToString,
88
+ hiddifypanel_dot_panel_dot_node_dot_test__pb2.HelloResponse.FromString,
89
+ options,
90
+ channel_credentials,
91
+ insecure,
92
+ call_credentials,
93
+ compression,
94
+ wait_for_ready,
95
+ timeout,
96
+ metadata,
97
+ )
@@ -11,16 +11,18 @@ from hiddifypanel import cache, hutils
11
11
  from loguru import logger
12
12
  to_gig_d = 1024**3
13
13
 
14
+ from celery import shared_task
14
15
 
16
+ @shared_task(ignore_result=False)
15
17
  def update_local_usage():
16
18
  lock_key = "lock-update-local-usage"
17
19
  if not cache.redis_client.set(lock_key, "locked", nx=True, ex=600):
18
20
  return {"msg": "last update task is not finished yet."}
19
21
  try:
20
- res = user_driver.get_users_usage(reset=True)
21
- # cache.redis_client.delete(lock_key)
22
+ res=update_local_usage_not_lock()
22
23
  cache.redis_client.set(lock_key, "locked", nx=False, ex=60)
23
- return _add_users_usage(res, child_id=0)
24
+
25
+ return res
24
26
  except Exception as e:
25
27
  cache.redis_client.set(lock_key, "locked", nx=False, ex=60)
26
28
  logger.exception("Exception in update usage")
@@ -28,6 +30,14 @@ def update_local_usage():
28
30
  return {"msg": f"Exception in update usage: {e}"}
29
31
 
30
32
  # return {"status": 'success', "comments":res}
33
+ def update_local_usage_not_lock():
34
+
35
+ try:
36
+ res = user_driver.get_users_usage(reset=True)
37
+ return _add_users_usage(res, child_id=0)
38
+ except Exception as e:
39
+ raise
40
+
31
41
 
32
42
 
33
43
  def add_users_usage_uuid(uuids_bytes: Dict[str, Dict], child_id, sync=False):
@@ -49,6 +49,22 @@
49
49
  "download_detour": "bypass"
50
50
  }
51
51
  {%endif%}
52
+ {%if hconfig(ConfigEnum.country)=="ru"%}
53
+ {
54
+ "tag": "geosite-ru",
55
+ "type": "remote",
56
+ "format": "binary",
57
+ "url": "https:\/\/github.com\/SagerNet\/sing-geosite\/raw\/rule-set\/geosite-category-ru.srs",
58
+ "download_detour": "bypass"
59
+ },
60
+ {
61
+ "tag": "geoip-ru",
62
+ "type": "remote",
63
+ "format": "binary",
64
+ "url": "https:\/\/github.com\/SagerNet\/sing-geoip\/raw\/rule-set\/geoip-ru.srs",
65
+ "download_detour": "bypass"
66
+ }
67
+ {%endif%}
52
68
  {# {
53
69
  "tag": "geosite-category-ads-all",
54
70
  "type": "remote",
@@ -404,8 +404,7 @@
404
404
  {{_("Check again")}}
405
405
  </button>
406
406
  {%- endmacro -%}
407
- {{modal("country-alarm-modal",_("Turn of VPN"),_("You should visit this page without VPN. Your country=%(your_country)s
408
- expected=%(expected_country)s",your_country=country,expected_country=hconfig(ConfigEnum.country)),footer=reload(),show=True)}}
407
+ {{modal("country-alarm-modal",_("Turn of VPN"),_("vpn.notallowed",your_country=country,expected_country=hconfig(ConfigEnum.country)),footer=reload(),show=True)}}
409
408
  {% endif %}
410
409
 
411
410
 
@@ -404,8 +404,7 @@
404
404
  {{_("Check again")}}
405
405
  </button>
406
406
  {%- endmacro -%}
407
- {{modal("country-alarm-modal",_("Turn of VPN"),_("You should visit this page without VPN. Your country=%(your_country)s
408
- expected=%(expected_country)s",your_country=country,expected_country=hconfig(ConfigEnum.country)),footer=reload(),show=True)}}
407
+ {{modal("country-alarm-modal",_("Turn of VPN"),_("vpn.notallowed,your_country=country,expected_country=hconfig(ConfigEnum.country)),footer=reload(),show=True)}}
409
408
  {% endif %}
410
409
 
411
410
 
@@ -21,6 +21,12 @@ class UserView(FlaskView):
21
21
  def index(self):
22
22
  return self.auto_sub()
23
23
 
24
+ @route('/ua')
25
+ def user_agent(self):
26
+ ua= str(g.user_agent)+"\n"+str(request.user_agent)
27
+ print(ua)
28
+ return ua
29
+
24
30
  def auto_sub(self):
25
31
  if g.user_agent['is_browser']:
26
32
  return self.new()
@@ -86,27 +92,15 @@ class UserView(FlaskView):
86
92
  continue
87
93
  wireguards.append(pinfo)
88
94
 
89
- servers.add(pinfo['server'])
95
+
90
96
 
91
97
  if not len(wireguards):
92
98
  abort(404)
93
- wg = wireguards[0]
94
- addrs = f"{wg['wg_ipv4']}/32"
95
- if wg['wg_ipv6']:
96
- addrs += f", {wg['wg_ipv6']}/128"
97
- resp = f"""
98
- [Interface]
99
- PrivateKey = {wg['wg_pk']}
100
- Address = {addrs}
101
- DNS = 1.1.1.1
102
- MTU = 1390
103
-
104
- [Peer]
105
- PublicKey = {wg['wg_pub']}
106
- PresharedKey = {wg['wg_psk']}
107
- AllowedIPs = 0.0.0.0/1, 128.0.0.0/1, ::/1, 8000::/1
108
- Endpoint = {next(iter(servers))}:61339 #{servers}
109
- """
99
+ resp =""
100
+ for wg in wireguards:
101
+ resp +=f'#========={wg["extra_info"]} {wg["name"]}================\n'
102
+ resp+=hutils.proxy.wireguard.generate_wireguard_config(wg)
103
+ resp+="\n\n"
110
104
  return add_headers(resp, c)
111
105
 
112
106
  # return self.singbox_ssh_imp()
@@ -266,7 +260,7 @@ Endpoint = {next(iter(servers))}:61339 #{servers}
266
260
  if request.method == 'HEAD':
267
261
  resp = ""
268
262
  else:
269
- resp = render_template('singbox_config.json', **c, host_keys=hutils.proxy.get_ssh_hostkeys(True),
263
+ resp = render_template('singbox_config.json', **c, host_keys=hutils.proxy.get_ssh_hostkeys(get_hconfigs(),True),
270
264
  ssh_client_version=hiddify.get_ssh_client_version(user), ssh_ip=hutils.network.get_direct_host_or_ip(4), base64=False)
271
265
 
272
266
  return add_headers(resp, c)
@@ -219,6 +219,9 @@ msgstr ""
219
219
  "Domain can not be resolved! There is a problem in your domain. Please check "
220
220
  "your Domain configurations."
221
221
 
222
+ msgid "Domain cannot be resolved! Please check DNS settings"
223
+ msgstr "Domain cannot be resolved! Please check DNS settings"
224
+
222
225
  msgid "Domain is not REALITY friendly!"
223
226
  msgstr "Domain is Not REALITY Friendly!"
224
227
 
@@ -425,7 +428,7 @@ msgstr ""
425
428
 
426
429
  msgid "It will override the root admin to the current user"
427
430
  msgstr ""
428
- "It will override the owner admin of the backup file to the current user"
431
+ "It will override the owner admin of the backup file to the current admin."
429
432
 
430
433
  msgid ""
431
434
  "Join our Hiddify Telegram channel to get the latest updates on Hiddify."
@@ -445,7 +448,7 @@ msgid "Max Active Users"
445
448
  msgstr "Max Active Users"
446
449
 
447
450
  msgid "Max IPs"
448
- msgstr "Max IPs"
451
+ msgstr "Max IPs (xray only)"
449
452
 
450
453
  msgid "Max Users"
451
454
  msgstr "Max Users"
@@ -535,13 +538,6 @@ msgstr ""
535
538
  "Please connect your Telegram account to the panel to be informed about "
536
539
  "latest news"
537
540
 
538
- msgid ""
539
- "Please connect your telegram accout to the panel to be informed about latest"
540
- " news."
541
- msgstr ""
542
- "Please connect your Telegram account to the panel to know the latest Status "
543
- "of your Subscription"
544
-
545
541
  msgid "Please create an issue on Github."
546
542
  msgstr "Please create an issue on Github"
547
543
 
@@ -614,6 +610,9 @@ msgstr "RAM"
614
610
  msgid "REALITY Fallback domain is not compaitble with server names!"
615
611
  msgstr "REALITY Fallback Domain is not compaitble with Server names!"
616
612
 
613
+ msgid "REALITY Fallback domain is not compatible with server names!"
614
+ msgstr "REALITY Fallback domain is not compatible with server names!"
615
+
617
616
  msgid "Release"
618
617
  msgstr "✅ Release"
619
618
 
@@ -719,6 +718,9 @@ msgstr "📦 SingBox"
719
718
  msgid "Sort by %(name)s"
720
719
  msgstr "Sort by %(name)s"
721
720
 
721
+ msgid "Specifying CDN IP is only valid for CDN mode"
722
+ msgstr "Specifying CDN IP is only valid for CDN mode"
723
+
722
724
  msgid "Start Date"
723
725
  msgstr "Start Date"
724
726
 
@@ -784,7 +786,7 @@ msgid "Upload File"
784
786
  msgstr "Upload File"
785
787
 
786
788
  msgid "Use HiddifyNext:"
787
- msgstr "Use HiddifyNext:"
789
+ msgstr "Use Hiddify:"
788
790
 
789
791
  msgid "User activated!"
790
792
  msgstr "User Activated"
@@ -860,13 +862,6 @@ msgstr ""
860
862
  msgid "You have used this domain in: "
861
863
  msgstr "You have already used this Domain in: "
862
864
 
863
- msgid ""
864
- "You should visit this page without VPN. Your country=%(your_country)s\n"
865
- "expected=%(expected_country)s"
866
- msgstr ""
867
- "You should visit this page without VPN Your Country =%(your_country)s\n"
868
- "Expected=%(expected_country)s"
869
-
870
865
  msgid ""
871
866
  "Your hiddify instance information \n"
872
867
  "Domain: {} \n"
@@ -1001,7 +996,7 @@ msgstr ""
1001
996
 
1002
997
  msgid "adminuser.force_update_usage"
1003
998
  msgstr ""
1004
- "Every 6 minutes the usage is being updated. For updating it now <a "
999
+ "ℹ️ Every 6 Minutes the usage is being updated. For updating it now <a "
1005
1000
  "href=\"%(link)s\" class=\"btn btn-info\">Press Here</a>"
1006
1001
 
1007
1002
  msgid "all"
@@ -1068,6 +1063,12 @@ msgstr "Shadowrocket Description"
1068
1063
  msgid "app.shadowrocket.title"
1069
1064
  msgstr "Shadowrocket"
1070
1065
 
1066
+ msgid "app.singbox.description"
1067
+ msgstr "Sing-box app is the official app for Sing-box protocol."
1068
+
1069
+ msgid "app.singbox.title"
1070
+ msgstr "Sing-box app"
1071
+
1071
1072
  msgid "app.stash.description"
1072
1073
  msgstr "Stash Description"
1073
1074
 
@@ -1407,7 +1408,7 @@ msgstr "☑️ Allow HTTP Connection"
1407
1408
  msgid "config.httpupgrade_enable.description"
1408
1409
  msgstr ""
1409
1410
  "<p>HTTPUpgrade complete a HTTP 1.1 Upgrade request and response before using the connection directly. It is similar to WebSocket in the way it create an direction channel that can be forwarded by many reverse proxies and CDNs, without the need to deal with all the issue around WebSocket Protocol itself.<br />\n"
1410
- "⚠️ <strong>Not Available in Xray based Clients. Only HiddifyNext, Singbox, and V2fly clients are supported.</strong>&nbsp;<a href=\"https://hiddify.com/manager/basic-concepts-and-troubleshooting/Basic-Concepts/#http-upgrade\" target=\"_blank\"><strong>(Read More)</strong></a></p>"
1411
+ "⚠️ <strong>Not Available in Xray based Clients. Only <p><a href=\"https://app.hiddify.com\" target=\"_blank\">Hiddify</a></p>, Singbox, and V2fly clients are supported.</strong>&nbsp;<a href=\"https://hiddify.com/manager/basic-concepts-and-troubleshooting/Basic-Concepts/#http-upgrade\" target=\"_blank\"><strong>(Read More)</strong></a></p>"
1411
1412
 
1412
1413
  msgid "config.httpupgrade_enable.label"
1413
1414
  msgstr "🆙 HTTPUpgrade Method"
@@ -1486,7 +1487,9 @@ msgid "config.kcp_ports.label"
1486
1487
  msgstr "KCP Ports"
1487
1488
 
1488
1489
  msgid "config.lang.description"
1489
- msgstr "Choose Language For Users Area"
1490
+ msgstr ""
1491
+ "Select the language for the user interface to personalize your experience in"
1492
+ " the user area."
1490
1493
 
1491
1494
  msgid "config.lang.label"
1492
1495
  msgstr "🗺️ User Area Language"
@@ -1541,10 +1544,11 @@ msgstr "⬆️ MUX Brutal Upload (mbps)"
1541
1544
 
1542
1545
  msgid "config.mux_enable.description"
1543
1546
  msgstr ""
1544
- "<p>Mux needs compatible clients. Mux in Hiddify Next and Singbox are not "
1545
- "compatible with XRay.&nbsp;<a href=\"https://hiddify.com/manager/basic-"
1546
- "concepts-and-troubleshooting/How-MUX-works-and-its-usage/\" "
1547
- "target=\"_blank\">(Read More)</a></p>"
1547
+ "<p>Mux needs compatible clients. Mux in <p><a "
1548
+ "href=\"https://app.hiddify.com\" target=\"_blank\">Hiddify</a></p> and "
1549
+ "Singbox are not compatible with XRay.&nbsp;<a "
1550
+ "href=\"https://hiddify.com/manager/basic-concepts-and-troubleshooting/How-"
1551
+ "MUX-works-and-its-usage/\" target=\"_blank\">(Read More)</a></p>"
1548
1552
 
1549
1553
  msgid "config.mux_enable.label"
1550
1554
  msgstr "Ⓜ️ MUX (⚠️ Incompatible With Some Clients)"
@@ -1652,10 +1656,10 @@ msgid "config.path_httpupgrade.label"
1652
1656
  msgstr "ℹ️ HTTP Upgrade Path"
1653
1657
 
1654
1658
  msgid "config.path_splithttp.description"
1655
- msgstr "This option defines the Path for Split HTTP"
1659
+ msgstr "config.path_splithttp.description"
1656
1660
 
1657
1661
  msgid "config.path_splithttp.label"
1658
- msgstr "ℹ️ Path for Split HTTP"
1662
+ msgstr "config.path_splithttp.label"
1659
1663
 
1660
1664
  msgid "config.path_ss.description"
1661
1665
  msgstr "Shadowsocks Path in the Links"
@@ -1699,6 +1703,12 @@ msgstr "Specify the Websocket Path"
1699
1703
  msgid "config.path_ws.label"
1700
1704
  msgstr "ℹ️ Path of Websocket Requests"
1701
1705
 
1706
+ msgid "config.path_xhttp.description"
1707
+ msgstr "This option defines the Path for Split HTTP"
1708
+
1709
+ msgid "config.path_xhttp.label"
1710
+ msgstr "ℹ️ Path for Split HTTP"
1711
+
1702
1712
  msgid "config.proxies.description"
1703
1713
  msgstr "Define specific proxy settings"
1704
1714
 
@@ -1878,10 +1888,10 @@ msgid "config.speed_test.label"
1878
1888
  msgstr "🚀 Speed Test"
1879
1889
 
1880
1890
  msgid "config.splithttp_enable.description"
1881
- msgstr "This Protocol send and receive information in individual channels "
1891
+ msgstr "config.splithttp_enable.description"
1882
1892
 
1883
1893
  msgid "config.splithttp_enable.label"
1884
- msgstr "🈁 Split HTTP"
1894
+ msgstr "config.splithttp_enable.label"
1885
1895
 
1886
1896
  msgid "config.ssfaketls.description"
1887
1897
  msgstr ""
@@ -1915,6 +1925,54 @@ msgstr ""
1915
1925
  msgid "config.ssh.label"
1916
1926
  msgstr "SSH Proxy"
1917
1927
 
1928
+ msgid "config.ssh_host_dsa_pk.description"
1929
+ msgstr "config.ssh_host_dsa_pk.description"
1930
+
1931
+ msgid "config.ssh_host_dsa_pk.label"
1932
+ msgstr "config.ssh_host_dsa_pk.label"
1933
+
1934
+ msgid "config.ssh_host_dsa_pub.description"
1935
+ msgstr "config.ssh_host_dsa_pub.description"
1936
+
1937
+ msgid "config.ssh_host_dsa_pub.label"
1938
+ msgstr "config.ssh_host_dsa_pub.label"
1939
+
1940
+ msgid "config.ssh_host_ecdsa_pk.description"
1941
+ msgstr "config.ssh_host_ecdsa_pk.description"
1942
+
1943
+ msgid "config.ssh_host_ecdsa_pk.label"
1944
+ msgstr "config.ssh_host_ecdsa_pk.label"
1945
+
1946
+ msgid "config.ssh_host_ecdsa_pub.description"
1947
+ msgstr "config.ssh_host_ecdsa_pub.description"
1948
+
1949
+ msgid "config.ssh_host_ecdsa_pub.label"
1950
+ msgstr "config.ssh_host_ecdsa_pub.label"
1951
+
1952
+ msgid "config.ssh_host_ed25519_pk.description"
1953
+ msgstr "config.ssh_host_ed25519_pk.description"
1954
+
1955
+ msgid "config.ssh_host_ed25519_pk.label"
1956
+ msgstr "config.ssh_host_ed25519_pk.label"
1957
+
1958
+ msgid "config.ssh_host_ed25519_pub.description"
1959
+ msgstr "config.ssh_host_ed25519_pub.description"
1960
+
1961
+ msgid "config.ssh_host_ed25519_pub.label"
1962
+ msgstr "config.ssh_host_ed25519_pub.label"
1963
+
1964
+ msgid "config.ssh_host_rsa_pk.description"
1965
+ msgstr "config.ssh_host_rsa_pk.description"
1966
+
1967
+ msgid "config.ssh_host_rsa_pk.label"
1968
+ msgstr "config.ssh_host_rsa_pk.label"
1969
+
1970
+ msgid "config.ssh_host_rsa_pub.description"
1971
+ msgstr "config.ssh_host_rsa_pub.description"
1972
+
1973
+ msgid "config.ssh_host_rsa_pub.label"
1974
+ msgstr "config.ssh_host_rsa_pub.label"
1975
+
1918
1976
  msgid "config.ssh_server_enable.description"
1919
1977
  msgstr "SSH Proxy is completely different than original SSH Server"
1920
1978
 
@@ -2268,8 +2326,7 @@ msgstr "WireGuard"
2268
2326
  msgid "config.wireguard_enable.description"
2269
2327
  msgstr ""
2270
2328
  "<p>WireGuard is UDP based protocol. (⚠️ It is Working In <a "
2271
- "href=\"https://github.com/hiddify/hiddify-next\" target=\"_blank\">Hiddify "
2272
- "Next</a>)</p>"
2329
+ "href=\"https://app.hiddify.com/\" target=\"_blank\">Hiddify</a>)</p>"
2273
2330
 
2274
2331
  msgid "config.wireguard_enable.label"
2275
2332
  msgstr "🐉 WireGuard"
@@ -2318,6 +2375,14 @@ msgstr "Websocket creates a tunnel over HTTP that is useful to be used in CDN"
2318
2375
  msgid "config.ws_enable.label"
2319
2376
  msgstr "🔰 Websocket"
2320
2377
 
2378
+ msgid "config.xhttp_enable.description"
2379
+ msgstr ""
2380
+ "<p>This Protocol send and receive information in individual channels.<br />\n"
2381
+ "⚠️ <strong>Not Supported in SignBox based Clients. Only <p><a href=\"https://app.hiddify.com\" target=\"_blank\">Hiddify</a></p> App, and XRay base Clients are supported.</strong></p>"
2382
+
2383
+ msgid "config.xhttp_enable.label"
2384
+ msgstr "🈁 Split HTTP"
2385
+
2321
2386
  msgid "config.xtls_enable.description"
2322
2387
  msgstr "Enables XTLS Protocol"
2323
2388
 
@@ -2444,6 +2509,15 @@ msgstr "☑️ Python : Low Performance"
2444
2509
  msgid "log"
2445
2510
  msgstr "📄 Log"
2446
2511
 
2512
+ msgid "login.button"
2513
+ msgstr "Login"
2514
+
2515
+ msgid "login.password.description"
2516
+ msgstr "For extra security, you need to enter your password."
2517
+
2518
+ msgid "login.password.label"
2519
+ msgstr "Password"
2520
+
2447
2521
  msgid "login.secret.description"
2448
2522
  msgstr "For getting access to this page, please enter your secret code (UUID)"
2449
2523
 
@@ -2889,12 +2963,33 @@ msgstr "Last Usage Date Reset"
2889
2963
  msgid "user.name"
2890
2964
  msgstr "Name"
2891
2965
 
2966
+ msgid "user.password.description"
2967
+ msgstr ""
2968
+ "The password will be used for extra secutiry. You can only login to the "
2969
+ "HiddifyManager after entering your password."
2970
+
2971
+ msgid "user.password.title"
2972
+ msgstr "Password"
2973
+
2974
+ msgid "user.password.validation-lenght"
2975
+ msgstr ""
2976
+ "Your password must be at least 8 characters long for enhanced security."
2977
+
2978
+ msgid "user.password.validation-required"
2979
+ msgstr "Password is required. Please enter your password to continue."
2980
+
2892
2981
  msgid "user.usage_limit_GB"
2893
2982
  msgstr "⌛️ Usage Limit (GB)"
2894
2983
 
2895
2984
  msgid "user.user_links"
2896
2985
  msgstr "User Links"
2897
2986
 
2987
+ msgid "vpn.notallowed"
2988
+ msgstr ""
2989
+ "Please visit this page without using a VPN. You need to access it from the "
2990
+ "country %(expected_country)s, but you're currently accessing it from "
2991
+ "%(your_country)s."
2992
+
2898
2993
  msgid "weekly"
2899
2994
  msgstr "📅 Weekly"
2900
2995