hiddifypanel 10.7.0.dev95__py3-none-any.whl → 10.8.0.dev96__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 (31) hide show
  1. hiddifypanel/VERSION +1 -1
  2. hiddifypanel/VERSION.py +2 -2
  3. hiddifypanel/drivers/ssh_liberty_bridge_api.py +1 -1
  4. hiddifypanel/panel/admin/Actions.py +1 -1
  5. hiddifypanel/panel/admin/DomainAdmin.py +12 -13
  6. hiddifypanel/panel/commercial/restapi/v2/admin/admin_user_api.py +11 -1
  7. hiddifypanel/panel/commercial/restapi/v2/admin/user_api.py +8 -1
  8. hiddifypanel/panel/init_db.py +1 -3
  9. hiddifypanel/panel/user/link_maker.py +4 -0
  10. hiddifypanel/panel/user/user.py +10 -7
  11. hiddifypanel/translations/en/LC_MESSAGES/messages.mo +0 -0
  12. hiddifypanel/translations/en/LC_MESSAGES/messages.po +25 -289
  13. hiddifypanel/translations/fa/LC_MESSAGES/messages.mo +0 -0
  14. hiddifypanel/translations/fa/LC_MESSAGES/messages.po +24 -295
  15. hiddifypanel/translations/pt/LC_MESSAGES/messages.mo +0 -0
  16. hiddifypanel/translations/pt/LC_MESSAGES/messages.po +10 -283
  17. hiddifypanel/translations/ru/LC_MESSAGES/messages.mo +0 -0
  18. hiddifypanel/translations/ru/LC_MESSAGES/messages.po +21 -296
  19. hiddifypanel/translations/zh/LC_MESSAGES/messages.mo +0 -0
  20. hiddifypanel/translations/zh/LC_MESSAGES/messages.po +10 -263
  21. hiddifypanel/translations.i18n/en.json +10 -172
  22. hiddifypanel/translations.i18n/fa.json +13 -175
  23. hiddifypanel/translations.i18n/pt.json +2 -164
  24. hiddifypanel/translations.i18n/ru.json +12 -174
  25. hiddifypanel/translations.i18n/zh.json +2 -164
  26. {hiddifypanel-10.7.0.dev95.dist-info → hiddifypanel-10.8.0.dev96.dist-info}/METADATA +1 -1
  27. {hiddifypanel-10.7.0.dev95.dist-info → hiddifypanel-10.8.0.dev96.dist-info}/RECORD +31 -31
  28. {hiddifypanel-10.7.0.dev95.dist-info → hiddifypanel-10.8.0.dev96.dist-info}/LICENSE.md +0 -0
  29. {hiddifypanel-10.7.0.dev95.dist-info → hiddifypanel-10.8.0.dev96.dist-info}/WHEEL +0 -0
  30. {hiddifypanel-10.7.0.dev95.dist-info → hiddifypanel-10.8.0.dev96.dist-info}/entry_points.txt +0 -0
  31. {hiddifypanel-10.7.0.dev95.dist-info → hiddifypanel-10.8.0.dev96.dist-info}/top_level.txt +0 -0
hiddifypanel/VERSION CHANGED
@@ -1 +1 @@
1
- 10.7.0.dev95
1
+ 10.8.0.dev96
hiddifypanel/VERSION.py CHANGED
@@ -1,3 +1,3 @@
1
- __version__='10.7.0.dev95'
1
+ __version__='10.8.0.dev96'
2
2
  from datetime import datetime
3
- __release_date__= datetime.strptime('2024-03-04','%Y-%m-%d')
3
+ __release_date__= datetime.strptime('2024-03-07','%Y-%m-%d')
@@ -10,7 +10,7 @@ class SSHLibertyBridgeApi(DriverABS):
10
10
 
11
11
  def get_ssh_redis_client(self):
12
12
  if not hasattr(self, 'redis_client'):
13
- self.redis_client = redis.from_url(hconfig(ConfigEnum.ssh_server_redis_url), decode_responses=True)
13
+ self.redis_client = redis.from_url('unix:///opt/hiddify-manager/other/redis/run.sock?db=1', decode_responses=True)
14
14
 
15
15
  return self.redis_client
16
16
 
@@ -170,7 +170,7 @@ class Actions(FlaskView):
170
170
 
