hiddifypanel 9.0.0.dev90__py3-none-any.whl → 10.5.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.
- hiddifypanel/VERSION +1 -1
- hiddifypanel/VERSION.py +2 -2
- hiddifypanel/auth.py +30 -9
- hiddifypanel/base.py +60 -52
- hiddifypanel/cache.py +43 -25
- hiddifypanel/database.py +9 -0
- hiddifypanel/drivers/abstract_driver.py +2 -0
- hiddifypanel/drivers/singbox_api.py +17 -15
- hiddifypanel/drivers/ssh_liberty_bridge_api.py +3 -1
- hiddifypanel/drivers/user_driver.py +12 -6
- hiddifypanel/drivers/wireguard_api.py +7 -2
- hiddifypanel/drivers/xray_api.py +14 -9
- hiddifypanel/hutils/__init__.py +4 -0
- hiddifypanel/hutils/convert.py +13 -2
- hiddifypanel/hutils/crypto.py +48 -0
- hiddifypanel/hutils/encode.py +4 -1
- hiddifypanel/hutils/flask.py +38 -5
- hiddifypanel/hutils/github_issue.py +1 -1
- hiddifypanel/hutils/importer/xui.py +5 -2
- hiddifypanel/{models/utils.py → hutils/model.py} +14 -4
- hiddifypanel/hutils/network/auto_ip_selector.py +2 -0
- hiddifypanel/hutils/network/net.py +46 -2
- hiddifypanel/hutils/node/__init__.py +3 -0
- hiddifypanel/hutils/node/api_client.py +76 -0
- hiddifypanel/hutils/node/child.py +147 -0
- hiddifypanel/hutils/node/parent.py +100 -0
- hiddifypanel/hutils/node/shared.py +65 -0
- hiddifypanel/hutils/proxy/__init__.py +5 -0
- hiddifypanel/hutils/proxy/clash.py +161 -0
- hiddifypanel/hutils/proxy/shared.py +434 -0
- hiddifypanel/hutils/proxy/singbox.py +339 -0
- hiddifypanel/hutils/proxy/xray.py +235 -0
- hiddifypanel/hutils/proxy/xrayjson.py +391 -0
- hiddifypanel/hutils/random.py +4 -0
- hiddifypanel/hutils/utils.py +4 -1
- hiddifypanel/models/__init__.py +2 -2
- hiddifypanel/models/admin.py +31 -17
- hiddifypanel/models/base_account.py +7 -7
- hiddifypanel/models/child.py +30 -16
- hiddifypanel/models/config.py +45 -16
- hiddifypanel/models/config_enum.py +68 -17
- hiddifypanel/models/domain.py +28 -20
- hiddifypanel/models/parent_domain.py +2 -2
- hiddifypanel/models/proxy.py +29 -20
- hiddifypanel/models/report.py +2 -3
- hiddifypanel/models/usage.py +2 -2
- hiddifypanel/models/user.py +33 -22
- hiddifypanel/panel/admin/Actions.py +13 -19
- hiddifypanel/panel/admin/AdminstratorAdmin.py +14 -3
- hiddifypanel/panel/admin/Dashboard.py +5 -10
- hiddifypanel/panel/admin/DomainAdmin.py +35 -48
- hiddifypanel/panel/admin/NodeAdmin.py +6 -2
- hiddifypanel/panel/admin/ProxyAdmin.py +6 -5
- hiddifypanel/panel/admin/QuickSetup.py +21 -20
- hiddifypanel/panel/admin/SettingAdmin.py +107 -62
- hiddifypanel/panel/admin/UserAdmin.py +22 -21
- hiddifypanel/panel/admin/templates/index.html +1 -1
- hiddifypanel/panel/admin/templates/model/user_list.html +44 -20
- hiddifypanel/panel/admin/templates/parent_dash.html +2 -4
- hiddifypanel/panel/admin/templates/result.html +2 -3
- hiddifypanel/panel/cf_api.py +1 -2
- hiddifypanel/panel/cli.py +16 -16
- hiddifypanel/panel/commercial/ProxyDetailsAdmin.py +16 -12
- hiddifypanel/panel/commercial/__init__.py +7 -5
- hiddifypanel/panel/commercial/restapi/v1/__init__.py +1 -1
- hiddifypanel/panel/commercial/restapi/v1/tgbot.py +1 -1
- hiddifypanel/panel/commercial/restapi/v1/tgmsg.py +14 -10
- hiddifypanel/panel/commercial/restapi/v2/admin/__init__.py +0 -5
- hiddifypanel/panel/commercial/restapi/v2/admin/admin_info_api.py +2 -2
- hiddifypanel/panel/commercial/restapi/v2/admin/admin_log_api.py +4 -5
- hiddifypanel/panel/commercial/restapi/v2/admin/admin_user_api.py +8 -25
- hiddifypanel/panel/commercial/restapi/v2/admin/admin_users_api.py +4 -4
- hiddifypanel/panel/commercial/restapi/v2/admin/schema.py +157 -0
- hiddifypanel/panel/commercial/restapi/v2/admin/server_status_api.py +3 -3
- hiddifypanel/panel/commercial/restapi/v2/admin/user_api.py +9 -66
- hiddifypanel/panel/commercial/restapi/v2/admin/users_api.py +1 -1
- hiddifypanel/panel/commercial/restapi/v2/child/__init__.py +18 -0
- hiddifypanel/panel/commercial/restapi/v2/child/actions.py +63 -0
- hiddifypanel/panel/commercial/restapi/v2/child/register_parent_api.py +34 -0
- hiddifypanel/panel/commercial/restapi/v2/child/schema.py +7 -0
- hiddifypanel/panel/commercial/restapi/v2/child/sync_parent_api.py +21 -0
- hiddifypanel/panel/commercial/restapi/v2/panel/__init__.py +13 -0
- hiddifypanel/panel/commercial/restapi/v2/panel/info.py +18 -0
- hiddifypanel/panel/commercial/restapi/v2/panel/ping_pong.py +23 -0
- hiddifypanel/panel/commercial/restapi/v2/panel/schema.py +7 -0
- hiddifypanel/panel/commercial/restapi/v2/parent/__init__.py +16 -0
- hiddifypanel/panel/commercial/restapi/v2/parent/register_api.py +65 -0
- hiddifypanel/panel/commercial/restapi/v2/parent/schema.py +115 -0
- hiddifypanel/panel/commercial/restapi/v2/parent/status_api.py +26 -0
- hiddifypanel/panel/commercial/restapi/v2/parent/sync_api.py +53 -0
- hiddifypanel/panel/commercial/restapi/v2/parent/usage_api.py +57 -0
- hiddifypanel/panel/commercial/restapi/v2/user/apps_api.py +17 -23
- hiddifypanel/panel/commercial/restapi/v2/user/configs_api.py +23 -26
- hiddifypanel/panel/commercial/telegrambot/admin.py +1 -2
- hiddifypanel/panel/common.py +25 -8
- hiddifypanel/panel/common_bp/login.py +2 -2
- hiddifypanel/panel/hiddify.py +22 -185
- hiddifypanel/panel/init_db.py +102 -55
- hiddifypanel/panel/usage.py +33 -18
- hiddifypanel/panel/user/__init__.py +0 -1
- hiddifypanel/panel/user/templates/all_configs copy.txt +2 -2
- hiddifypanel/panel/user/templates/all_configs.txt +2 -2
- hiddifypanel/panel/user/templates/base_singbox_config.json.j2 +2 -1
- hiddifypanel/panel/user/templates/base_xray_config.json.j2 +125 -0
- hiddifypanel/panel/user/templates/clash_config copy.yml +1 -1
- hiddifypanel/panel/user/templates/clash_config.yml +4 -4
- hiddifypanel/panel/user/templates/clash_proxies.yml +1 -1
- hiddifypanel/panel/user/templates/home/all-configs.html +2 -2
- hiddifypanel/panel/user/templates/home/all-configs_old.html +1 -1
- hiddifypanel/panel/user/templates/home/ios copy.html +2 -2
- hiddifypanel/panel/user/templates/home/usage.html +1 -1
- hiddifypanel/panel/user/templates/new.html +2 -2
- hiddifypanel/panel/user/user.py +56 -50
- hiddifypanel/static/css/custom.css +31 -0
- hiddifypanel/static/images/favicon.ico +0 -0
- hiddifypanel/static/images/hiddify-old.png +0 -0
- hiddifypanel/static/images/hiddify.png +0 -0
- hiddifypanel/static/images/hiddify2.png +0 -0
- hiddifypanel/static/new/assets/{index-1b891a7c.js → index-ccb9873c.js} +56 -56
- hiddifypanel/static/new/assets/index-fa00de9a.css +1 -0
- hiddifypanel/static/new/i18n/en.json +6 -6
- hiddifypanel/static/new/i18n/fa.json +2 -2
- hiddifypanel/templates/admin-layout.html +30 -43
- hiddifypanel/templates/fake.html +0 -4
- hiddifypanel/templates/flaskadmin-layout.html +7 -3
- hiddifypanel/templates/master.html +11 -6
- hiddifypanel/translations/en/LC_MESSAGES/messages.mo +0 -0
- hiddifypanel/translations/en/LC_MESSAGES/messages.po +2082 -1977
- hiddifypanel/translations/fa/LC_MESSAGES/messages.mo +0 -0
- hiddifypanel/translations/fa/LC_MESSAGES/messages.po +2035 -1924
- hiddifypanel/translations/pt/LC_MESSAGES/messages.mo +0 -0
- hiddifypanel/translations/pt/LC_MESSAGES/messages.po +1911 -1840
- hiddifypanel/translations/ru/LC_MESSAGES/messages.mo +0 -0
- hiddifypanel/translations/ru/LC_MESSAGES/messages.po +2036 -1881
- hiddifypanel/translations/zh/LC_MESSAGES/messages.mo +0 -0
- hiddifypanel/translations/zh/LC_MESSAGES/messages.po +1857 -1720
- hiddifypanel/translations.i18n/en.json +992 -933
- hiddifypanel/translations.i18n/fa.json +994 -935
- hiddifypanel/translations.i18n/pt.json +994 -935
- hiddifypanel/translations.i18n/ru.json +994 -935
- hiddifypanel/translations.i18n/zh.json +971 -912
- {hiddifypanel-9.0.0.dev90.dist-info → hiddifypanel-10.5.0.dev0.dist-info}/METADATA +47 -47
- {hiddifypanel-9.0.0.dev90.dist-info → hiddifypanel-10.5.0.dev0.dist-info}/RECORD +147 -120
- {hiddifypanel-9.0.0.dev90.dist-info → hiddifypanel-10.5.0.dev0.dist-info}/WHEEL +1 -1
- hiddifypanel/panel/commercial/restapi/v2/DTO.py +0 -9
- hiddifypanel/panel/commercial/restapi/v2/hello/__init__.py +0 -16
- hiddifypanel/panel/commercial/restapi/v2/hello/hello.py +0 -32
- hiddifypanel/panel/user/link_maker.py +0 -1083
- hiddifypanel/static/new/assets/index-669b32c8.css +0 -1
- {hiddifypanel-9.0.0.dev90.dist-info → hiddifypanel-10.5.0.dev0.dist-info}/LICENSE.md +0 -0
- {hiddifypanel-9.0.0.dev90.dist-info → hiddifypanel-10.5.0.dev0.dist-info}/entry_points.txt +0 -0
- {hiddifypanel-9.0.0.dev90.dist-info → hiddifypanel-10.5.0.dev0.dist-info}/top_level.txt +0 -0
@@ -13,8 +13,8 @@
|
|
13
13
|
<link rel="manifest" href="{{ url_for('common_bp.LoginView:create_pwa_manifest',secret_uuid=g.account.uuid or '')}}">
|
14
14
|
|
15
15
|
<title>Hiddify | Panel</title>
|
16
|
-
<script type="module" crossorigin src="../static/new/assets/index-
|
17
|
-
<link rel="stylesheet" href="../static/new/assets/index-
|
16
|
+
<script type="module" crossorigin src="../static/new/assets/index-ccb9873c.js"></script>
|
17
|
+
<link rel="stylesheet" href="../static/new/assets/index-fa00de9a.css">
|
18
18
|
</head>
|
19
19
|
<body>
|
20
20
|
<div id="root"></div>
|
hiddifypanel/panel/user/user.py
CHANGED
@@ -5,7 +5,6 @@ import re
|
|
5
5
|
|
6
6
|
from flask import render_template, request, Response, g
|
7
7
|
from apiflask import abort
|
8
|
-
from . import link_maker
|
9
8
|
from flask_classful import FlaskView, route
|
10
9
|
from urllib.parse import urlparse
|
11
10
|
from flask_babel import gettext as _
|
@@ -16,7 +15,6 @@ from hiddifypanel.database import db
|
|
16
15
|
from hiddifypanel.panel import hiddify
|
17
16
|
from hiddifypanel.models import *
|
18
17
|
from hiddifypanel import hutils
|
19
|
-
from hiddifypanel import cache
|
20
18
|
|
21
19
|
|
22
20
|
class UserView(FlaskView):
|
@@ -56,6 +54,14 @@ class UserView(FlaskView):
|
|
56
54
|
def sub64(self):
|
57
55
|
return self.all_configs(base64=True)
|
58
56
|
|
57
|
+
@route("/xray/")
|
58
|
+
@route("/xray")
|
59
|
+
@login_required(roles={Role.user})
|
60
|
+
def xray(self):
|
61
|
+
c = c = get_common_data(g.account.uuid, mode="new")
|
62
|
+
configs = hutils.proxy.xrayjson.configs_as_json(c['domains'], c['profile_title'])
|
63
|
+
return add_headers(configs, c, 'application/json')
|
64
|
+
|
59
65
|
@route("/singbox/")
|
60
66
|
@route("/singbox")
|
61
67
|
@login_required(roles={Role.user})
|
@@ -127,43 +133,43 @@ class UserView(FlaskView):
|
|
127
133
|
|
128
134
|
return resp
|
129
135
|
|
130
|
-
@ route('/report', methods=["POST"])
|
131
|
-
@login_required(roles={Role.user})
|
132
|
-
def report(self):
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
136
|
+
# @ route('/report', methods=["POST"])
|
137
|
+
# @login_required(roles={Role.user})
|
138
|
+
# def report(self):
|
139
|
+
|
140
|
+
# # THE REPORT MODEL IS NOT COMPLETED YET.
|
141
|
+
|
142
|
+
# data = request.get_json()
|
143
|
+
# user_ip = hutils.network.auto_ip_selector.get_real_user_ip()
|
144
|
+
# report = Report()
|
145
|
+
# report.asn_id = hutils.network.auto_ip_selector.get_asn_id(user_ip)
|
146
|
+
# report.country = hutils.network.auto_ip_selector.get_country(user_ip)
|
147
|
+
|
148
|
+
# city_info = hutils.network.auto_ip_selector.get_city(user_ip)
|
149
|
+
# report.city = city_info['name']
|
150
|
+
# report.latitude = city_info['latitude']
|
151
|
+
# report.longitude = city_info['longitude']
|
152
|
+
# report.accuracy_radius = city_info['accuracy_radius']
|
153
|
+
|
154
|
+
# report.date = datetime.datetime.now()
|
155
|
+
# sub_update_time = data['sub_update_time']
|
156
|
+
# sub_url = data['sub_url']
|
157
|
+
|
158
|
+
# db.session.add(report)
|
159
|
+
# db.session.commit()
|
160
|
+
# proxy_map = {p.name: p.id for p in Proxy.query.all()}
|
161
|
+
|
162
|
+
# for name, ping in data['pings']:
|
163
|
+
# detail = ReportDetail()
|
164
|
+
# detail.report_id = report.id
|
165
|
+
# detail.proxy_id = proxy_map.get(name, -1)
|
166
|
+
# del proxy_map[name]
|
167
|
+
# if detail.proxy_id < 0:
|
168
|
+
# print("Error. Proxy not found!")
|
169
|
+
# continue
|
170
|
+
# detail.ping = ping
|
171
|
+
# db.session.add(detail)
|
172
|
+
# db.session.commit()
|
167
173
|
|
168
174
|
@ route('/clash/<typ>.yml', methods=["GET", "HEAD"])
|
169
175
|
@ route('/clash/<meta_or_normal>/<typ>.yml', methods=["GET", "HEAD"])
|
@@ -191,7 +197,7 @@ class UserView(FlaskView):
|
|
191
197
|
if request.method == 'HEAD':
|
192
198
|
resp = ""
|
193
199
|
else:
|
194
|
-
resp =
|
200
|
+
resp = hutils.proxy.singbox.configs_as_json(**c)
|
195
201
|
|
196
202
|
return add_headers(resp, c, 'application/json')
|
197
203
|
|
@@ -206,7 +212,7 @@ class UserView(FlaskView):
|
|
206
212
|
if request.method == 'HEAD':
|
207
213
|
resp = ""
|
208
214
|
else:
|
209
|
-
resp = render_template('singbox_config.json', **c, host_keys=
|
215
|
+
resp = render_template('singbox_config.json', **c, host_keys=hutils.proxy.get_ssh_hostkeys(True),
|
210
216
|
ssh_client_version=hiddify.get_ssh_client_version(user), ssh_ip=hutils.network.get_direct_host_or_ip(4), base64=False)
|
211
217
|
|
212
218
|
return add_headers(resp, c)
|
@@ -222,7 +228,7 @@ class UserView(FlaskView):
|
|
222
228
|
resp = ""
|
223
229
|
else:
|
224
230
|
# render_template('all_configs.txt', **c, base64=hutils.encode.do_base_64)
|
225
|
-
resp =
|
231
|
+
resp = hutils.proxy.xray.make_v2ray_configs(**c)
|
226
232
|
|
227
233
|
if base64:
|
228
234
|
resp = hutils.encode.do_base_64(resp)
|
@@ -249,7 +255,7 @@ class UserView(FlaskView):
|
|
249
255
|
# @cache.cache(ttl=300)
|
250
256
|
def get_domain_information(no_domain=False, filter_domain=None, alternative=None):
|
251
257
|
domains = []
|
252
|
-
default_asn = request.args.get("asn")
|
258
|
+
default_asn = request.args.get("asn", '')
|
253
259
|
if filter_domain:
|
254
260
|
domain = filter_domain
|
255
261
|
db_domain = Domain.query.filter(Domain.domain == domain).first() or Domain(
|
@@ -260,7 +266,7 @@ def get_domain_information(no_domain=False, filter_domain=None, alternative=None
|
|
260
266
|
db_domain = Domain.query.filter(Domain.domain == domain).first()
|
261
267
|
|
262
268
|
if not db_domain:
|
263
|
-
parts = domain.split('.')
|
269
|
+
parts = domain.split('.') # TODO fix bug domain maybe null
|
264
270
|
parts[0] = "*"
|
265
271
|
domain_new = ".".join(parts)
|
266
272
|
db_domain = Domain.query.filter(Domain.domain == domain_new).first()
|
@@ -284,19 +290,19 @@ def get_domain_information(no_domain=False, filter_domain=None, alternative=None
|
|
284
290
|
# print("autocdn ip mode ", d.cdn_ip)
|
285
291
|
if "*" in d.domain:
|
286
292
|
d.domain = d.domain.replace("*", hutils.random.get_random_string(5, 15))
|
293
|
+
|
287
294
|
if len(domains) == 0:
|
288
295
|
domains = [Domain(id=0, domain=alternative, mode=DomainType.direct, cdn_ip='', show_domains=[], child_id=0)]
|
289
296
|
domains[0].has_auto_ip = True
|
290
297
|
|
291
|
-
return domains, has_auto_cdn
|
298
|
+
return domains, db_domain, has_auto_cdn
|
292
299
|
|
293
300
|
|
294
301
|
def get_common_data(user_uuid, mode, no_domain=False, filter_domain=None):
|
295
302
|
'''Usable for user account'''
|
296
303
|
# uuid_secret=str(uuid.UUID(user_secret))
|
297
|
-
domains, has_auto_cdn = get_domain_information(no_domain, filter_domain,
|
298
|
-
|
299
|
-
db_domain = domains_valid[0]
|
304
|
+
domains, db_domain, has_auto_cdn = get_domain_information(no_domain, filter_domain, request.host)
|
305
|
+
|
300
306
|
domain = db_domain.domain
|
301
307
|
user: User = g.account if g.account.uuid == user_uuid else User.by_uuid(f'{user_uuid}')
|
302
308
|
if user is None:
|
@@ -340,11 +346,11 @@ def get_common_data(user_uuid, mode, no_domain=False, filter_domain=None):
|
|
340
346
|
'hconfigs': get_hconfigs(),
|
341
347
|
'hdomains': get_hdomains(),
|
342
348
|
'ConfigEnum': ConfigEnum,
|
343
|
-
'link_maker':
|
349
|
+
'link_maker': hutils.proxy,
|
344
350
|
'domains': domains,
|
345
351
|
"bot": g.get('bot', None),
|
346
352
|
"db_domain": db_domain,
|
347
|
-
"telegram_enable": hiddify.is_telegram_proxy_enable(),
|
353
|
+
"telegram_enable": hiddify.is_telegram_proxy_enable(domains),
|
348
354
|
"ip": user_ip,
|
349
355
|
"ip_debug": hutils.network.auto_ip_selector.get_real_user_ip_debug(user_ip),
|
350
356
|
"asn": asn,
|
@@ -537,4 +537,35 @@ div#qrcode img {
|
|
537
537
|
|
538
538
|
.global-form .custom-switch {
|
539
539
|
width: 100%;
|
540
|
+
}
|
541
|
+
|
542
|
+
td.col-is_active {
|
543
|
+
text-align: center !important;
|
544
|
+
padding: 0px;
|
545
|
+
}
|
546
|
+
|
547
|
+
td.col-uuid a {
|
548
|
+
|
549
|
+
text-overflow: ellipsis;
|
550
|
+
white-space: nowrap;
|
551
|
+
width: 80px;
|
552
|
+
overflow: hidden;
|
553
|
+
display: inline-block;
|
554
|
+
}
|
555
|
+
|
556
|
+
.select2-container {
|
557
|
+
display: none;
|
558
|
+
}
|
559
|
+
|
560
|
+
|
561
|
+
#main-sidebar .nav-sidebar>.nav-item>.nav-link {
|
562
|
+
color: white;
|
563
|
+
}
|
564
|
+
|
565
|
+
#main-sidebar .nav-sidebar>.nav-item>.nav-link:hover {
|
566
|
+
background: #007bff;
|
567
|
+
}
|
568
|
+
|
569
|
+
.dark-mode #main-sidebar .nav-sidebar>.nav-item>.nav-link:hover {
|
570
|
+
background: #3f6791;
|
540
571
|
}
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|