hiddifypanel 10.14.0__py3-none-any.whl → 10.15.0.dev0__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 (107) hide show
  1. hiddifypanel/VERSION +1 -1
  2. hiddifypanel/VERSION.py +2 -2
  3. hiddifypanel/auth.py +15 -4
  4. hiddifypanel/base.py +11 -3
  5. hiddifypanel/cache.py +43 -25
  6. hiddifypanel/database.py +9 -0
  7. hiddifypanel/drivers/singbox_api.py +2 -14
  8. hiddifypanel/drivers/xray_api.py +0 -4
  9. hiddifypanel/hutils/__init__.py +1 -0
  10. hiddifypanel/hutils/convert.py +13 -2
  11. hiddifypanel/hutils/crypto.py +21 -2
  12. hiddifypanel/hutils/flask.py +18 -4
  13. hiddifypanel/hutils/importer/xui.py +5 -2
  14. hiddifypanel/hutils/node/__init__.py +3 -0
  15. hiddifypanel/hutils/node/api_client.py +76 -0
  16. hiddifypanel/hutils/node/child.py +147 -0
  17. hiddifypanel/hutils/node/parent.py +100 -0
  18. hiddifypanel/hutils/node/shared.py +65 -0
  19. hiddifypanel/hutils/proxy/shared.py +15 -3
  20. hiddifypanel/models/__init__.py +2 -2
  21. hiddifypanel/models/admin.py +14 -2
  22. hiddifypanel/models/base_account.py +3 -3
  23. hiddifypanel/models/child.py +30 -16
  24. hiddifypanel/models/config.py +39 -15
  25. hiddifypanel/models/config_enum.py +55 -8
  26. hiddifypanel/models/domain.py +28 -20
  27. hiddifypanel/models/parent_domain.py +2 -2
  28. hiddifypanel/models/proxy.py +13 -4
  29. hiddifypanel/models/report.py +2 -3
  30. hiddifypanel/models/usage.py +2 -2
  31. hiddifypanel/models/user.py +13 -4
  32. hiddifypanel/panel/admin/Actions.py +4 -6
  33. hiddifypanel/panel/admin/AdminstratorAdmin.py +13 -2
  34. hiddifypanel/panel/admin/Dashboard.py +5 -10
  35. hiddifypanel/panel/admin/DomainAdmin.py +12 -11
  36. hiddifypanel/panel/admin/NodeAdmin.py +6 -2
  37. hiddifypanel/panel/admin/ProxyAdmin.py +4 -3
  38. hiddifypanel/panel/admin/SettingAdmin.py +60 -21
  39. hiddifypanel/panel/admin/UserAdmin.py +10 -2
  40. hiddifypanel/panel/admin/templates/index.html +1 -1
  41. hiddifypanel/panel/admin/templates/parent_dash.html +2 -4
  42. hiddifypanel/panel/cli.py +16 -16
  43. hiddifypanel/panel/commercial/ProxyDetailsAdmin.py +10 -5
  44. hiddifypanel/panel/commercial/__init__.py +7 -5
  45. hiddifypanel/panel/commercial/restapi/v2/admin/__init__.py +0 -5
  46. hiddifypanel/panel/commercial/restapi/v2/admin/admin_info_api.py +2 -2
  47. hiddifypanel/panel/commercial/restapi/v2/admin/admin_log_api.py +4 -5
  48. hiddifypanel/panel/commercial/restapi/v2/admin/admin_user_api.py +8 -35
  49. hiddifypanel/panel/commercial/restapi/v2/admin/admin_users_api.py +4 -4
  50. hiddifypanel/panel/commercial/restapi/v2/admin/schema.py +157 -0
  51. hiddifypanel/panel/commercial/restapi/v2/admin/server_status_api.py +3 -3
  52. hiddifypanel/panel/commercial/restapi/v2/admin/user_api.py +9 -73
  53. hiddifypanel/panel/commercial/restapi/v2/admin/users_api.py +1 -1
  54. hiddifypanel/panel/commercial/restapi/v2/child/__init__.py +18 -0
  55. hiddifypanel/panel/commercial/restapi/v2/child/actions.py +63 -0
  56. hiddifypanel/panel/commercial/restapi/v2/child/register_parent_api.py +34 -0
  57. hiddifypanel/panel/commercial/restapi/v2/child/schema.py +7 -0
  58. hiddifypanel/panel/commercial/restapi/v2/child/sync_parent_api.py +21 -0
  59. hiddifypanel/panel/commercial/restapi/v2/panel/__init__.py +13 -0
  60. hiddifypanel/panel/commercial/restapi/v2/panel/info.py +18 -0
  61. hiddifypanel/panel/commercial/restapi/v2/panel/ping_pong.py +23 -0
  62. hiddifypanel/panel/commercial/restapi/v2/panel/schema.py +7 -0
  63. hiddifypanel/panel/commercial/restapi/v2/parent/__init__.py +16 -0
  64. hiddifypanel/panel/commercial/restapi/v2/parent/register_api.py +65 -0
  65. hiddifypanel/panel/commercial/restapi/v2/parent/schema.py +115 -0
  66. hiddifypanel/panel/commercial/restapi/v2/parent/status_api.py +26 -0
  67. hiddifypanel/panel/commercial/restapi/v2/parent/sync_api.py +53 -0
  68. hiddifypanel/panel/commercial/restapi/v2/parent/usage_api.py +57 -0
  69. hiddifypanel/panel/commercial/telegrambot/admin.py +1 -2
  70. hiddifypanel/panel/common.py +21 -6
  71. hiddifypanel/panel/hiddify.py +9 -80
  72. hiddifypanel/panel/init_db.py +43 -12
  73. hiddifypanel/panel/usage.py +28 -15
  74. hiddifypanel/panel/user/templates/home/usage.html +1 -1
  75. hiddifypanel/panel/user/templates/new.html +1 -1
  76. hiddifypanel/static/css/custom.css +13 -0
  77. hiddifypanel/static/images/hiddify.png +0 -0
  78. hiddifypanel/static/new/assets/{index-bce9b1a6.js → index-ccb9873c.js} +65 -65
  79. hiddifypanel/templates/admin-layout.html +24 -40
  80. hiddifypanel/templates/fake.html +298 -0
  81. hiddifypanel/templates/master.html +23 -41
  82. hiddifypanel/translations/en/LC_MESSAGES/messages.mo +0 -0
  83. hiddifypanel/translations/en/LC_MESSAGES/messages.po +90 -0
  84. hiddifypanel/translations/fa/LC_MESSAGES/messages.mo +0 -0
  85. hiddifypanel/translations/fa/LC_MESSAGES/messages.po +91 -1
  86. hiddifypanel/translations/pt/LC_MESSAGES/messages.mo +0 -0
  87. hiddifypanel/translations/pt/LC_MESSAGES/messages.po +98 -6
  88. hiddifypanel/translations/ru/LC_MESSAGES/messages.mo +0 -0
  89. hiddifypanel/translations/ru/LC_MESSAGES/messages.po +90 -0
  90. hiddifypanel/translations/zh/LC_MESSAGES/messages.mo +0 -0
  91. hiddifypanel/translations/zh/LC_MESSAGES/messages.po +92 -2
  92. hiddifypanel/translations.i18n/en.json +56 -0
  93. hiddifypanel/translations.i18n/fa.json +57 -1
  94. hiddifypanel/translations.i18n/pt.json +63 -7
  95. hiddifypanel/translations.i18n/ru.json +56 -0
  96. hiddifypanel/translations.i18n/zh.json +58 -2
  97. {hiddifypanel-10.14.0.dist-info → hiddifypanel-10.15.0.dev0.dist-info}/METADATA +47 -47
  98. {hiddifypanel-10.14.0.dist-info → hiddifypanel-10.15.0.dev0.dist-info}/RECORD +104 -86
  99. hiddifypanel/panel/commercial/restapi/v2/DTO.py +0 -9
  100. hiddifypanel/panel/commercial/restapi/v2/hello/__init__.py +0 -16
  101. hiddifypanel/panel/commercial/restapi/v2/hello/hello.py +0 -32
  102. /hiddifypanel/static/images/{hiddify1.png → hiddify-old.png} +0 -0
  103. /hiddifypanel/static/{new/assets/hiddify-logo-noroz-559c8dcb.png → images/hiddify2.png} +0 -0
  104. {hiddifypanel-10.14.0.dist-info → hiddifypanel-10.15.0.dev0.dist-info}/LICENSE.md +0 -0
  105. {hiddifypanel-10.14.0.dist-info → hiddifypanel-10.15.0.dev0.dist-info}/WHEEL +0 -0
  106. {hiddifypanel-10.14.0.dist-info → hiddifypanel-10.15.0.dev0.dist-info}/entry_points.txt +0 -0
  107. {hiddifypanel-10.14.0.dist-info → hiddifypanel-10.15.0.dev0.dist-info}/top_level.txt +0 -0