171
171
  tcp_ping = hutils.network.is_domain_reality_friendly(d)
172
172
  if tcp_ping:
173
- dip = hutils.network.get_domain_ip(d)
173
+ dip = str(hutils.network.get_domain_ip(d))
174
174
  dip_country = (IPCOUNTRY.get(dip) or {}).get('country', {}).get('iso_code', 'unknown')
175
175
  if dip_country == "IR":
176
176
  continue
@@ -169,26 +169,25 @@ class DomainAdmin(AdminLTEModelView):
169
169
  if hconfig(ConfigEnum.cloudflare) and model.mode != DomainType.fake:
170
170
  try:
171
171
  proxied = model.mode in [DomainType.cdn, DomainType.auto_cdn_ip]
172
- cf_api.add_or_update_domain(model.domain, ipv4_list[0], "A", proxied=proxied)
172
+ cf_api.add_or_update_domain(model.domain, str(ipv4_list[0]), "A", proxied=proxied)
173
173
  if ipv6_list:
174
- cf_api.add_or_update_domain(model.domain, ipv6_list[0], "AAAA", proxied=proxied)
174
+ cf_api.add_or_update_domain(model.domain, str(ipv6_list[0]), "AAAA", proxied=proxied)
175
175
 
176
176
  skip_check = True
177
177
  except Exception as e:
178
- # raise e
179
178
  raise ValidationError(__("Can not connect to Cloudflare.") + f' {e}')
180
179
  # elif model.mode==DomainType.auto_cdn_ip:
181
180
  if model.alias and not model.alias.replace("_", "").isalnum():
182
181
  hutils.flask.flash(__("Using alias with special charachters may cause problem in some clients like FairVPN."), 'warning')
183
- # raise ValidationError(_("You have to add your cloudflare api key to use this feature: "))
182
+ # raise ValidationError(_("You have to add your cloudflare api key to use this feature: "))
184
183
 
185
184
  dip = hutils.network.get_domain_ip(model.domain)
186
185
  if model.sub_link_only:
187
186
  if dip is None:
188
- raise ValidationError(_("Domain can not be resolved! there is a problem in your domain"))
187
+ raise ValidationError(_("Domain can not be resolved! there is a problem in your domain")) # type: ignore
189
188
  elif not skip_check:
190
189
  if dip is None:
191
- raise ValidationError(_("Domain can not be resolved! there is a problem in your domain"))
190
+ raise ValidationError(_("Domain can not be resolved! there is a problem in your domain")) # type: ignore
192
191
 
193
192
  domain_ip_is_same_as_panel = False
194
193
  domain_ip_is_same_as_panel |= dip in ipv4_list
@@ -196,24 +195,24 @@ class DomainAdmin(AdminLTEModelView):
196
195
  domain_ip_is_same_as_panel |= ipaddress.ip_address(dip) == ipaddress.ip_address(ipv6)
197
196
 
198
197
  if model.mode == DomainType.direct and not domain_ip_is_same_as_panel:
199
- hutils.flask.flash(
200
- __(f"Domain IP={dip} is not matched with your ip={', '.join(list(map(str, ipv4_list)))} which is required in direct mode"),
201
- category='warning')
202
- # raise ValidationError(_("Domain IP=%(domain_ip)s is not matched with your ip=%(server_ip)s which is required in direct mode", server_ip=myip, domain_ip=dip))
198
+ # hutils.flask.flash(__(f"Domain IP={dip} is not matched with your ip={', '.join(list(map(str, ipv4_list)))} which is required in direct mode"),category='error')
199
+ raise ValidationError(
200
+ __("Domain IP=%(domain_ip)s is not matched with your ip=%(server_ip)s which is required in direct mode", server_ip=', '.join(list(map(str, ipv4_list))), domain_ip=dip)) # type: ignore
203
201
 
204
202
  if domain_ip_is_same_as_panel and model.mode in [DomainType.cdn, DomainType.relay, DomainType.fake, DomainType.auto_cdn_ip]:
205
- hutils.flask.flash(__(f"In CDN mode, Domain IP={dip} should be different to your ip={', '.join(list(map(str, ipv4_list)))}"), 'warning')
206
- # raise ValidationError(_("In CDN mode, Domain IP=%(domain_ip)s should be different to your ip=%(server_ip)s", server_ip=myip, domain_ip=dip))
203
+ # hutils.flask.flash(__(f"In CDN mode, Domain IP={dip} should be different to your ip={', '.join(list(map(str, ipv4_list)))}"), 'warning')
204
+ raise ValidationError(__("In CDN mode, Domain IP=%(domain_ip)s should be different to your ip=%(server_ip)s", server_ip=', '.join(list(map(str, ipv4_list))), domain_ip=dip)) # type: ignore
207
205
 
208
206
  # if model.mode in [DomainType.ss_faketls, DomainType.telegram_faketls]:
209
207
  # if len(Domain.query.filter(Domain.mode==model.mode and Domain.id!=model.id).all())>0:
210
208
  # ValidationError(f"another {model.mode} is exist")
209
+
211
210
  model.domain = model.domain.lower()
212
211
  if model.mode == DomainType.direct and model.cdn_ip:
213
212
  raise ValidationError(f"Specifying CDN IP is only valid for CDN mode")
214
213
 
215
214
  if model.mode == DomainType.fake and not model.cdn_ip:
216
- model.cdn_ip = ipv4_list[0]
215
+ model.cdn_ip = str(ipv4_list[0])
217
216
 
218
217
  # if model.mode==DomainType.fake and model.cdn_ip!=myip:
219
218
  # raise ValidationError(f"Specifying CDN IP is only valid for CDN mode")
@@ -26,6 +26,16 @@ class AdminSchema(Schema):
26
26
  lang = Enum(Lang, required=True)
27
27
 
28
28
 
29
+ class PatchAdminSchema(AdminSchema):
30
+ def __init__(self, *args, **kwargs):
31
+ super().__init__(*args, **kwargs)
32
+ self.fields['name'].required = False
33
+ self.fields['mode'].required = False
34
+ self.fields['lang'].required = False
35
+ self.fields['can_add_admin'].required = False
36
+ pass
37
+
38
+
29
39
  class AdminUserApi(MethodView):
30
40
  decorators = [login_required({Role.super_admin, Role.admin})]
31
41
 
@@ -36,7 +46,7 @@ class AdminUserApi(MethodView):
36
46
  abort(403, "You don't have permission to access this admin")
37
47
  return admin.to_dict()
38
48
 
39
- @app.input(AdminSchema, arg_name='data')
49
+ @app.input(PatchAdminSchema, arg_name='data')
40
50
  @app.output(SuccessfulSchema)
41
51
  def patch(self, uuid, data):
42
52
  admin = AdminUser.by_uuid(uuid) or abort(404, "admin not found")
@@ -69,6 +69,13 @@ class UserSchema(Schema):
69
69
  )
70
70
 
71
71
 
72
+ class PatchUserSchema(UserSchema):
73
+ def __init__(self, *args, **kwargs):
74
+ super().__init__(*args, **kwargs)
75
+ self.fields['name'].required = False
76
+ pass
77
+
78
+
72
79
  class UserApi(MethodView):
73
80
  decorators = [login_required({Role.super_admin, Role.admin, Role.agent})]
74
81
 
@@ -80,7 +87,7 @@ class UserApi(MethodView):
80
87
 
81
88
  return user.to_dict(False)
82
89
 
83
- @app.input(UserSchema, arg_name="data")
90
+ @app.input(PatchUserSchema, arg_name="data")
84
91
  @app.output(SuccessfulSchema)
85
92
  def patch(self, uuid, data):
86
93
  user = User.by_uuid(uuid) or abort(404, "user not found")
@@ -86,8 +86,6 @@ def _v65():
86
86
  add_config_if_not_exist(ConfigEnum.mux_brutal_down_mbps, '100')
87
87
 
88
88
 
89
- def _v64():
90
- set_hconfig(ConfigEnum.ssh_server_redis_url, "unix:///opt/hiddify-manager/other/redis/run.sock?db=1")
91
89
 
92
90
 
93
91
  def _v63():
@@ -182,7 +180,7 @@ def _v45():
182
180
 
183
181
  if not Proxy.query.filter(Proxy.name == "SSH").first():
184
182
  db.session.add(Proxy(l3='ssh', transport='ssh', cdn='direct', proto='ssh', enable=True, name="SSH"))