@@ -9,25 +9,22 @@
9
9
  {% block nav_bar %}
10
10
  {% include "donation.html" %}
11
11
  <!-- Navbar -->
12
- <nav class="main-header hold-transition sidebar-mini-md navbar navbar-expand {{" navbar-dark" if g.darkmode
13
- else "bg-white navbar-light" }} border-bottom">
12
+ <nav class="main-header hold-transition sidebar-mini-md navbar navbar-expand {{'navbar-dark' if g.darkmode else 'bg-white navbar-light' }} border-bottom">
14
13
  <!-- Left navbar links -->
15
14
 
16
15
 
17
16
 
18
17
  <div class="navbar-nav">
19
- <a class="nav-link" data-widget="pushmenu" href="#"><i class="fa fa-bars"></i> <span
20
- class="brand-text font-weight-light">{{_("master.page-title")}}
18
+ <a class="nav-link" data-widget="pushmenu" href="#"><i class="fa fa-bars"></i> <span class="brand-text font-weight-light">{{_("master.page-title")}}
21
19
  <!-- <span class="badge d-none d-sm-inline-block">{{version}}</span> -->
22
- {% if hconfig(ConfigEnum.is_parent) %}
20
+ {% if hutils.node.is_parent() %}
23
21
  {{_("Parent Panel")}}
24
- {% elif hconfig(ConfigEnum.parent_panel) %}
25
- {{g.child.name}}
22
+ {% elif hutils.node.is_child() %}
23
+ Child Panel
26
24
  {% endif %}
27
25
  </a>
28
26
  <a class="nav-link" href="https://github.com/hiddify/Hiddify-Manager/" target="_blank">
29
- <img alt="GitHub Repo stars"
30
- src="https://img.shields.io/github/stars/hiddify/hiddify-manager?style=social&logo=star&label=%E2%AD%90">
27
+ <img alt="GitHub Repo stars" src="https://img.shields.io/github/stars/hiddify/hiddify-manager?style=social&logo=star&label=%E2%AD%90">
31
28
 
32
29
  </a>
33
30
  </div>
@@ -41,11 +38,10 @@
41
38
  <i class="fa-solid fa-moon"></i>
42
39
  </a>
43
40
  {% endif %}
44
- {% if 0 and not hconfig(ConfigEnum.is_parent) %}
41
+ {% if 0 and not hutils.node.is_parent() %}
45
42
 
46
43
 
47
- <a class="nav-link btn btn-outline-secondary form_post d-none d-md-flex"
48
- href="{{hurl_for('admin.Actions:apply_configs')}}">
44
+ <a class="nav-link btn btn-outline-secondary form_post d-none d-md-flex" href="{{hurl_for('admin.Actions:apply_configs')}}">
49
45
  {{icon('solid','bolt','nav-icon')}} {{_('admin.Actions:apply_configs')}}
50
46
  </a>
51
47
 
@@ -59,15 +55,13 @@
59
55
 
60
56
 
61
57
  <!-- Main Sidebar Container -->
62
- <aside id="main-sidebar" class="main-sidebar {{ " sidebar-dark-primary"}} elevation-4">
58
+ <aside id="main-sidebar" class="main-sidebar {{'sidebar-dark-primary' if g.darkmode else ''}} elevation-4">
63
59
  <!-- Brand Logo -->
64
60
 
65
- <a href="https://github.com/hiddify/hiddify-manager/wiki" class=""
66
- style="text-align: center; color: white;display: block;">
67
- <img src="{{static_url_for(filename='images/WhiteLogo.png')}}" class=" "
68
- style="width: 50%;opacity: .8;margin: auto;display:block" />
61
+ <a href="https://github.com/hiddify/hiddify-manager/wiki" class="" style="text-align: center; color: white;display: block;">
62
+ <img src="{{static_url_for(filename='images/WhiteLogo.png')}}" class=" " style="width: 50%;opacity: .8;margin: auto;display:block" />
69
63
  <div class="ltr" style="font-size: 8pt;">{{version}}</div>
70
- {% if False and hconfig(ConfigEnum.is_parent) %}
64
+ {% if False and hutils.node.is_parent() %}
71
65
  <br>
72
66
  <!-- <span class="badge">{{_("Parent Panel")}}</span> -->
73
67
 
@@ -88,23 +82,18 @@
88
82
  <div class="n3av nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false">
89
83
  <!-- Add icons to the links using the .nav-icon class
90
84
  with font-awesome or any other icon font library -->
91
- {{ render_nav_item('admin.Dashboard:index', icon('solid','house','nav-icon')+(_("Parent Panel") if
92
- hconfig(ConfigEnum.is_parent) else _('admin.menu.home')),_use_li=True)
93
- }}
85
+ {{ render_nav_item('admin.Dashboard:index', icon('solid','house','nav-icon')+(_("Parent Panel") if hutils.node.is_parent() else _('admin.menu.home')),_use_li=True)}}
94
86
 
95
- {% if hconfig(ConfigEnum.parent_panel) %}
96
- {# render_nav_item(hconfig(ConfigEnum.parent_panel)+"/admin/user/",
97
- icon('solid','user','nav-icon')+_('admin.menu.user'),_badge=_('in parent panel') ,_use_li=True) #}
87
+ {% if hutils.node.is_child() %}
88
+ {{ render_nav_item(hconfig(ConfigEnum.parent_panel)+"/"+g.account.uuid+"/admin/user/",icon('solid','user-secret','nav-icon')+_('admin.menu.user'),_badge=_('in parent panel') ,_use_li=True) }}
98
89
  {% else %}
99
- {{ render_nav_item('flask.user.index_view', icon('solid','user','nav-icon')+_('admin.menu.user'),_use_li=True)
100
- }}
90
+ {{ render_nav_item('flask.user.index_view', icon('solid','user','nav-icon')+_('admin.menu.user'),_use_li=True)}}
101
91
  {% endif %}
102
- {% if hconfig(ConfigEnum.parent_panel) %}
103
- {{ render_nav_item(hconfig(ConfigEnum.parent_panel)+"/admin/adminuser/",
104
- icon('solid','user-secret','nav-icon')+_('Admins'),_badge=_('in parent panel') ,_use_li=True) }}
92
+
93
+ {% if hutils.node.is_child() %}
94
+ {{ render_nav_item(hconfig(ConfigEnum.parent_panel)+"/"+g.account.uuid+"/admin/adminuser/",icon('solid','user-secret','nav-icon')+_('Admins'),_badge=_('in parent panel') ,_use_li=True) }}
105
95
  {% else %}
106
- {{ render_nav_item('flask.adminuser.index_view',
107
- icon('solid','user-secret','nav-icon')+_('Admins'),_use_li=True) }}
96
+ {{ render_nav_item('flask.adminuser.index_view', icon('solid','user-secret','nav-icon')+_('Admins'),_use_li=True) }}
108
97
  {% endif %}
109
98
 
110
99
 
@@ -113,8 +102,7 @@
113
102
  request.endpoint or "Dashboard" in request.endpoint) else True %}
114
103
  <li class="nav-item {{'menu-open' if settings_active else ''}}">
115
104
 
116
- <a id=href="#" data-target="#setting-sidebar"
117
- class="nav-link">{{icon('solid','gear','nav-icon')+_('admin.menu.config')}}</a>
105
+ <a id="" href="#" data-target="#setting-sidebar" class="nav-link">{{icon('solid','gear','nav-icon')+_('admin.menu.config')}}</a>
118
106
 
119
107
  </li>
120
108
  {% endif %}
@@ -129,21 +117,17 @@
129
117
  {% if g.account.mode=="super_admin" %}
130
118
  <li class="nav-item {{'menu-open' if action_active else ''}}">
131
119
 
132
- <a id=href="#" data-target="#action-sidebar"
133
- class="nav-link">{{icon('solid','suitcase','nav-icon')+_('admin.actions.title')}} <i
134
- class="right fas fa-angle-left"></i></a>
120
+ <a id=href="#" data-target="#action-sidebar" class="nav-link">{{icon('solid','suitcase','nav-icon')+_('admin.actions.title')}} <i class="right fas fa-angle-left"></i></a>
135
121
 