185
- add_config_if_not_exist(ConfigEnum.ssh_server_redis_url, "unix:///opt/hiddify-manager/other/redis/run.sock?db=1")
183
+
186
184
  add_config_if_not_exist(ConfigEnum.ssh_server_port, hutils.random.get_random_unused_port())
187
185
  add_config_if_not_exist(ConfigEnum.ssh_server_enable, False)
188
186
  # def _v43():
@@ -302,6 +302,10 @@ def make_proxy(hconfigs, proxy: Proxy, domain_db: Domain, phttp=80, ptls=443, pp
302
302
  def to_link(proxy):
303
303
  if 'error' in proxy:
304
304
  return proxy
305
+ # ignore httpupgrade for Streisand
306
+ if g.user_agent.get('is_streisand') and proxy.get('transport') == 'httpupgrade':
307
+ return {'msg': 'ignore httpupgrade for streisand'}
308
+
305
309
  orig_name_link = (proxy['extra_info'] + " " + proxy["name"]).strip()
306
310
  name_link = hutils.encode.url_encode(orig_name_link)
307
311
  if proxy['proto'] == 'vmess':
@@ -284,19 +284,22 @@ def get_domain_information(no_domain=False, filter_domain=None, alternative=None
284
284
  # print("autocdn ip mode ", d.cdn_ip)
285
285
  if "*" in d.domain:
286
286
  d.domain = d.domain.replace("*", hutils.random.get_random_string(5, 15))
287
- if len(domains) == 0:
288
- domains = [Domain(id=0, domain=alternative, mode=DomainType.direct, cdn_ip='', show_domains=[], child_id=0)]
289
- domains[0].has_auto_ip = True
290
287
 
291
- return domains, has_auto_cdn
288
+ valid_domains = [d for d in domains if d.mode != DomainType.fake and d.mode != DomainType.reality]
289
+
290
+ if len(valid_domains) == 0:
291
+ valid_domains = [Domain(id=0, domain=alternative, mode=DomainType.direct, cdn_ip='', show_domains=[], child_id=0)]
292
+ valid_domains[0].has_auto_ip = True
293
+
294
+ return domains, valid_domains, has_auto_cdn
292
295
 
293
296
 
294
297
  def get_common_data(user_uuid, mode, no_domain=False, filter_domain=None):
295
298
  '''Usable for user account'''
296
299
  # uuid_secret=str(uuid.UUID(user_secret))
297
- domains, has_auto_cdn = get_domain_information(no_domain, filter_domain, urlparse(request.base_url).hostname)
298
- domains_valid = [d for d in domains if d.mode != DomainType.fake and d.mode != DomainType.reality]
299
- db_domain = domains_valid[0]
300
+ domains, valid_domains, has_auto_cdn = get_domain_information(no_domain, filter_domain, urlparse(request.base_url).hostname)
301
+
302
+ db_domain = valid_domains[0] # TODO refactor
300
303
  domain = db_domain.domain
301
304
  user: User = g.account if g.account.uuid == user_uuid else User.by_uuid(f'{user_uuid}')
302
305
  if user is None:
@@ -148,7 +148,7 @@ msgid "config.telegram_lib.description"
148
148
  msgstr ""
149
149
  "You can switch between different Telegram Libraries. Please note that only "
150
150
  "Python works in all servers, others may have some issue. Test Proxy after "
151
- "changing it."
151
+ "changing it"
152
152
 
153
153
  msgid "config.admin.label"
154
154
  msgstr "Admin Settings"
@@ -178,15 +178,15 @@ msgstr ""
178
178
  msgid "config.branding_site.description"
179
179
  msgstr ""
180
180
  "The link to be shown on support section of user's page.\n"
181
- "You can put also your Telegram Channel or Telegram PV here."
181
+ "You can put also your Telegram Channel or Telegram PV here"
182
182
 
183
183
  msgid "config.branding_freetext.label"
184
184
  msgstr "📢 Support Section Text"
185
185
 
186
186
  msgid "config.branding_freetext.description"
187
187
  msgstr ""
188
- "Branding Text. this box's text will be shown on support section of User's "
189
- "Page. you can use HTML tags"
188
+ "Branding Text. this box's text will be shown on support section of User's Page. you can use HTML tags\n"
189
+ "<p><br /><a href=\"https://onlinehtmleditor.dev\" target=\"_blank\">HTML Editor</a></p>"
190
190
 
191
191
  msgid "config.branding.label"
192
192
  msgstr "Customizing User Page"
@@ -353,7 +353,7 @@ msgid "config.tls.label"
353
353
  msgstr "TLS Configuration"
354
354
 
355
355
  msgid "config.tls.description"
356
- msgstr "TLS Configurations could be set in this section."
356
+ msgstr "TLS Configurations could be set in this section"
357
357
 
358
358
  msgid "config.ssfaketls_enable.label"
359
359
  msgstr "🆎 Shadowsocks FakeTLS (Simple OBFS)"
@@ -444,8 +444,9 @@ msgstr "🔐 Telegram Bot Token"
444
444
 
445
445
  msgid "config.telegram_bot_token.description"
446
446
  msgstr ""
447
- "To add Telegram bot feature. you need to create a bot with @BotFather and "
448
- "enter the API code in this field"
447
+ "<p>To add Telegram bot feature. you need to create a bot with <a "
448
+ "href=\"https://t.me/BotFather\" target=\"_blank\">@BotFather</a> and enter "
449
+ "the API code in this field</p>"
449
450
 
450
451
  msgid "config.package_mode.label"
451
452
  msgstr "🔄 Package Update Mode"
@@ -528,7 +529,7 @@ msgstr ""
528
529
  "🔝 Increases browsing speed. To get the Key, go to the <a href='https://1.1.1.1/'> 1.1.1.1 </a>\n"
529
530
  "app and purchase the original KEY from Cloudflare\n"
530
531
  "<br>\n"
531
- "⚠️ If there is an error in this Key, the WARP will be disabled."
532
+ "⚠️ If there is an error in this Key, the WARP will be disabled"
532
533
 
533
534
  msgid "config.warp_mode.label"
534
535
  msgstr "✴️ Warp+ Mode"
@@ -729,65 +730,12 @@ msgstr "Shadowsocks Path"
729
730
  msgid "config.path_ss.description"
730
731
  msgstr "Shadowsocks Path in the Links"
731
732
 
732
- msgid "config.dbvalues.label"
733
- msgstr "-"
734
-
735
- msgid "config.dbvalues.description"
736
- msgstr "-"
737
-
738
733
  msgid "config.create_easysetup_link.label"
739
734
  msgstr "-"
740
735
 
741
736
  msgid "config.create_easysetup_link.description"
742
737
  msgstr "-"
743
738
 
744
- msgid "config.wireguard_enable.label"
745
- msgstr "Enable WireGuard"
746
-
747
- msgid "config.wireguard_enable.description"
748
- msgstr ""
749
- "WireGuard is UDP based protocol.\n"
750
- "\n"
751
- "⚠️ It is working in Hiddify Next. "
752
-
753
- msgid "config.wireguard_port.label"
754
- msgstr "Wireguard Port"
755
-
756
- msgid "config.wireguard_port.description"
757
- msgstr "config.wireguard_port.description"
758
-
759
- msgid "config.wireguard_ipv6.label"
760
- msgstr "-"
761
-
762
- msgid "config.wireguard_ipv6.description"
763
- msgstr "-"
764
-
765
- msgid "config.wireguard_ipv4.label"
766
- msgstr "-"
767
-
768
- msgid "config.wireguard_ipv4.description"
769
- msgstr "-"
770
-
771
- msgid "config.wireguard_private_key.label"
772
- msgstr "-"
773
-
774
- msgid "config.wireguard_private_key.description"
775
- msgstr "-"
776
-
777
- msgid "config.wireguard_public_key.label"
778
- msgstr "-"
779
-
780
- msgid "config.wireguard_public_key.description"
781
- msgstr "-"
782
-
783
- msgid "config.wireguard_noise_trick.label"
784
- msgstr "WireGuard Noise Trick"
785
-
786
- msgid "config.wireguard_noise_trick.description"
787
- msgstr ""
788
- "This method introduces extra noise to prevent detection and blocking by the "
789
- "GFW."
790
-
791
739
  msgid "config.ssh_server_redis_url.label"
792
740
  msgstr "SSH user database address"
793
741
 
@@ -800,7 +748,7 @@ msgstr "↔️ SSH Proxy Port"
800
748
  msgid "config.ssh_server_port.description"
801
749
  msgstr ""
802
750
  "This is completely different from your original SSH server. It is a "
803
- "dedicated program."
751
+ "dedicated program"
804
752
 
805
753
  msgid "config.ssh_server_enable.label"
806
754
  msgstr "✔️ Enable SSH Proxy"
@@ -817,13 +765,6 @@ msgstr ""
817
765
  "<br>\n"
818
766
  "📦 Singbox : Developed by SagerNet. It is also a good core"
819
767
 
820
- msgid "config.warp_sites.label"
821
- msgstr "🆚 Additional Warp Sites"
822
-
823
- msgid "config.warp_sites.description"
824
- msgstr ""
825
- "Add additional sites to pass through Warp (only when warp mode is not None)"
826
-
827
768
  msgid "config.dns_server.label"
828
769
  msgstr "🖥 DNS Server"
829
770
 
@@ -833,128 +774,6 @@ msgstr ""
833
774
  "🚧 Block Malware 1.1.1.2 <br>\n"
834
775
  "🔞 Block Porn 1.1.1.3\n"
835
776
 
836
- msgid "config.reality_port.label"
837
- msgstr "↔️ Direct Reality Port"
838
-
839
- msgid "config.reality_port.description"
840
- msgstr ""
841
- "You can set a customized port for your reality server to reduce the system's"
842
- " overhead. (Allow direct connection to proxies should be yes)"
843
-
844
- msgid "config.tls_fragment_enable.label"
845
- msgstr "⏯ Enable TLS Fragment"
846
-
847
- msgid "config.tls_fragment_enable.description"
848
- msgstr "Under some circumstances, it can bypass the SNI blacklist system"
849
-
850
- msgid "config.tls_fragment_size.label"
851
- msgstr "🎚 TLS Fragment Size"
852
-
853
- msgid "config.tls_fragment_size.description"
854
- msgstr "The Size of each Packet"
855
-
856
- msgid "config.tls_fragment_sleep.label"
857
- msgstr "⏱ TLS Fragment Sleep"
858
-
859
- msgid "config.tls_fragment_sleep.description"
860
- msgstr "The time delay between Fragments"
861
-
862
- msgid "config.tls_mixed_case.label"
863
- msgstr "🔠 Enable TLS Mixed SNI Case"
864
-
865
- msgid "config.tls_mixed_case.description"
866
- msgstr "Enables TLS Mixed SNI Case Fragmentation"
867
-
868
- msgid "config.tls_padding_enable.label"
869
- msgstr "♒️ Enable TLS Padding"
870
-
871
- msgid "config.tls_padding_enable.description"
872
- msgstr "Enables Padding for TLS Fragmentation"
873
-
874
- msgid "config.tls_padding_length.label"
875
- msgstr "📏 TLS Padding"
876
-
877
- msgid "config.tls_padding_length.description"
878
- msgstr "The length of the Padding for TLS Fragmentation"
879
-
880
- msgid "config.mux_enable.label"
881
- msgstr "Ⓜ️ MUX Enable (⚠️ Incompatible with some clients)"
882
-
883
- msgid "config.mux_enable.description"
884
- msgstr ""
885
- "Mux needs compatible clients. Mux in Hiddify Next and singbox are not "
886
- "compatible with Xray"
887
-
888
- msgid "config.mux_protocol.label"
889
- msgstr "♍️ MUX Protocol"
890
-
891
- msgid "config.mux_protocol.description"
892
- msgstr ""
893
- "ℹ️ Multiplex Protocol. 'sMux' is used by default\n"
894
- "<br>\n"
895
- "➖ sMux: Stream Multiplexing\n"
896
- "<br>\n"
897
- "➖ YaMux: Yet Another Multiplexer\n"
898
- "<br>\n"
899
- "➖ h2Mux: Multiplexing Streams Over HTTP/2"
900
-
901
- msgid "config.mux_max_connections.label"
902
- msgstr "⛓ MUX Max Connections"
903
-
904
- msgid "config.mux_max_connections.description"
905
- msgstr "Maximum Connections. Conflict with Max Streams"
906
-
907
- msgid "config.mux_min_streams.label"
908
- msgstr "↘️ MUX Min Streams"
909
-
910
- msgid "config.mux_min_streams.description"
911
- msgstr ""
912
- "Minimum Multiplexed streams in a connection before opening a new connection"
913
-
914
- msgid "config.mux_max_streams.label"
915
- msgstr "↗️ MUX Max Streams"
916
-
917
- msgid "config.mux_max_streams.description"
918
- msgstr ""
919
- "Maximum Multiplexed streams in a connection before opening a new connection"
920
-
921
- msgid "config.mux_padding_enable.label"
922
- msgstr "⟹ MUX Padding"
923
-
924
- msgid "config.mux_padding_enable.description"
925
- msgstr "Enables MUX Padding"
926
-
927
- msgid "config.mux_brutal_enable.label"
928
- msgstr "☣️ MUX Brutal"
929
-
930
- msgid "config.mux_brutal_enable.description"
931
- msgstr "Enables TCP-Brutal congestion control algorithm"
932
-
933
- msgid "config.mux_brutal_up_mbps.label"
934
- msgstr "⬆️ MUX Brutal Upload (mbps)"
935
-
936
- msgid "config.mux_brutal_up_mbps.description"
937
- msgstr "TCP-Brutal Maximum Upload Speed"
938
-
939
- msgid "config.mux_brutal_down_mbps.label"
940
- msgstr "⬇️ MUX Brutal Download (mbps)"
941
-
942
- msgid "config.mux_brutal_down_mbps.description"
943
- msgstr "TCP-Brutal Maximum Download Speed"
944
-
945
- msgid "config.proxy_path_admin.label"
946
- msgstr "🔐 Proxy Path for Admins"
947
-
948
- msgid "config.proxy_path_admin.description"
949
- msgstr ""
950
- "We use secret proxy path to hide our proxies for the governments and bots"
951
-
952
- msgid "config.proxy_path_client.label"
953
- msgstr "🔏 Proxy Path for Clients"
954
-
955
- msgid "config.proxy_path_client.description"
956
- msgstr "Secret proxy path hide the proxies from the governments and bots"
957
-
958
777
  msgid "config.hysteria_enable.label"
959
778
  msgstr "Enable Hysteria2"
960
779
 
@@ -967,88 +786,6 @@ msgstr "🔍 Hysteria2 Port"
967
786
  msgid "config.hysteria_port.description"
968
787
  msgstr "Hysteria UDP Port for example 5678"
969
788
 
970
- msgid "config.hysteria_obfs_enable.label"
971
- msgstr "🎛 Hysteria OBFS Enable"
972
-
973
- msgid "config.hysteria_obfs_enable.description"
974
- msgstr " Enables Hysteria Obfuscation (Salamander)"
975
-
976
- msgid "config.hysteria_up_mbps.label"
977
- msgstr "⬆️ Hysteria Upload (mbps)"
978
-
979
- msgid "config.hysteria_up_mbps.description"
980
- msgstr "Hysteria Maximum Upload Speed"
981
-
982
- msgid "config.hysteria_down_mbps.label"
983
- msgstr "⬇️ Hysteria Download (mbps)"
984
-
985
- msgid "config.hysteria_down_mbps.description"
986
- msgstr "Hysteria Maximum Download Speed"
987
-
988
- msgid "config.shadowsocks2022_enable.label"
989
- msgstr "Enable Shadowsocks 2022"
990
-
991
- msgid "config.shadowsocks2022_enable.description"
992
- msgstr ""
993
- "Shadowsocks 2022 is a secure proxy protocol for TCP and UDP traffic. The "
994
- "proxy traffic is indistinguishable from a random byte stream, and therefore "
995
- "can circumvent firewalls and Internet censors that rely on DPI (Deep Packet "
996
- "Inspection)."
997
-
998
- msgid "config.shadowsocks2022_method.label"
999
- msgstr "Shadowsocks Encrypytion Method"
1000
-
1001
- msgid "config.shadowsocks2022_method.description"
1002
- msgstr "This method also used in ShadowTLS and SSFakeTLS"
1003
-
1004
- msgid "config.shadowsocks2022_port.label"
1005
- msgstr "Shadowsocks 2022 Port"
1006
-
1007
- msgid "config.shadowsocks2022_port.description"
1008
- msgstr "It needs both UDP and TCP to be free"
1009
-
1010
- msgid "config.ws_enable.label"
1011
- msgstr "Enable Websocket"
1012
-
1013
- msgid "config.ws_enable.description"
1014
- msgstr ""
1015
- "Websocket creates a tunnel over http that is useful to be used in CDN."
1016
-
1017
- msgid "config.grpc_enable.label"
1018
- msgstr "Enable gRPC"
1019
-
1020
- msgid "config.grpc_enable.description"
1021
- msgstr ""
1022
- "gRPC is a modern open source high performance Remote Procedure Call (RPC) "
1023
- "framework. It can be used in supported CDNs."
1024
-
1025
- msgid "config.httpupgrade_enable.label"
1026
- msgstr "Enable HTTPUpgrade Method"
1027
-
1028
- msgid "config.httpupgrade_enable.description"
1029
- msgstr ""
1030
- "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.\n"
1031
- "\n"
1032
- "⚠️ Not Available in Xray based Clients. Only HiddifyNext, Singbox, and V2fly clients are supported"
1033
-
1034
- msgid "config.path_httpupgrade.label"
1035
- msgstr "HTTP Upgrade Path"
1036
-
1037
- msgid "config.path_httpupgrade.description"
1038
- msgstr "should be random"
1039
-
1040
- msgid "config.mux.label"
1041
- msgstr "MUX Config"
1042
-
1043
- msgid "config.mux.description"
1044
- msgstr "MUX (Multiplex) configurations could be set in this section"
1045
-
1046
- msgid "config.tls_trick.label"
1047
- msgstr "TLS Trick"
1048
-
1049
- msgid "config.tls_trick.description"
1050
- msgstr "TLS Fragmentation configurations could be set in this section"
1051
-
1052
789
  msgid "config.ssh.label"
1053
790
  msgstr "SSH Proxy"
1054
791
 
@@ -1074,21 +811,6 @@ msgstr "-"
1074
811
  msgid "config.hidden.description"
1075
812
  msgstr "-"
1076
813
 
1077
- msgid "config.wireguard.label"
1078
- msgstr "Wireguard"
1079
-
1080
- msgid "config.wireguard.description"
1081
- msgstr ""
1082
- "WireGuard is a lightweight, UDP based protocol known for its simplicity, efficiency, and strong security. It offers quick setup, transparent code, and has gained popularity for its ease of use across various operating systems.\n"
1083
- "\n"
1084
- "⚠️ Accounting is not yet implemented for this protocol."
1085
-
1086
- msgid "config.shadowsocks.label"
1087
- msgstr "Shadowsocks"
1088
-
1089
- msgid "config.shadowsocks.description"
1090
- msgstr "Shadowsocks is a fast tunnel proxy that helps you bypass firewalls."
1091
-
1092
814
  msgid "Domain can not be resolved! there is a problem in your domain"
1093
815
  msgstr ""
1094
816
  "Domain can not be resolved! There is a problem in your domain. Please check "
@@ -1676,6 +1398,20 @@ msgstr ""
1676
1398
  "Using alias with special charachters may cause problem in some clients like "
1677
1399
  "FairVPN."
1678
1400
 
1401
+ msgid ""
1402
+ "Domain IP=%(domain_ip)s is not matched with your ip=%(server_ip)s which is "
1403
+ "required in direct mode"
1404
+ msgstr ""
1405
+ "Domain IP=%(domain_ip)s is not matched with your ip=%(server_ip)s which is "
1406
+ "required in direct mode"
1407
+
1408
+ msgid ""
1409
+ "In CDN mode, Domain IP=%(domain_ip)s should be different to your "
1410
+ "ip=%(server_ip)s"
1411
+ msgstr ""
1412
+ "In CDN mode, Domain IP=%(domain_ip)s should be different to your "
1413
+ "ip=%(server_ip)s"
1414
+
1679
1415
  msgid "Domain is not REALITY friendly!"
1680
1416
  msgstr "Domain is Not REALITY Friendly!"
1681
1417
 
@@ -1890,7 +1626,7 @@ msgid ""
1890
1626
  msgstr ""
1891
1627
  "🔄 Hiddify Manager automatically takes a Backup every 6 Hours. The path of the Backup files on the server: ⬇️\n"
1892
1628
  "<br>\n"
1893
- "/opt/hiddify-config/hiddify-panel/backup\n"
1629
+ "/opt/hiddify-manager/hiddify-panel/backup/\n"
1894
1630
  "<br>\n"
1895
1631
  "<br>\n"
1896
1632
  "<br>\n"