136
122
  </li>
137
123
  {% endif %}
138
124
 
139
125
  <li class="nav-item">
140
126
  <a href="https://github.com/hiddify/hiddify-manager/wiki/{{'%D9%87%D9%85%D9%87-%D8%A2%D9%85%D9%88%D8%B2%D8%B4%E2%80%8C%D9%87%D8%A7-%D9%88-%D9%88%DB%8C%D8%AF%D8%A6%D9%88%D9%87%D8%A7' if get_locale()=='fa' else 'All-tutorials-and-videos'}}"
141
- target="_blank"
142
- class=" nav-link">{{icon('solid','circle-question','nav-icon')+_('admin.menu.support')}}</a>
127
+ target="_blank" class=" nav-link">{{icon('solid','circle-question','nav-icon')+_('admin.menu.support')}}</a>
143
128
  </li>
144
129
  <li class="nav-item d-none">
145
- <a href="https://t.me/hiddify" target="_blank"
146
- class="nav-link">{{icon('brands','telegram','nav-icon')+_('admin.menu.telegram')}}</a>
130
+ <a href="https://t.me/hiddify" target="_blank" class="nav-link">{{icon('brands','telegram','nav-icon')+_('admin.menu.telegram')}}</a>
147
131
  </li>
148
132
  <li class="nav-item">
149
133
  {% set issue_link = generate_github_issue_link_for_admin_sidebar() %}
@@ -0,0 +1,298 @@
1
+ {{_("config.dbvalues.label")}}
2
+ {{_("config.dbvalues.description")}}
3
+ {{_("config.create_easysetup_link.label")}}
4
+ {{_("config.create_easysetup_link.description")}}
5
+ {{_("config.wireguard_enable.label")}}
6
+ {{_("config.wireguard_enable.description")}}
7
+ {{_("config.wireguard_port.label")}}
8
+ {{_("config.wireguard_port.description")}}
9
+ {{_("config.wireguard_ipv6.label")}}
10
+ {{_("config.wireguard_ipv6.description")}}
11
+ {{_("config.wireguard_ipv4.label")}}
12
+ {{_("config.wireguard_ipv4.description")}}
13
+ {{_("config.wireguard_private_key.label")}}
14
+ {{_("config.wireguard_private_key.description")}}
15
+ {{_("config.wireguard_public_key.label")}}
16
+ {{_("config.wireguard_public_key.description")}}
17
+ {{_("config.wireguard_noise_trick.label")}}
18
+ {{_("config.wireguard_noise_trick.description")}}
19
+ {{_("config.ssh_server_redis_url.label")}}
20
+ {{_("config.ssh_server_redis_url.description")}}
21
+ {{_("config.ssh_server_port.label")}}
22
+ {{_("config.ssh_server_port.description")}}
23
+ {{_("config.ssh_server_enable.label")}}
24
+ {{_("config.ssh_server_enable.description")}}
25
+ {{_("config.first_setup.label")}}
26
+ {{_("config.first_setup.description")}}
27
+ {{_("config.core_type.label")}}
28
+ {{_("config.core_type.description")}}
29
+ {{_("config.warp_enable.label")}}
30
+ {{_("config.warp_enable.description")}}
31
+ {{_("config.warp_mode.label")}}
32
+ {{_("config.warp_mode.description")}}
33
+ {{_("config.warp_plus_code.label")}}
34
+ {{_("config.warp_plus_code.description")}}
35
+ {{_("config.warp_sites.label")}}
36
+ {{_("config.warp_sites.description")}}
37
+ {{_("config.dns_server.label")}}
38
+ {{_("config.dns_server.description")}}
39
+ {{_("config.reality_fallback_domain.label")}}
40
+ {{_("config.reality_fallback_domain.description")}}
41
+ {{_("config.reality_server_names.label")}}
42
+ {{_("config.reality_server_names.description")}}
43
+ {{_("config.reality_short_ids.label")}}
44
+ {{_("config.reality_short_ids.description")}}
45
+ {{_("config.reality_private_key.label")}}
46
+ {{_("config.reality_private_key.description")}}
47
+ {{_("config.reality_public_key.label")}}
48
+ {{_("config.reality_public_key.description")}}
49
+ {{_("config.reality_port.label")}}
50
+ {{_("config.reality_port.description")}}
51
+ {{_("config.restls1_2_domain.label")}}
52
+ {{_("config.restls1_2_domain.description")}}
53
+ {{_("config.restls1_3_domain.label")}}
54
+ {{_("config.restls1_3_domain.description")}}
55
+ {{_("config.show_usage_in_sublink.label")}}
56
+ {{_("config.show_usage_in_sublink.description")}}
57
+ {{_("config.cloudflare.label")}}
58
+ {{_("config.cloudflare.description")}}
59
+ {{_("config.license.label")}}
60
+ {{_("config.license.description")}}
61
+ {{_("config.country.label")}}
62
+ {{_("config.country.description")}}
63
+ {{_("config.package_mode.label")}}
64
+ {{_("config.package_mode.description")}}
65
+ {{_("config.utls.label")}}
66
+ {{_("config.utls.description")}}
67
+ {{_("config.telegram_bot_token.label")}}
68
+ {{_("config.telegram_bot_token.description")}}
69
+ {{_("config.is_parent.label")}}
70
+ {{_("config.is_parent.description")}}
71
+ {{_("config.parent_panel.label")}}
72
+ {{_("config.parent_panel.description")}}
73
+ {{_("config.parent_domain.label")}}
74
+ {{_("config.parent_domain.description")}}
75
+ {{_("config.parent_admin_proxy_path.label")}}
76
+ {{_("config.parent_admin_proxy_path.description")}}
77
+ {{_("config.panel_mode.label")}}
78
+ {{_("config.panel_mode.description")}}
79
+ {{_("config.log_level.label")}}
80
+ {{_("config.log_level.description")}}
81
+ {{_("config.unique_id.label")}}
82
+ {{_("config.unique_id.description")}}
83
+ {{_("config.last_hash.label")}}
84
+ {{_("config.last_hash.description")}}
85
+ {{_("config.cdn_forced_host.label")}}
86
+ {{_("config.cdn_forced_host.description")}}
87
+ {{_("config.lang.label")}}
88
+ {{_("config.lang.description")}}
89
+ {{_("config.admin_lang.label")}}
90
+ {{_("config.admin_lang.description")}}
91
+ {{_("config.admin_secret.label")}}
92
+ {{_("config.admin_secret.description")}}
93
+ {{_("config.tls_ports.label")}}
94
+ {{_("config.tls_ports.description")}}
95
+ {{_("config.tls_fragment_enable.label")}}
96
+ {{_("config.tls_fragment_enable.description")}}
97
+ {{_("config.tls_fragment_size.label")}}
98
+ {{_("config.tls_fragment_size.description")}}
99
+ {{_("config.tls_fragment_sleep.label")}}
100
+ {{_("config.tls_fragment_sleep.description")}}
101
+ {{_("config.tls_mixed_case.label")}}
102
+ {{_("config.tls_mixed_case.description")}}
103
+ {{_("config.tls_padding_enable.label")}}
104
+ {{_("config.tls_padding_enable.description")}}
105
+ {{_("config.tls_padding_length.label")}}
106
+ {{_("config.tls_padding_length.description")}}
107
+ {{_("config.mux_enable.label")}}
108
+ {{_("config.mux_enable.description")}}
109
+ {{_("config.mux_protocol.label")}}
110
+ {{_("config.mux_protocol.description")}}
111
+ {{_("config.mux_max_connections.label")}}
112
+ {{_("config.mux_max_connections.description")}}
113
+ {{_("config.mux_min_streams.label")}}
114
+ {{_("config.mux_min_streams.description")}}
115
+ {{_("config.mux_max_streams.label")}}
116
+ {{_("config.mux_max_streams.description")}}
117
+ {{_("config.mux_padding_enable.label")}}
118
+ {{_("config.mux_padding_enable.description")}}
119
+ {{_("config.mux_brutal_enable.label")}}
120
+ {{_("config.mux_brutal_enable.description")}}
121
+ {{_("config.mux_brutal_up_mbps.label")}}
122
+ {{_("config.mux_brutal_up_mbps.description")}}
123
+ {{_("config.mux_brutal_down_mbps.label")}}
124
+ {{_("config.mux_brutal_down_mbps.description")}}
125
+ {{_("config.http_ports.label")}}
126
+ {{_("config.http_ports.description")}}
127
+ {{_("config.kcp_ports.label")}}
128
+ {{_("config.kcp_ports.description")}}
129
+ {{_("config.kcp_enable.label")}}
130
+ {{_("config.kcp_enable.description")}}
131
+ {{_("config.decoy_domain.label")}}
132
+ {{_("config.decoy_domain.description")}}
133
+ {{_("config.proxy_path.label")}}
134
+ {{_("config.proxy_path.description")}}
135
+ {{_("config.proxy_path_admin.label")}}
136
+ {{_("config.proxy_path_admin.description")}}
137
+ {{_("config.proxy_path_client.label")}}
138
+ {{_("config.proxy_path_client.description")}}
139
+ {{_("config.firewall.label")}}
140
+ {{_("config.firewall.description")}}
141
+ {{_("config.netdata.label")}}
142
+ {{_("config.netdata.description")}}
143
+ {{_("config.http_proxy_enable.label")}}
144
+ {{_("config.http_proxy_enable.description")}}
145
+ {{_("config.block_iran_sites.label")}}
146
+ {{_("config.block_iran_sites.description")}}
147
+ {{_("config.allow_invalid_sni.label")}}
148
+ {{_("config.allow_invalid_sni.description")}}
149
+ {{_("config.auto_update.label")}}
150
+ {{_("config.auto_update.description")}}
151
+ {{_("config.speed_test.label")}}
152
+ {{_("config.speed_test.description")}}
153
+ {{_("config.only_ipv4.label")}}
154
+ {{_("config.only_ipv4.description")}}
155
+ {{_("config.shared_secret.label")}}
156
+ {{_("config.shared_secret.description")}}
157
+ {{_("config.telegram_enable.label")}}
158
+ {{_("config.telegram_enable.description")}}
159
+ {{_("config.telegram_adtag.label")}}
160
+ {{_("config.telegram_adtag.description")}}
161
+ {{_("config.telegram_lib.label")}}
162
+ {{_("config.telegram_lib.description")}}
163
+ {{_("config.telegram_fakedomain.label")}}
164
+ {{_("config.telegram_fakedomain.description")}}
165
+ {{_("config.v2ray_enable.label")}}
166
+ {{_("config.v2ray_enable.description")}}
167
+ {{_("config.torrent_block.label")}}
168
+ {{_("config.torrent_block.description")}}
169
+ {{_("config.tuic_enable.label")}}
170
+ {{_("config.tuic_enable.description")}}
171
+ {{_("config.tuic_port.label")}}
172
+ {{_("config.tuic_port.description")}}
173
+ {{_("config.hysteria_enable.label")}}
174
+ {{_("config.hysteria_enable.description")}}
175
+ {{_("config.hysteria_port.label")}}
176
+ {{_("config.hysteria_port.description")}}
177
+ {{_("config.hysteria_obfs_enable.label")}}
178
+ {{_("config.hysteria_obfs_enable.description")}}
179
+ {{_("config.hysteria_up_mbps.label")}}
180
+ {{_("config.hysteria_up_mbps.description")}}
181
+ {{_("config.hysteria_down_mbps.label")}}
182
+ {{_("config.hysteria_down_mbps.description")}}
183
+ {{_("config.shadowsocks2022_enable.label")}}
184
+ {{_("config.shadowsocks2022_enable.description")}}
185
+ {{_("config.shadowsocks2022_method.label")}}
186
+ {{_("config.shadowsocks2022_method.description")}}
187
+ {{_("config.shadowsocks2022_port.label")}}
188
+ {{_("config.shadowsocks2022_port.description")}}
189
+ {{_("config.ssfaketls_enable.label")}}
190
+ {{_("config.ssfaketls_enable.description")}}
191
+ {{_("config.ssfaketls_fakedomain.label")}}
192
+ {{_("config.ssfaketls_fakedomain.description")}}
193
+ {{_("config.shadowtls_enable.label")}}
194
+ {{_("config.shadowtls_enable.description")}}
195
+ {{_("config.shadowtls_fakedomain.label")}}
196
+ {{_("config.shadowtls_fakedomain.description")}}
197
+ {{_("config.ssr_enable.label")}}
198
+ {{_("config.ssr_enable.description")}}
199
+ {{_("config.ssr_fakedomain.label")}}
200
+ {{_("config.ssr_fakedomain.description")}}
201
+ {{_("config.vmess_enable.label")}}
202
+ {{_("config.vmess_enable.description")}}
203
+ {{_("config.domain_fronting_domain.label")}}
204
+ {{_("config.domain_fronting_domain.description")}}
205
+ {{_("config.domain_fronting_http_enable.label")}}
206
+ {{_("config.domain_fronting_http_enable.description")}}
207
+ {{_("config.domain_fronting_tls_enable.label")}}
208
+ {{_("config.domain_fronting_tls_enable.description")}}
209
+ {{_("config.ws_enable.label")}}
210
+ {{_("config.ws_enable.description")}}
211
+ {{_("config.grpc_enable.label")}}
212
+ {{_("config.grpc_enable.description")}}
213
+ {{_("config.httpupgrade_enable.label")}}
214
+ {{_("config.httpupgrade_enable.description")}}
215
+ {{_("config.vless_enable.label")}}
216
+ {{_("config.vless_enable.description")}}
217
+ {{_("config.trojan_enable.label")}}
218
+ {{_("config.trojan_enable.description")}}
219
+ {{_("config.reality_enable.label")}}
220
+ {{_("config.reality_enable.description")}}
221
+ {{_("config.tcp_enable.label")}}
222
+ {{_("config.tcp_enable.description")}}
223
+ {{_("config.quic_enable.label")}}
224
+ {{_("config.quic_enable.description")}}
225
+ {{_("config.xtls_enable.label")}}
226
+ {{_("config.xtls_enable.description")}}
227
+ {{_("config.h2_enable.label")}}
228
+ {{_("config.h2_enable.description")}}
229
+ {{_("config.db_version.label")}}
230
+ {{_("config.db_version.description")}}
231
+ {{_("config.branding_title.label")}}
232
+ {{_("config.branding_title.description")}}
233
+ {{_("config.branding_site.label")}}
234
+ {{_("config.branding_site.description")}}
235
+ {{_("config.branding_freetext.label")}}
236
+ {{_("config.branding_freetext.description")}}
237
+ {{_("config.not_found.label")}}
238
+ {{_("config.not_found.description")}}
239
+ {{_("config.path_vmess.label")}}
240
+ {{_("config.path_vmess.description")}}
241
+ {{_("config.path_vless.label")}}
242
+ {{_("config.path_vless.description")}}
243
+ {{_("config.path_trojan.label")}}
244
+ {{_("config.path_trojan.description")}}
245
+ {{_("config.path_v2ray.label")}}
246
+ {{_("config.path_v2ray.description")}}
247
+ {{_("config.path_ss.label")}}
248
+ {{_("config.path_ss.description")}}
249
+ {{_("config.path_httpupgrade.label")}}
250
+ {{_("config.path_httpupgrade.description")}}
251
+ {{_("config.path_ws.label")}}
252
+ {{_("config.path_ws.description")}}
253
+ {{_("config.path_tcp.label")}}
254
+ {{_("config.path_tcp.description")}}
255
+ {{_("config.path_grpc.label")}}
256
+ {{_("config.path_grpc.description")}}
257
+
258
+ {{_("config.admin.label")}}{{_("config.admin.description")}}
259
+ {{_("config.branding.label")}}{{_("config.branding.description")}}
260
+ {{_("config.general.label")}}{{_("config.general.description")}}
261
+ {{_("config.proxies.label")}}{{_("config.proxies.description")}}
262
+ {{_("config.domain_fronting.label")}}{{_("config.domain_fronting.description")}}
263
+ {{_("config.telegram.label")}}{{_("config.telegram.description")}}
264
+ {{_("config.http.label")}}{{_("config.http.description")}}
265
+ {{_("config.tls.label")}}{{_("config.tls.description")}}
266
+ {{_("config.mux.label")}}{{_("config.mux.description")}}
267
+ {{_("config.tls_trick.label")}}{{_("config.tls_trick.description")}}
268
+ {{_("config.ssh.label")}}{{_("config.ssh.description")}}
269
+ {{_("config.ssfaketls.label")}}{{_("config.ssfaketls.description")}}
270
+ {{_("config.shadowtls.label")}}{{_("config.shadowtls.description")}}
271
+ {{_("config.restls.label")}}{{_("config.restls.description")}}
272
+ {{_("config.tuic.label")}}{{_("config.tuic.description")}}
273
+ {{_("config.hysteria.label")}}{{_("config.hysteria.description")}}
274
+ {{_("config.ssr.label")}}{{_("config.ssr.description")}}
275
+ {{_("config.kcp.label")}}{{_("config.kcp.description")}}
276
+ {{_("config.hidden.label")}}{{_("config.hidden.description")}}
277
+ {{_("config.advanced.label")}}{{_("config.advanced.description")}}
278
+ {{_("config.too_advanced.label")}}{{_("config.too_advanced.description")}}
279
+ {{_("config.warp.label")}}{{_("config.warp.description")}}
280
+ {{_("config.reality.label")}}{{_("config.reality.description")}}
281
+ {{_("config.wireguard.label")}}{{_("config.wireguard.description")}}
282
+ {{_("config.shadowsocks.label")}}{{_("config.shadowsocks.description")}}
283
+
284
+ {{_("direct")}}
285
+ {{_("sub_link_only")}}
286
+ {{_("cdn")}}
287
+ {{_("auto_cdn_ip")}}
288
+ {{_("relay")}}
289
+ {{_("reality")}}
290
+ {{_("old_xtls_direct")}}
291
+ {{_("worker")}}
292
+ {{_("fake")}}
293
+
294
+ {{_("no_reset")}}
295
+ {{_("monthly")}}
296
+ {{_("weekly")}}
297
+ {{_("daily")}}
298
+
@@ -20,35 +20,25 @@
20
20
  {% else %}
21
21
  <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
22
22
  {% endif %}
23
- <link href="{{static_url_for(filename='images/splash/iphone5_splash.png')}}"
24
- media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
23
+ <link href="{{static_url_for(filename='images/splash/iphone5_splash.png')}}" media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
25
24
  rel="apple-touch-startup-image" />
26
- <link href="{{static_url_for(filename='images/splash/iphone6_splash.png')}}"
27
- media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
25
+ <link href="{{static_url_for(filename='images/splash/iphone6_splash.png')}}" media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
28
26
  rel="apple-touch-startup-image" />
29
- <link href="{{static_url_for(filename='images/splash/iphoneplus_splash.png')}}"
30
- media="(device-width: 621px) and (device-height: 1104px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
27
+ <link href="{{static_url_for(filename='images/splash/iphoneplus_splash.png')}}" media="(device-width: 621px) and (device-height: 1104px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
31
28
  rel="apple-touch-startup-image" />
32
- <link href="{{static_url_for(filename='images/splash/iphonex_splash.png')}}"
33
- media="(device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
29
+ <link href="{{static_url_for(filename='images/splash/iphonex_splash.png')}}" media="(device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
34
30
  rel="apple-touch-startup-image" />
35
- <link href="{{static_url_for(filename='images/splash/iphonexr_splash.png')}}"
36
- media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
31
+ <link href="{{static_url_for(filename='images/splash/iphonexr_splash.png')}}" media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
37
32
  rel="apple-touch-startup-image" />
38
- <link href="{{static_url_for(filename='images/splash/iphonexsmax_splash.png')}}"
39
- media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
33
+ <link href="{{static_url_for(filename='images/splash/iphonexsmax_splash.png')}}" media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
40
34
  rel="apple-touch-startup-image" />
41
- <link href="{{static_url_for(filename='images/splash/ipad_splash.png')}}"
42
- media="(device-width: 768px) and (device-height: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
35
+ <link href="{{static_url_for(filename='images/splash/ipad_splash.png')}}" media="(device-width: 768px) and (device-height: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
43
36
  rel="apple-touch-startup-image" />
44
- <link href="{{static_url_for(filename='images/splash/ipadpro1_splash.png')}}"
45
- media="(device-width: 834px) and (device-height: 1112px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
37
+ <link href="{{static_url_for(filename='images/splash/ipadpro1_splash.png')}}" media="(device-width: 834px) and (device-height: 1112px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
46
38
  rel="apple-touch-startup-image" />
47
- <link href="{{static_url_for(filename='images/splash/ipadpro3_splash.png')}}"
48
- media="(device-width: 834px) and (device-height: 1194px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
39
+ <link href="{{static_url_for(filename='images/splash/ipadpro3_splash.png')}}" media="(device-width: 834px) and (device-height: 1194px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
49
40
  rel="apple-touch-startup-image" />
50
- <link href="{{static_url_for(filename='images/splash/ipadpro2_splash.png')}}"
51
- media="(device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
41
+ <link href="{{static_url_for(filename='images/splash/ipadpro2_splash.png')}}" media="(device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
52
42
  rel="apple-touch-startup-image" />
53
43
  <link rel="icon" type="image/x-icon" href="{{ static_url_for( filename='images/favicon.ico')}}">
54
44
  <link rel="manifest" href="{{ hurl_for('common_bp.LoginView:create_pwa_manifest',secret_uuid=g.account.uuid or '')}}">
@@ -70,8 +60,7 @@
70
60
  <link rel="stylesheet" href="{{static_url_for(filename='plugins/datatables/extensions/Responsive/css/responsive.bootstrap4.min.css')}}"> -->
71
61
 
72
62
  <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.13.2/css/dataTables.bootstrap4.min.css">
73
- <link rel="stylesheet" type="text/css"
74
- href="https://cdn.datatables.net/responsive/2.4.0/css/responsive.bootstrap4.min.css">
63
+ <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/responsive/2.4.0/css/responsive.bootstrap4.min.css">
75
64
 
76
65
  <link rel="stylesheet" href="{{ static_url_for( filename='css/custom.css',version=5.23 ) }}">
77
66
  {% if get_locale()=='fa' %}
@@ -90,10 +79,10 @@
90
79
 
91
80
  <body class="hold-transition layout-fixed {{" dark-mode" if g.darkmode else "" }} {% block bodyclass %}sidebar-collapse{%endblock%}">
92
81
  <div id="splash_screen">
93
- <center>
94
-
82
+ <center>
83
+
95
84
  <img src="{{static_url_for( filename='images/hiddify.png' )}}" />
96
-
85
+
97
86
 
98
87
  <a href="https://github.com/hiddify/hiddify-manager/wiki">
99
88
  <h1 class="title">{{_('user.home.title')}}</h1><br>Powered by hiddify.com
@@ -152,21 +141,19 @@
152
141
  <footer class="main-footer d-flex flex-wrap justify-content-between align-items-center " dir="ltr">
153
142
  <div class="nav col-md-8 d-flex align-items-center">
154
143
 
155
- <strong><span class="mb-3 mb-md-0 text-muted">© 2023 Hiddify {{"Central" if hconfig(ConfigEnum.is_parent) else
144
+ <strong><span class="mb-3 mb-md-0 text-muted">© 2023 Hiddify {{"Central" if hutils.node.is_parent() else
156
145
  ""}} <span class="badge">{{version}}</span>
157
146
  </span>
158
147
  </strong>
159
148
  </div>
160
149
 
161
150
  <ul class="nav col-md-4 justify-content-end list-unstyled d-flex">
162
- <li class="ms-3"><a class="text-secondary" href="https://github.com/hiddify/hiddify-manager/wiki"><i
163
- class="fa-brands fa-github"></i></a></li>
151
+ <li class="ms-3"><a class="text-secondary" href="https://github.com/hiddify/hiddify-manager/wiki"><i class="fa-brands fa-github"></i></a></li>
164
152
  <li class="ms-3"><a class="text-danger" href="https://youtube.com/@hiddify/videos">
165
153
  &nbsp; <i class="fa-brands fa-square-youtube fa-margin"></i> </a></li>
166
154
  <li class="ms-3"><a class="text-primary" href="https://twitter.com/intent/follow?screen_name=hiddify_com">
167
155
  &nbsp; <i class="fa-brands fa-square-twitter fa-margin"></i> </a></li>
168
- <li class="ms-3"><a class="text-primary" href="https://t.me/hiddify">&nbsp; <i
169
- class="fa-brands fa-telegram fa-margin"></i> </a></li>
156
+ <li class="ms-3"><a class="text-primary" href="https://t.me/hiddify">&nbsp; <i class="fa-brands fa-telegram fa-margin"></i> </a></li>
170
157
  </ul>
171
158
 
172
159
  </footer>
@@ -176,8 +163,7 @@
176
163
  </div>
177
164
  <!-- ./wrapper -->
178
165
 
179
- {#modal("guide-modal","","<video id='guide-video' controls
180
- style='max-height: 100%; max-width: 100%;width: auto; height: auto;'>
166
+ {#modal("guide-modal","","<video id='guide-video' controls style='max-height: 100%; max-width: 100%;width: auto; height: auto;'>
181
167
  <source id='guide-video-mp4' type='video/mp4'>
182
168
  </video>")#}
183
169
 
@@ -196,10 +182,8 @@
196
182
  <div class="btn-group">
197
183
  <a id='qrcode-link' class="btn btn-primary copy-link" href=""><i class="fa-regular fa-copy"></i>
198
184
  {{_("copy")}} </a>
199
- <a id="share-link-redirect" class="btn btn-success copy-link" href=""><i
200
- class="fa-solid fa-share-from-square"></i> {{_('clickable copy')}}</a>
201
- <a target="_blank" id="share-link-open" class="btn btn-secondary" href=""><i
202
- class="fa-solid fa-arrow-up-right-from-square"></i> {{_('open')}}</a>
185
+ <a id="share-link-redirect" class="btn btn-success copy-link" href=""><i class="fa-solid fa-share-from-square"></i> {{_('clickable copy')}}</a>
186
+ <a target="_blank" id="share-link-open" class="btn btn-secondary" href=""><i class="fa-solid fa-arrow-up-right-from-square"></i> {{_('open')}}</a>
203
187
  </div>
204
188
  <br />
205
189
  <div id="qrcode" style="margin:10px;padding:10px;"></div>
@@ -225,7 +209,7 @@
225
209
  wrappers[i].style.display = 'initial';
226
210
  }
227
211
 
228
- }, document.URL.indexOf("pwa") > 0 ? 0 : 1000);
212
+ }, document.URL.indexOf("pwa") > 0 ? 0 : 500);
229
213
 
230
214
  </script>
231
215
  <!-- jQuery -->
@@ -250,10 +234,8 @@
250
234
 
251
235
  <script src="{{ static_url_for( filename='plugins/datatables/jquery.dataTables.min.js' ) }}"></script>
252
236
  <script src="{{ static_url_for( filename='plugins/datatables/dataTables.bootstrap4.js' ) }}"></script>
253
- <script
254
- src="{{ static_url_for( filename='plugins/datatables/extensions/Responsive/js/dataTables.responsive.min.js' ) }}"></script>
255
- <script
256
- src="{{ static_url_for( filename='plugins/datatables/extensions/Responsive/js/responsive.bootstrap4.min.js' ) }}"></script>
237
+ <script src="{{ static_url_for( filename='plugins/datatables/extensions/Responsive/js/dataTables.responsive.min.js' ) }}"></script>
238
+ <script src="{{ static_url_for( filename='plugins/datatables/extensions/Responsive/js/responsive.bootstrap4.min.js' ) }}"></script>
257
239
 
258
240
  <!-- <script type="text/javascript" language="javascript" src="https://cdn.datatables.net/1.13.2/js/jquery.dataTables.min.js"></script>
259
241
  <script type="text/javascript" language="javascript" src="https://cdn.datatables.net/1.13.2/js/dataTables.bootstrap4.min.js"></script>