hiddifypanel 10.16.0.dev0__py3-none-any.whl → 10.16.0.dev3__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 (35) hide show
  1. hiddifypanel/VERSION +1 -1
  2. hiddifypanel/VERSION.py +2 -2
  3. hiddifypanel/cache.py +2 -2
  4. hiddifypanel/database.py +13 -6
  5. hiddifypanel/hutils/importer/xui.py +2 -3
  6. hiddifypanel/hutils/proxy/xrayjson.py +2 -3
  7. hiddifypanel/models/admin.py +3 -2
  8. hiddifypanel/models/base_account.py +2 -1
  9. hiddifypanel/models/child.py +4 -3
  10. hiddifypanel/models/config.py +3 -2
  11. hiddifypanel/models/config_enum.py +1 -1
  12. hiddifypanel/models/domain.py +2 -1
  13. hiddifypanel/models/proxy.py +2 -1
  14. hiddifypanel/models/report.py +3 -2
  15. hiddifypanel/models/usage.py +2 -1
  16. hiddifypanel/models/user.py +3 -2
  17. hiddifypanel/panel/admin/SettingAdmin.py +9 -5
  18. hiddifypanel/panel/commercial/restapi/v2/user/configs_api.py +14 -7
  19. hiddifypanel/panel/init_db.py +14 -7
  20. hiddifypanel/panel/user/user.py +0 -1
  21. hiddifypanel/translations/en/LC_MESSAGES/messages.mo +0 -0
  22. hiddifypanel/translations/en/LC_MESSAGES/messages.po +29 -21
  23. hiddifypanel/translations/fa/LC_MESSAGES/messages.mo +0 -0
  24. hiddifypanel/translations/fa/LC_MESSAGES/messages.po +31 -26
  25. hiddifypanel/translations/pt/LC_MESSAGES/messages.mo +0 -0
  26. hiddifypanel/translations/ru/LC_MESSAGES/messages.mo +0 -0
  27. hiddifypanel/translations/zh/LC_MESSAGES/messages.mo +0 -0
  28. hiddifypanel/translations.i18n/en.json +18 -18
  29. hiddifypanel/translations.i18n/fa.json +18 -18
  30. {hiddifypanel-10.16.0.dev0.dist-info → hiddifypanel-10.16.0.dev3.dist-info}/METADATA +2 -2
  31. {hiddifypanel-10.16.0.dev0.dist-info → hiddifypanel-10.16.0.dev3.dist-info}/RECORD +35 -35
  32. {hiddifypanel-10.16.0.dev0.dist-info → hiddifypanel-10.16.0.dev3.dist-info}/LICENSE.md +0 -0
  33. {hiddifypanel-10.16.0.dev0.dist-info → hiddifypanel-10.16.0.dev3.dist-info}/WHEEL +0 -0
  34. {hiddifypanel-10.16.0.dev0.dist-info → hiddifypanel-10.16.0.dev3.dist-info}/entry_points.txt +0 -0
  35. {hiddifypanel-10.16.0.dev0.dist-info → hiddifypanel-10.16.0.dev3.dist-info}/top_level.txt +0 -0
hiddifypanel/VERSION CHANGED
@@ -1 +1 @@
1
- 10.16.0.dev0
1
+ 10.16.0.dev3
hiddifypanel/VERSION.py CHANGED
@@ -1,3 +1,3 @@
1
- __version__='10.16.0.dev0'
1
+ __version__='10.16.0.dev3'
2
2
  from datetime import datetime
3
- __release_date__= datetime.strptime('2024-04-07','%Y-%m-%d')
3
+ __release_date__= datetime.strptime('2024-04-11','%Y-%m-%d')
hiddifypanel/cache.py CHANGED
@@ -11,11 +11,11 @@ class CustomRedisCache(RedisCache):
11
11
 
12
12
  def invalidate_all_cached_functions(self):
13
13
  try:
14
- logger.info("Invalidating all cached functions")
14
+ logger.trace("Invalidating all cached functions")
15
15
  chunks_gen = chunks(f'{self.prefix}*', 500)
16
16
  for keys in chunks_gen:
17
17
  self.client.delete(*keys)
18
- logger.success("Successfully invalidated all cached functions")
18
+ logger.trace("Successfully invalidated all cached functions")
19
19
  return True
20
20
  except Exception as err:
21
21
  with logger.contextualize(error=err):
hiddifypanel/database.py CHANGED
@@ -1,8 +1,9 @@
1
+ from typing import Optional
1
2
  from flask_sqlalchemy import SQLAlchemy
2
3
  from sqlalchemy_utils import UUIDType
3
4
  import re
4
5
  import os
5
- from sqlalchemy import text
6
+ from sqlalchemy import Row, text, Sequence
6
7
 
7
8
 
8
9
  db: SQLAlchemy = SQLAlchemy()
@@ -14,8 +15,14 @@ def init_app(app):
14
15
  db.init_app(app)
15
16
 
16
17
 
17
- def db_execute(query: str, **params: dict):
18
- with db.engine.connect() as connection:
19
- res = connection.execute(text(query), params)
20
- connection.commit()
21
- return res
18
+ def db_execute(query: str, return_val: bool = False, commit: bool = False, **params: dict):
19
+ q = db.session.execute(text(query), params)
20
+ if commit:
21
+ db.session.commit()
22
+ if return_val:
23
+ return q.fetchall()
24
+
25
+ # with db.engine.connect() as connection:
26
+ # res = connection.execute(text(query), params)
27
+ # connection.commit()s
28
+ # return res
@@ -11,13 +11,12 @@ import os
11
11
  from sqlalchemy import text
12
12
 
13
13
 
14
- def __query_fetch_json(db, query: str, args: Tuple = ()) -> List[Dict[str, Any]]:
14
+ def __query_fetch_json(db, query: str, **kwargs) -> List[Dict[str, Any]]:
15
15
  try:
16
16
 
17
- db_execute(query, args)
17
+ db_execute(query, commit=True, return_val=False, **kwargs)
18
18
  r = [dict((db.description[i][0], value)
19
19
  for i, value in enumerate(row)) for row in db.fetchall()]
20
- connection.close()
21
20
  return r
22
21
  except Exception as err:
23
22
  raise err
@@ -1,9 +1,8 @@
1
- import datetime
2
1
  import json
3
2
  import copy
4
- from flask import render_template, request, g
3
+ from flask import render_template, g
5
4
  from hiddifypanel import hutils
6
- from hiddifypanel.models import Proxy, ProxyTransport, ProxyL3, ProxyCDN, ProxyProto, Domain, ConfigEnum, DomainType
5
+ from hiddifypanel.models import ProxyTransport, ProxyL3, ProxyProto, Domain
7
6
  from flask_babel import gettext as _
8
7
  from .xray import is_muxable_agent
9
8
  OUTBOUND_LEVEL = 8
@@ -10,6 +10,7 @@ from flask_babel import lazy_gettext as _
10
10
  from hiddifypanel.database import db, db_execute
11
11
  from hiddifypanel.models.role import Role
12
12
  from hiddifypanel.models.base_account import BaseAccount
13
+ from sqlalchemy_serializer import SerializerMixin
13
14
 
14
15
 
15
16
  class AdminMode(StrEnum):
@@ -24,7 +25,7 @@ class AdminMode(StrEnum):
24
25
  agent = auto()
25
26
 
26
27
 
27
- class AdminUser(BaseAccount):
28
+ class AdminUser(BaseAccount, SerializerMixin):
28
29
  """
29
30
  This is a model class for a user in a database that includes columns for their ID, UUID, name, online status,
30
31
  account expiration date, usage limit, package days, mode, start date, current usage, last reset time, and comment.
@@ -156,7 +157,7 @@ class AdminUser(BaseAccount):
156
157
  db.session.add(AdminUser(id=1, uuid=str(uuid.uuid4()), name="Owner", mode=AdminMode.super_admin, comment=""))
157
158
  db.session.commit()
158
159
 
159
- db_execute("update admin_user set id=1 where name='Owner'")
160
+ db_execute("update admin_user set id=1 where name='Owner'", commit=True)
160
161
  admin = AdminUser.by_id(1)
161
162
 
162
163
  return admin
@@ -6,9 +6,10 @@ from sqlalchemy import Column, String, BigInteger, Enum
6
6
  from flask_login import UserMixin as FlaskLoginUserMixin
7
7
  from hiddifypanel.models import Lang
8
8
  from hiddifypanel.database import db
9
+ from sqlalchemy_serializer import SerializerMixin
9
10
 
10
11
 
11
- class BaseAccount(db.Model, FlaskLoginUserMixin): # type: ignore
12
+ class BaseAccount(db.Model, SerializerMixin, FlaskLoginUserMixin): # type: ignore
12
13
  __abstract__ = True
13
14
  uuid = Column(String(36), default=lambda: str(uuid.uuid4()), nullable=False, unique=True, index=True)
14
15
  name = Column(String(512), nullable=False, default='')
@@ -8,6 +8,7 @@ from flask import g, has_app_context
8
8
 
9
9
 
10
10
  from hiddifypanel.database import db, db_execute
11
+ from sqlalchemy_serializer import SerializerMixin
11
12
 
12
13
 
13
14
  class ChildMode(StrEnum):
@@ -18,7 +19,7 @@ class ChildMode(StrEnum):
18
19
  # the child model is node
19
20
 
20
21
 
21
- class Child(db.Model): # type: ignore
22
+ class Child(db.Model, SerializerMixin): # type: ignore
22
23
  id = Column(Integer, primary_key=True, autoincrement=True)
23
24
  name = Column(String(200), nullable=False, unique=False)
24
25
  mode = Column(Enum(ChildMode), nullable=False, default=ChildMode.virtual)
@@ -75,9 +76,9 @@ class Child(db.Model): # type: ignore
75
76
  tmp_uuid = str(uuid.uuid4())
76
77
  db.session.add(Child(id=0, unique_id=tmp_uuid, name="Root"))
77
78
  db.session.commit()
78
- db_execute(f"update child set id=0 where unique_id='{tmp_uuid}'")
79
+ db_execute(f"update child set id=0 where unique_id='{tmp_uuid}'", commit=True)
79
80
  child = Child.by_id(0)
80
- print("child-=======", child)
81
+
81
82
  return child
82
83
 
83
84
  @classmethod
@@ -8,6 +8,7 @@ from hiddifypanel.cache import cache
8
8
  from hiddifypanel.models.child import Child, ChildMode
9
9
  from sqlalchemy import Column, String, Boolean, Enum, ForeignKey, Integer
10
10
  from strenum import StrEnum
11
+ from sqlalchemy_serializer import SerializerMixin
11
12
 
12
13
 
13
14
  def error(st):
@@ -15,7 +16,7 @@ def error(st):
15
16
  err(st)
16
17
 
17
18
 
18
- class BoolConfig(db.Model):
19
+ class BoolConfig(db.Model, SerializerMixin):
19
20
  child_id = Column(Integer, ForeignKey('child.id'), primary_key=True, default=0)
20
21
  # category = db.Column(db.String(128), primary_key=True)
21
22
  key = Column(Enum(ConfigEnum), primary_key=True)
@@ -38,7 +39,7 @@ class BoolConfig(db.Model):
38
39
  return HConfigSchema().load(conf_dict)
39
40
 
40
41
 
41
- class StrConfig(db.Model):
42
+ class StrConfig(db.Model, SerializerMixin):
42
43
  child_id = Column(Integer, ForeignKey('child.id'), primary_key=True, default=0)
43
44
  # category = db.Column(db.String(128), primary_key=True)
44
45
  key = Column(Enum(ConfigEnum), primary_key=True, default=ConfigEnum.admin_secret)
@@ -220,7 +220,7 @@ class ConfigEnum(metaclass=FastEnum):
220
220
  hysteria_down_mbps = _StrConfigDscr(ConfigCategory.hysteria, ApplyMode.apply)
221
221
 
222
222
  shadowsocks2022_enable = _BoolConfigDscr(ConfigCategory.shadowsocks, ApplyMode.apply)
223
- shadowsocks2022_method = _StrConfigDscr(ConfigCategory.shadowsocks, ApplyMode.apply)
223
+ shadowsocks2022_method = _StrConfigDscr(ConfigCategory.hidden, ApplyMode.apply)
224
224
  shadowsocks2022_port = _StrConfigDscr(ConfigCategory.shadowsocks, ApplyMode.apply)
225
225
  ssfaketls_enable = _BoolConfigDscr(ConfigCategory.shadowsocks, ApplyMode.apply)
226
226
  ssfaketls_fakedomain = _StrConfigDscr(ConfigCategory.shadowsocks, ApplyMode.apply, hide_in_virtual_child=True)
@@ -16,6 +16,7 @@ from hiddifypanel.models.config import hconfig
16
16
  from .child import Child
17
17
  from hiddifypanel.models.config_enum import ConfigEnum
18
18
  from sqlalchemy.orm import backref
19
+ from sqlalchemy_serializer import SerializerMixin
19
20
 
20
21
 
21
22
  class DomainType(StrEnum):
@@ -40,7 +41,7 @@ ShowDomain = db.Table('show_domain',
40
41
  )
41
42
 
42
43
 
43
- class Domain(db.Model):
44
+ class Domain(db.Model, SerializerMixin):
44
45
  id = db.Column(db.Integer, primary_key=True, autoincrement=True)
45
46
  child_id = db.Column(db.Integer, db.ForeignKey('child.id'), default=0)
46
47
  domain = db.Column(db.String(200), nullable=False, unique=False)
@@ -4,6 +4,7 @@ from enum import auto
4
4
  from sqlalchemy import Column, String, Integer, Boolean, Enum, ForeignKey
5
5
 
6
6
  from hiddifypanel.database import db
7
+ from sqlalchemy_serializer import SerializerMixin
7
8
 
8
9
 
9
10
  class ProxyTransport(StrEnum):
@@ -57,7 +58,7 @@ class ProxyL3(StrEnum):
57
58
  custom = auto()
58
59
 
59
60
 
60
- class Proxy(db.Model): # type: ignore
61
+ class Proxy(db.Model, SerializerMixin): # type: ignore
61
62
  id = Column(Integer, primary_key=True, autoincrement=True)
62
63
  child_id = Column(Integer, ForeignKey('child.id'), default=0)
63
64
  name = Column(String(200), nullable=False, unique=False)
@@ -2,9 +2,10 @@ import datetime
2
2
 
3
3
 
4
4
  from hiddifypanel.database import db
5
+ from sqlalchemy_serializer import SerializerMixin
5
6
 
6
7
 
7
- class Report(db.Model):
8
+ class Report(db.Model, SerializerMixin):
8
9
  id = db.Column(db.Integer, primary_key=True, autoincrement=True)
9
10
  user_id = db.Column(db.Integer, db.ForeignKey('user.id'), default=0, nullable=False)
10
11
  asn_id = db.Column(db.String(200), nullable=False, unique=False)
@@ -18,7 +19,7 @@ class Report(db.Model):
18
19
  details = db.relationship('ReportDetail', cascade="all,delete", backref='report', lazy='dynamic',)
19
20
 
20
21
 
21
- class ReportDetail(db.Model):
22
+ class ReportDetail(db.Model, SerializerMixin):
22
23
  report_id = db.Column(db.Integer, db.ForeignKey('report.id'), primary_key=True, )
23
24
  proxy_id = db.Column(db.Integer, db.ForeignKey('proxy.id'), primary_key=True, )
24
25
  ping = db.Column(db.Integer, default=-1)
@@ -6,9 +6,10 @@ from sqlalchemy import func
6
6
 
7
7
 
8
8
  from hiddifypanel.database import db
9
+ from sqlalchemy_serializer import SerializerMixin
9
10
 
10
11
 
11
- class DailyUsage(db.Model):
12
+ class DailyUsage(db.Model, SerializerMixin):
12
13
  id = db.Column(db.Integer, primary_key=True, autoincrement=True)
13
14
  date = db.Column(db.Date, default=datetime.date.today(), index=True)
14
15
  usage = db.Column(db.BigInteger, default=0, nullable=False)
@@ -10,6 +10,7 @@ from hiddifypanel.database import db
10
10
  from hiddifypanel.models import Lang
11
11
  from hiddifypanel.models.base_account import BaseAccount
12
12
  from hiddifypanel.models.admin import AdminUser
13
+ from sqlalchemy_serializer import SerializerMixin
13
14
 
14
15
  ONE_GIG = 1024 * 1024 * 1024
15
16
 
@@ -35,7 +36,7 @@ package_mode_dic = {
35
36
  }
36
37
 
37
38
 
38
- class UserDetail(db.Model):
39
+ class UserDetail(db.Model, SerializerMixin):
39
40
  id = db.Column(db.Integer, primary_key=True, autoincrement=True)
40
41
  user_id = db.Column(db.Integer, db.ForeignKey('user.id'), default=0, nullable=False)
41
42
  child_id = db.Column(db.Integer, db.ForeignKey('child.id'), default=0, nullable=False)
@@ -56,7 +57,7 @@ class UserDetail(db.Model):
56
57
  return [] if not self.connected_devices else self.connected_devices.split(",")
57
58
 
58
59
 
59
- class User(BaseAccount):
60
+ class User(BaseAccount, SerializerMixin):
60
61
  """
61
62
  This is a model class for a user in a database that includes columns for their ID, UUID, name, online status,
62
63
  account expiration date, usage limit, package days, mode, start date, current usage, last reset time, and comment.
@@ -213,11 +213,15 @@ def get_config_form():
213
213
  package_modes.append(("develop", _("Develop")))
214
214
  field = wtf.SelectField(_(f"config.{c.key}.label"), choices=package_modes, description=_(f"config.{c.key}.description"), default=hconfig(c.key))
215
215
 
216
- elif c.key == ConfigEnum.shadowsocks2022_method:
217
- field = wtf.SelectField(
218
- _(f"config.{c.key}.label"),
219
- choices=[("2022-blake3-aes-256-gcm", "2022-blake3-aes-256-gcm"), ("2022-blake3-chacha20-poly1305", "2022-blake3-chacha20-poly1305"),],
220
- description=_(f"config.{c.key}.description"), default=hconfig(c.key))
216
+ # the shadowsocks2022_method is hidden now, because it only has one option to choose
217
+ # elif c.key == ConfigEnum.shadowsocks2022_method:
218
+ # field = wtf.SelectField(
219
+ # _(f"config.{c.key}.label"),
220
+ # choices=[
221
+ # ("2022-blake3-aes-256-gcm", "2022-blake3-aes-256-gcm"),
222
+ # # ("2022-blake3-chacha20-poly1305", "2022-blake3-chacha20-poly1305"),
223
+ # ],
224
+ # description=_(f"config.{c.key}.description"), default=hconfig(c.key))
221
225
 
222
226
  elif c.key == ConfigEnum.utls:
223
227
  field = wtf.SelectField(
@@ -44,7 +44,7 @@ class AllConfigsAPI(MethodView):
44
44
  # Add Auto
45
45
  items.append(
46
46
  create_item(
47
- "Auto", "ALL", "ALL", "", "", "",
47
+ "Auto", "ALL", "", "", "", "",
48
48
  # f"{base_url}sub/?asn={c['asn']}"
49
49
  f"{base_url}auto/?asn={c['asn']}#{config_name}"
50
50
  )
@@ -53,16 +53,24 @@ class AllConfigsAPI(MethodView):
53
53
  # Add Full Singbox
54
54
  items.append(
55
55
  create_item(
56
- "Full Singbox", "ALL", "ALL", "", "", "",
56
+ "Full Singbox", "ALL", "", "", "", "",
57
57
  # f"{base_url}full-singbox.json?asn={c['asn']}"
58
58
  f"{base_url}singbox/?asn={c['asn']}#{config_name}"
59
59
  )
60
60
  )
61
61
 
62
+ # Add Full Xray
63
+ items.append(
64
+ create_item(
65
+ "Full Xray", "ALL", "", "", "", "",
66
+ f"{base_url}xray/#{config_name}"
67
+ )
68
+ )
69
+
62
70
  # Add Subscription link
63
71
  items.append(
64
72
  create_item(
65
- "Subscription link", "ALL", "ALL", "", "", "",
73
+ "Subscription link", "ALL", "", "", "", "",
66
74
  # f"{base_url}all.txt?name={c['db_domain'].alias or c['db_domain'].domain}-{c['asn']}&asn={c['asn']}&mode={c['mode']}"
67
75
  f"{base_url}sub/?asn={c['asn']}#{config_name}"
68
76
  )
@@ -71,16 +79,15 @@ class AllConfigsAPI(MethodView):
71
79
  # Add Subscription link base64
72
80
  items.append(
73
81
  create_item(
74
- "Subscription link b64", "ALL", "ALL", "", "", "",
82
+ "Subscription link b64", "ALL", "", "", "", "",
75
83
  # f"{base_url}all.txt?name=new_link_{c['db_domain'].alias or c['db_domain'].domain}-{c['asn']}-{c['mode']}&asn={c['asn']}&mode={c['mode']}&base64=True"
76
84
  f"{base_url}sub64/?asn={c['asn']}#{config_name}"
77
85
  )
78
86
  )
79
-
80
87
  # Add Clash Meta
81
88
  items.append(
82
89
  create_item(
83
- "Clash Meta", "ALL", "ALL", "", "", "",
90
+ "Clash Meta", "ALL", "", "", "", "",
84
91
  # f"clashmeta://install-config?url={base_url}clash/meta/all.yml&name=mnormal_{c['db_domain'].alias or c['db_domain'].domain}-{c['asn']}-{c['mode']}&asn={c['asn']}&mode={c['mode']}"
85
92
  f"clash://install-config?url={base_url}clashmeta/?asn={c['asn']}#{config_name}"
86
93
  )
@@ -99,7 +106,7 @@ class AllConfigsAPI(MethodView):
99
106
  if hconfig(ConfigEnum.ssh_server_enable):
100
107
  items.append(
101
108
  create_item(
102
- "Singbox: SSH", "SSH", "SSH", "", "", "",
109
+ "Singbox: SSH", "SSH", "", "", "", "",
103
110
  # f"{base_url}singbox.json?name={c['db_domain'].alias or c['db_domain'].domain}-{c['asn']}&asn={c['asn']}&mode={c['mode']}"
104
111
  f"{base_url}singbox-ssh/?asn={c['asn']}#{config_name}"
105
112
  )
@@ -7,14 +7,22 @@ import uuid
7
7
 
8
8
 
9
9
  from hiddifypanel import Events, hutils
10
+ from hiddifypanel.cache import cache
10
11
  from hiddifypanel.models import *
11
12
  from hiddifypanel.panel import hiddify
12
13
  from hiddifypanel.database import db, db_execute
13
14
  from flask import g
15
+ from sqlalchemy import text
14
16
 
15
17
  MAX_DB_VERSION = 90
16
18
 
17
19
 
20
+ def _v84(child_id):
21
+ # the 2022-blake3-chacha20-poly1305 encryption method doesn't support multiuser config
22
+ if hconfig(ConfigEnum.shadowsocks2022_method) == '2022-blake3-chacha20-poly1305':
23
+ set_hconfig(ConfigEnum.shadowsocks2022_method, '2022-blake3-aes-256-gcm')
24
+
25
+
18
26
  def _v83(child_id):
19
27
  set_hconfig(ConfigEnum.log_level, LogLevel.CRITICAL)
20
28
 
@@ -547,7 +555,7 @@ def add_column(column):
547
555
  try:
548
556
  column_type = column.type.compile(db.engine.dialect)
549
557
 
550
- db_execute(f'ALTER TABLE {column.table.name} ADD COLUMN {column.name} {column_type}')
558
+ db_execute(f'ALTER TABLE {column.table.name} ADD COLUMN {column.name} {column_type}', commit=True)
551
559
  except BaseException:
552
560
  pass
553
561
 
@@ -578,7 +586,7 @@ def add_new_enum_values():
578
586
  # result = db.engine.execute(f"SELECT DISTINCT `{column_name}` FROM {table_name}")
579
587
  # db_values = {row[0] for row in result}
580
588
 
581
- result = db_execute(f"SHOW COLUMNS FROM {table_name} LIKE '{column_name}';")
589
+ result = db.session.execute(text(f"SHOW COLUMNS FROM {table_name} LIKE '{column_name}';")).fetchall()
582
590
  db_values = []
583
591
 
584
592
  for row in result:
@@ -597,9 +605,7 @@ def add_new_enum_values():
597
605
  # Add the new value to the enum column in the database
598
606
  enumstr = ','.join([f"'{a}'" for a in [*existing_values, *old_values]])
599
607
 
600
- db_execute(f"ALTER TABLE {table_name} MODIFY COLUMN `{column_name}` ENUM({enumstr});")
601
-
602
- db.session.commit()
608
+ db_execute(f"ALTER TABLE {table_name} MODIFY COLUMN `{column_name}` ENUM({enumstr});", commit=True)
603
609
 
604
610
 
605
611
  def latest_db_version():
@@ -648,8 +654,8 @@ def upgrade_database():
648
654
 
649
655
  def init_db():
650
656
  db.create_all()
651
- hconfig.invalidate_all()
652
- get_hconfigs.invalidate_all()
657
+ cache.invalidate_all_cached_functions()
658
+
653
659
  # set_hconfig(ConfigEnum.db_version, 71)
654
660
  # temporary fix
655
661
  add_column(Child.mode)
@@ -800,3 +806,4 @@ def migrate(db_version):
800
806
  AdminUser.get_super_admin() # to create super admin if not exist
801
807
 
802
808
  upgrade_database()
809
+ db.session.commit()
@@ -6,7 +6,6 @@ import re
6
6
  from flask import render_template, request, Response, g
7
7
  from apiflask import abort
8
8
  from flask_classful import FlaskView, route
9
- from urllib.parse import urlparse
10
9
  from flask_babel import gettext as _
11
10
 
12
11
 
@@ -1394,10 +1394,10 @@ msgid "config.grpc_enable.label"
1394
1394
  msgstr "➿ Enable gRPC"
1395
1395
 
1396
1396
  msgid "config.h2_enable.description"
1397
- msgstr "config.h2_enable.description"
1397
+ msgstr "Enable HTTP/2 Protocol"
1398
1398
 
1399
1399
  msgid "config.h2_enable.label"
1400
- msgstr "config.h2_enable.label"
1400
+ msgstr "Enable h2"
1401
1401
 
1402
1402
  msgid "config.hidden.description"
1403
1403
  msgstr "config.hidden.description"
@@ -1429,9 +1429,8 @@ msgstr "☑️ Allow HTTP Connection"
1429
1429
 
1430
1430
  msgid "config.httpupgrade_enable.description"
1431
1431
  msgstr ""
1432
- "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"
1433
- "\n"
1434
- "⚠️ Not Available in Xray based Clients. Only HiddifyNext, Singbox, and V2fly clients are supported. <p><a href=\"https://hiddify.com/manager/basic-concepts-and-troubleshooting/Basic-Concepts/#http-upgrade\" target=\"_blank\"><strong>(Read More)</strong></a></p>"
1432
+ "<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"
1433
+ "⚠️ <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>"
1435
1434
 
1436
1435
  msgid "config.httpupgrade_enable.label"
1437
1436
  msgstr "🆙 Enable HTTPUpgrade Method"
@@ -1553,8 +1552,10 @@ msgstr "⬆️ MUX Brutal Upload (mbps)"
1553
1552
 
1554
1553
  msgid "config.mux_enable.description"
1555
1554
  msgstr ""
1556
- "Mux needs compatible clients. Mux in Hiddify Next and Singbox are not "
1557
- "compatible with XRay"
1555
+ "<p>Mux needs compatible clients. Mux in Hiddify Next and Singbox are not "
1556
+ "compatible with XRay.&nbsp;<a href=\"https://hiddify.com/manager/basic-"
1557
+ "concepts-and-troubleshooting/How-MUX-works-and-its-usage/\" "
1558
+ "target=\"_blank\">(Read More)</a></p>"
1558
1559
 
1559
1560
  msgid "config.mux_enable.label"
1560
1561
  msgstr "Ⓜ️ MUX Enable (⚠️ Incompatible With Some Clients)"
@@ -1729,10 +1730,10 @@ msgid "config.proxy_path_client.label"
1729
1730
  msgstr "🔏 Proxy Path for Clients"
1730
1731
 
1731
1732
  msgid "config.quic_enable.description"
1732
- msgstr "config.quic_enable.description"
1733
+ msgstr "Enable QUIC Protocol"
1733
1734
 
1734
1735
  msgid "config.quic_enable.label"
1735
- msgstr "config.quic_enable.label"
1736
+ msgstr "Enable QUIC"
1736
1737
 
1737
1738
  msgid "config.reality.description"
1738
1739
  msgstr "REALITY eliminate the Server-Side TLS Fingerprint Feature"
@@ -1741,10 +1742,10 @@ msgid "config.reality.label"
1741
1742
  msgstr "Reality"
1742
1743
 
1743
1744
  msgid "config.reality_enable.description"
1744
- msgstr "config.reality_enable.description"
1745
+ msgstr "Enable Reality Protocol"
1745
1746
 
1746
1747
  msgid "config.reality_enable.label"
1747
- msgstr "config.reality_enable.label"
1748
+ msgstr "Enable Reality"
1748
1749
 
1749
1750
  msgid "config.reality_fallback_domain.description"
1750
1751
  msgstr ""
@@ -1959,10 +1960,10 @@ msgid "config.ssr_fakedomain.label"
1959
1960
  msgstr "SSR FakeDomain"
1960
1961
 
1961
1962
  msgid "config.tcp_enable.description"
1962
- msgstr "config.tcp_enable.description"
1963
+ msgstr "Enable TCP Protocol"
1963
1964
 
1964
1965
  msgid "config.tcp_enable.label"
1965
- msgstr "config.tcp_enable.label"
1966
+ msgstr "Enable TCP"
1966
1967
 
1967
1968
  msgid "config.telegram.description"
1968
1969
  msgstr "A proxy designed for Telegram to bypass Telegram filtering"
@@ -2021,7 +2022,10 @@ msgid "config.tls.label"
2021
2022
  msgstr "TLS Configuration"
2022
2023
 
2023
2024
  msgid "config.tls_fragment_enable.description"
2024
- msgstr "Under some circumstances, it can bypass the SNI blacklist system"
2025
+ msgstr ""
2026
+ "<p>Under some circumstances, it can bypass the SNI blacklist system. <a "
2027
+ "href=\"https://hiddify.com/manager/basic-concepts-and-troubleshooting/How-"
2028
+ "the-TLS-Trick-works-and-its-usage/\" target=\"_blank\">(Read More)</a></p>"
2025
2029
 
2026
2030
  msgid "config.tls_fragment_enable.label"
2027
2031
  msgstr "⏯ Enable TLS Fragment"
@@ -2045,7 +2049,11 @@ msgid "config.tls_mixed_case.label"
2045
2049
  msgstr "🔠 Enable TLS Mixed SNI Case"
2046
2050
 
2047
2051
  msgid "config.tls_padding_enable.description"
2048
- msgstr "Enables Padding for TLS Fragmentation"
2052
+ msgstr ""
2053
+ "<p>Enables Padding for TLS Fragmentation. <a "
2054
+ "href=\"https://hiddify.com/manager/basic-concepts-and-troubleshooting/How-"
2055
+ "the-TLS-Trick-works-and-its-usage/#tls-padding\" target=\"_blank\">(Read "
2056
+ "More)</a></p>"
2049
2057
 
2050
2058
  msgid "config.tls_padding_enable.label"
2051
2059
  msgstr "♒️ Enable TLS Padding"
@@ -2085,10 +2093,10 @@ msgid "config.torrent_block.label"
2085
2093
  msgstr "Torrent Block Configuration"
2086
2094
 
2087
2095
  msgid "config.trojan_enable.description"
2088
- msgstr "config.trojan_enable.description"
2096
+ msgstr "Enable Trojan Protocol"
2089
2097
 
2090
2098
  msgid "config.trojan_enable.label"
2091
- msgstr "config.trojan_enable.label"
2099
+ msgstr "Enable Trojan"
2092
2100
 
2093
2101
  msgid "config.tuic.description"
2094
2102
  msgstr ""
@@ -2143,10 +2151,10 @@ msgid "config.validation-success-no-reset"
2143
2151
  msgstr " ✅ Configs have been changed successfully"
2144
2152
 
2145
2153
  msgid "config.vless_enable.description"
2146
- msgstr "config.vless_enable.description"
2154
+ msgstr "Enable VLess Protocol"
2147
2155
 
2148
2156
  msgid "config.vless_enable.label"
2149
- msgstr "config.vless_enable.label"
2157
+ msgstr "Enable VLess"
2150
2158
 
2151
2159
  msgid "config.vmess_enable.description"
2152
2160
  msgstr "Active VMess Protocol"
@@ -2261,10 +2269,10 @@ msgid "config.ws_enable.label"
2261
2269
  msgstr "🔰 Enable Websocket"
2262
2270
 
2263
2271
  msgid "config.xtls_enable.description"
2264
- msgstr "config.xtls_enable.description"
2272
+ msgstr "Enable XTLS Protocol"
2265
2273
 
2266
2274
  msgid "config.xtls_enable.label"
2267
- msgstr "config.xtls_enable.label"
2275
+ msgstr "Enable XTLS"
2268
2276
 
2269
2277
  msgid "config.invalid uuid"
2270
2278
  msgstr ""
@@ -1379,10 +1379,10 @@ msgid "config.grpc_enable.label"
1379
1379
  msgstr "➿ gRPC را فعال کنید"
1380
1380
 
1381
1381
  msgid "config.h2_enable.description"
1382
- msgstr ""
1382
+ msgstr "فعال کردن پروتکل HTTP/2"
1383
1383
 
1384
1384
  msgid "config.h2_enable.label"
1385
- msgstr ""
1385
+ msgstr "فعال سازی h2"
1386
1386
 
1387
1387
  msgid "config.hidden.description"
1388
1388
  msgstr "-"
@@ -1414,14 +1414,8 @@ msgstr "☑️ اجازه اتصال HTTP"
1414
1414
 
1415
1415
  msgid "config.httpupgrade_enable.description"
1416
1416
  msgstr ""
1417
- "HTTPUpgrade یک درخواست ارتقاء HTTP ۱.۱ است و پاسخ را قبل از استفاده مستقیم "
1418
- "از اتصال تکمیل می کند. این شبیه به WebSocket است که یک کانال ایجاد می کند که"
1419
- " می تواند توسط بسیاری از پروکسی های معکوس و CDN ها ارسال شود، بدون اینکه "
1420
- "نیازی به رسیدگی به تمام مسائل پیرامون خود پروتکل WebSocket باشد. ⚠️ در نرم "
1421
- "افزارهای مبتنی بر XRay موجود نیست. فقط نرم افزارهای HiddifyNext، Singbox و "
1422
- "V۲fly پشتیبانی می شوند. <p><a href=\"https://hiddify.com/fa/manager/basic-"
1423
- "concepts-and-troubleshooting/Basic-Concepts/#http-upgarde\" "
1424
- "target=\"_blank\"><strong>(بیشتر بدانید)</strong></a></p>"
1417
+ "<p style=\"direction:rtl\">HTTPUpgrade یک درخواست ارتقاء HTTP ۱.۱ است و پاسخ را قبل از استفاده مستقیم از اتصال تکمیل می کند. این شبیه به WebSocket است که یک کانال ایجاد می کند که می تواند توسط بسیاری از پروکسی های معکوس و CDN ها ارسال شود، بدون اینکه نیازی به رسیدگی به تمام مسائل پیرامون خود پروتکل WebSocket باشد.<br />\n"
1418
+ "⚠️ <strong>در نرم افزارهای مبتنی بر XRay موجود نیست. فقط نرم افزارهای HiddifyNext، Singbox و V۲fly پشتیبانی می شوند.&nbsp;</strong><a href=\"https://hiddify.com/fa/manager/basic-concepts-and-troubleshooting/Basic-Concepts/#http-upgarde\" target=\"_blank\"><strong>(بیشتر بدانید)</strong></a></p>"
1425
1419
 
1426
1420
  msgid "config.httpupgrade_enable.label"
1427
1421
  msgstr "🆙 فعالسازی HTTPUpgrade"
@@ -1544,8 +1538,11 @@ msgstr "⬆️ آپلود (mbps) MUX Brutal"
1544
1538
 
1545
1539
  msgid "config.mux_enable.description"
1546
1540
  msgstr ""
1547
- "Mux به نرم افزار سازگار نیاز دارد. Mux در Hiddify Next و Singbox و XRay "
1548
- "سازگار نیستند"
1541
+ "<p style=\"direction:rtl\">Mux به نرم افزار سازگار نیاز دارد. Mux در Hiddify"
1542
+ " Next و Singbox و XRay سازگار نیستند.&nbsp;<a "
1543
+ "href=\"https://hiddify.com/fa/manager/basic-concepts-and-"
1544
+ "troubleshooting/How-MUX-works-and-its-usage/\" target=\"_blank\">(بیشتر "
1545
+ "بدانید)</a></p>"
1549
1546
 
1550
1547
  msgid "config.mux_enable.label"
1551
1548
  msgstr "Ⓜ️ فعال کردن MUX (⚠️ ناسازگار با برخی نرم افزارها)"
@@ -1725,10 +1722,10 @@ msgid "config.proxy_path_client.label"
1725
1722
  msgstr "مسیر پروکسی برای مشتریان"
1726
1723
 
1727
1724
  msgid "config.quic_enable.description"
1728
- msgstr ""
1725
+ msgstr "فعال کردن پروتکل QUIC"
1729
1726
 
1730
1727
  msgid "config.quic_enable.label"
1731
- msgstr ""
1728
+ msgstr "Enable QUIC Protocol"
1732
1729
 
1733
1730
  msgid "config.reality.description"
1734
1731
  msgstr "REALITY قابلیت اثر انگشت TLS سمت سرور را حذف می کند"
@@ -1737,10 +1734,10 @@ msgid "config.reality.label"
1737
1734
  msgstr "ریالیتی"
1738
1735
 
1739
1736
  msgid "config.reality_enable.description"
1740
- msgstr ""
1737
+ msgstr "فعال کردن پروتکل Reality"
1741
1738
 
1742
1739
  msgid "config.reality_enable.label"
1743
- msgstr ""
1740
+ msgstr "فعال سازی Reality"
1744
1741
 
1745
1742
  msgid "config.reality_fallback_domain.description"
1746
1743
  msgstr ""
@@ -1958,10 +1955,10 @@ msgid "config.ssr_fakedomain.label"
1958
1955
  msgstr "دامنه جعلی برای SSR"
1959
1956
 
1960
1957
  msgid "config.tcp_enable.description"
1961
- msgstr ""
1958
+ msgstr "فعال کردن پروتکل TCP"
1962
1959
 
1963
1960
  msgid "config.tcp_enable.label"
1964
- msgstr ""
1961
+ msgstr "فعال سازی TCP"
1965
1962
 
1966
1963
  msgid "config.telegram.description"
1967
1964
  msgstr ""
@@ -2021,7 +2018,11 @@ msgid "config.tls.label"
2021
2018
  msgstr "تنظیمات TLS"
2022
2019
 
2023
2020
  msgid "config.tls_fragment_enable.description"
2024
- msgstr "تحت برخی شرایط، می تواند سیستم لیست سیاه SNI را دور بزند"
2021
+ msgstr ""
2022
+ "<p style=\"direction:rtl\">تحت برخی شرایط، می تواند سیستم لیست سیاه SNI را "
2023
+ "دور بزند.&nbsp;<a href=\"https://hiddify.com/fa/manager/basic-concepts-and-"
2024
+ "troubleshooting/How-the-TLS-Trick-works-and-its-usage/\" "
2025
+ "target=\"_blank\">(بیشتر بدانید)</a></p>"
2025
2026
 
2026
2027
  msgid "config.tls_fragment_enable.label"
2027
2028
  msgstr "⏯ TLS Fragment را فعال کنید"
@@ -2045,7 +2046,11 @@ msgid "config.tls_mixed_case.label"
2045
2046
  msgstr "🔠 TLS Mixed SNI Case را فعال کنید"
2046
2047
 
2047
2048
  msgid "config.tls_padding_enable.description"
2048
- msgstr "Padding تکه تکه شدن TLS را فعال می کند"
2049
+ msgstr ""
2050
+ "<p style=\"direction:rtl\">Padding تکه تکه شدن TLS را فعال می کند.&nbsp;<a "
2051
+ "href=\"https://hiddify.com/fa/manager/basic-concepts-and-"
2052
+ "troubleshooting/How-the-TLS-Trick-works-and-its-usage/#tls-padding\" "
2053
+ "target=\"_blank\">(بیشتر بدانید)</a></p>"
2049
2054
 
2050
2055
  msgid "config.tls_padding_enable.label"
2051
2056
  msgstr "♒️ TLS Padding را فعال کنید"
@@ -2084,10 +2089,10 @@ msgid "config.torrent_block.label"
2084
2089
  msgstr "تنظیمات Torrent Block"
2085
2090
 
2086
2091
  msgid "config.trojan_enable.description"
2087
- msgstr ""
2092
+ msgstr "فعال کردن پروتکل Trojan"
2088
2093
 
2089
2094
  msgid "config.trojan_enable.label"
2090
- msgstr ""
2095
+ msgstr "فعال سازی Trojan"
2091
2096
 
2092
2097
  msgid "config.tuic.description"
2093
2098
  msgstr ""
@@ -2141,10 +2146,10 @@ msgid "config.validation-success-no-reset"
2141
2146
  msgstr " ✅ تنظیمات با موفقیت تغییر کرد"
2142
2147
 
2143
2148
  msgid "config.vless_enable.description"
2144
- msgstr ""
2149
+ msgstr "فعال کردن پروتکل VLess"
2145
2150
 
2146
2151
  msgid "config.vless_enable.label"
2147
- msgstr ""
2152
+ msgstr "فعال سازی VLess"
2148
2153
 
2149
2154
  msgid "config.vmess_enable.description"
2150
2155
  msgstr "فعال کردن پروتکل VMess"
@@ -2260,10 +2265,10 @@ msgid "config.ws_enable.label"
2260
2265
  msgstr "🔰 Websocket را فعال کنید"
2261
2266
 
2262
2267
  msgid "config.xtls_enable.description"
2263
- msgstr ""
2268
+ msgstr "فعال کردن پروتکل XTLS"
2264
2269
 
2265
2270
  msgid "config.xtls_enable.label"
2266
- msgstr ""
2271
+ msgstr "فعال سازی XTLS"
2267
2272
 
2268
2273
  msgid "config.invalid uuid"
2269
2274
  msgstr ""
@@ -463,8 +463,8 @@
463
463
  "label": "➿ Enable gRPC"
464
464
  },
465
465
  "h2_enable": {
466
- "description": "config.h2_enable.description",
467
- "label": "config.h2_enable.label"
466
+ "description": "Enable HTTP/2 Protocol",
467
+ "label": "Enable h2"
468
468
  },
469
469
  "hidden": {
470
470
  "description": "config.hidden.description",
@@ -483,7 +483,7 @@
483
483
  "label": "☑️ Allow HTTP Connection"
484
484
  },
485
485
  "httpupgrade_enable": {
486
- "description": "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\n⚠️ Not Available in Xray based Clients. Only HiddifyNext, Singbox, and V2fly clients are supported. <p><a href=\"https://hiddify.com/manager/basic-concepts-and-troubleshooting/Basic-Concepts/#http-upgrade\" target=\"_blank\"><strong>(Read More)</strong></a></p>",
486
+ "description": "<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⚠️ <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>",
487
487
  "label": "🆙 Enable HTTPUpgrade Method"
488
488
  },
489
489
  "hysteria": {
@@ -560,7 +560,7 @@
560
560
  "label": "⬆️ MUX Brutal Upload (mbps)"
561
561
  },
562
562
  "mux_enable": {
563
- "description": "Mux needs compatible clients. Mux in Hiddify Next and Singbox are not compatible with XRay",
563
+ "description": "<p>Mux needs compatible clients. Mux in Hiddify Next and Singbox are not compatible with XRay.&nbsp;<a href=\"https://hiddify.com/manager/basic-concepts-and-troubleshooting/How-MUX-works-and-its-usage/\" target=\"_blank\">(Read More)</a></p>",
564
564
  "label": "Ⓜ️ MUX Enable (⚠️ Incompatible With Some Clients)"
565
565
  },
566
566
  "mux_max_connections": {
@@ -668,16 +668,16 @@
668
668
  "label": "🔏 Proxy Path for Clients"
669
669
  },
670
670
  "quic_enable": {
671
- "description": "config.quic_enable.description",
672
- "label": "config.quic_enable.label"
671
+ "description": "Enable QUIC Protocol",
672
+ "label": "Enable QUIC"
673
673
  },
674
674
  "reality": {
675
675
  "description": "REALITY eliminate the Server-Side TLS Fingerprint Feature",
676
676
  "label": "Reality"
677
677
  },
678
678
  "reality_enable": {
679
- "description": "config.reality_enable.description",
680
- "label": "config.reality_enable.label"
679
+ "description": "Enable Reality Protocol",
680
+ "label": "Enable Reality"
681
681
  },
682
682
  "reality_fallback_domain": {
683
683
  "description": "When the GFW visit the Websites in Server names, it will be redirect to this Domain.",
@@ -796,8 +796,8 @@
796
796
  "label": "SSR FakeDomain"
797
797
  },
798
798
  "tcp_enable": {
799
- "description": "config.tcp_enable.description",
800
- "label": "config.tcp_enable.label"
799
+ "description": "Enable TCP Protocol",
800
+ "label": "Enable TCP"
801
801
  },
802
802
  "telegram": {
803
803
  "description": "A proxy designed for Telegram to bypass Telegram filtering",
@@ -828,7 +828,7 @@
828
828
  "label": "TLS Configuration"
829
829
  },
830
830
  "tls_fragment_enable": {
831
- "description": "Under some circumstances, it can bypass the SNI blacklist system",
831
+ "description": "<p>Under some circumstances, it can bypass the SNI blacklist system. <a href=\"https://hiddify.com/manager/basic-concepts-and-troubleshooting/How-the-TLS-Trick-works-and-its-usage/\" target=\"_blank\">(Read More)</a></p>",
832
832
  "label": "⏯ Enable TLS Fragment"
833
833
  },
834
834
  "tls_fragment_size": {
@@ -844,7 +844,7 @@
844
844
  "label": "🔠 Enable TLS Mixed SNI Case"
845
845
  },
846
846
  "tls_padding_enable": {
847
- "description": "Enables Padding for TLS Fragmentation",
847
+ "description": "<p>Enables Padding for TLS Fragmentation. <a href=\"https://hiddify.com/manager/basic-concepts-and-troubleshooting/How-the-TLS-Trick-works-and-its-usage/#tls-padding\" target=\"_blank\">(Read More)</a></p>",
848
848
  "label": "♒️ Enable TLS Padding"
849
849
  },
850
850
  "tls_padding_length": {
@@ -868,8 +868,8 @@
868
868
  "label": "Torrent Block Configuration"
869
869
  },
870
870
  "trojan_enable": {
871
- "description": "config.trojan_enable.description",
872
- "label": "config.trojan_enable.label"
871
+ "description": "Enable Trojan Protocol",
872
+ "label": "Enable Trojan"
873
873
  },
874
874
  "tuic": {
875
875
  "description": "Delicately-TUICed High-Performance proxy is on top of the QUIC protocol. \n\nTUIC's goal is to minimize the handshake latency as much as possible",
@@ -899,8 +899,8 @@
899
899
  "validation-success": "Configs have been changed successfully. Click %(link)s to apply the configs. It may take 2 minutes to apply",
900
900
  "validation-success-no-reset": " ✅ Configs have been changed successfully",
901
901
  "vless_enable": {
902
- "description": "config.vless_enable.description",
903
- "label": "config.vless_enable.label"
902
+ "description": "Enable VLess Protocol",
903
+ "label": "Enable VLess"
904
904
  },
905
905
  "vmess_enable": {
906
906
  "description": "Active VMess Protocol",
@@ -963,8 +963,8 @@
963
963
  "label": "🔰 Enable Websocket"
964
964
  },
965
965
  "xtls_enable": {
966
- "description": "config.xtls_enable.description",
967
- "label": "config.xtls_enable.label"
966
+ "description": "Enable XTLS Protocol",
967
+ "label": "Enable XTLS"
968
968
  }
969
969
  },
970
970
  "config.invalid uuid": "Invalid UUID secret. example: 6098ea35-8cb2-4a08-ba15-2be25bc49cb6\n\n",
@@ -463,8 +463,8 @@
463
463
  "label": "➿ gRPC را فعال کنید"
464
464
  },
465
465
  "h2_enable": {
466
- "description": "",
467
- "label": ""
466
+ "description": "فعال کردن پروتکل HTTP/2",
467
+ "label": "فعال سازی h2"
468
468
  },
469
469
  "hidden": {
470
470
  "description": "-",
@@ -483,7 +483,7 @@
483
483
  "label": "☑️ اجازه اتصال HTTP"
484
484
  },
485
485
  "httpupgrade_enable": {
486
- "description": "HTTPUpgrade یک درخواست ارتقاء HTTP ۱.۱ است و پاسخ را قبل از استفاده مستقیم از اتصال تکمیل می کند. این شبیه به WebSocket است که یک کانال ایجاد می کند که می تواند توسط بسیاری از پروکسی های معکوس و CDN ها ارسال شود، بدون اینکه نیازی به رسیدگی به تمام مسائل پیرامون خود پروتکل WebSocket باشد. ⚠️ در نرم افزارهای مبتنی بر XRay موجود نیست. فقط نرم افزارهای HiddifyNext، Singbox و V۲fly پشتیبانی می شوند. <p><a href=\"https://hiddify.com/fa/manager/basic-concepts-and-troubleshooting/Basic-Concepts/#http-upgarde\" target=\"_blank\"><strong>(بیشتر بدانید)</strong></a></p>",
486
+ "description": "<p style=\"direction:rtl\">HTTPUpgrade یک درخواست ارتقاء HTTP ۱.۱ است و پاسخ را قبل از استفاده مستقیم از اتصال تکمیل می کند. این شبیه به WebSocket است که یک کانال ایجاد می کند که می تواند توسط بسیاری از پروکسی های معکوس و CDN ها ارسال شود، بدون اینکه نیازی به رسیدگی به تمام مسائل پیرامون خود پروتکل WebSocket باشد.<br />\n⚠️ <strong>در نرم افزارهای مبتنی بر XRay موجود نیست. فقط نرم افزارهای HiddifyNext، Singbox و V۲fly پشتیبانی می شوند.&nbsp;</strong><a href=\"https://hiddify.com/fa/manager/basic-concepts-and-troubleshooting/Basic-Concepts/#http-upgarde\" target=\"_blank\"><strong>(بیشتر بدانید)</strong></a></p>",
487
487
  "label": "🆙 فعالسازی HTTPUpgrade"
488
488
  },
489
489
  "hysteria": {
@@ -560,7 +560,7 @@
560
560
  "label": "⬆️ آپلود (mbps) MUX Brutal"
561
561
  },
562
562
  "mux_enable": {
563
- "description": "Mux به نرم افزار سازگار نیاز دارد. Mux در Hiddify Next و Singbox و XRay سازگار نیستند",
563
+ "description": "<p style=\"direction:rtl\">Mux به نرم افزار سازگار نیاز دارد. Mux در Hiddify Next و Singbox و XRay سازگار نیستند.&nbsp;<a href=\"https://hiddify.com/fa/manager/basic-concepts-and-troubleshooting/How-MUX-works-and-its-usage/\" target=\"_blank\">(بیشتر بدانید)</a></p>",
564
564
  "label": "Ⓜ️ فعال کردن MUX (⚠️ ناسازگار با برخی نرم افزارها)"
565
565
  },
566
566
  "mux_max_connections": {
@@ -668,16 +668,16 @@
668
668
  "label": "مسیر پروکسی برای مشتریان"
669
669
  },
670
670
  "quic_enable": {
671
- "description": "",
672
- "label": ""
671
+ "description": "فعال کردن پروتکل QUIC",
672
+ "label": "Enable QUIC Protocol"
673
673
  },
674
674
  "reality": {
675
675
  "description": "REALITY قابلیت اثر انگشت TLS سمت سرور را حذف می کند",
676
676
  "label": "ریالیتی"
677
677
  },
678
678
  "reality_enable": {
679
- "description": "",
680
- "label": ""
679
+ "description": "فعال کردن پروتکل Reality",
680
+ "label": "فعال سازی Reality"
681
681
  },
682
682
  "reality_fallback_domain": {
683
683
  "description": "هنگامی که GTW از وب‌ سایت‌ها در نام سرور بازدید می‌کند، به این دامنه هدایت می‌شود.",
@@ -796,8 +796,8 @@
796
796
  "label": "دامنه جعلی برای SSR"
797
797
  },
798
798
  "tcp_enable": {
799
- "description": "",
800
- "label": ""
799
+ "description": "فعال کردن پروتکل TCP",
800
+ "label": "فعال سازی TCP"
801
801
  },
802
802
  "telegram": {
803
803
  "description": "پروکسی تلگرام برای استفاده درون اپ تلگرام طراحی شده تا فیلترینگ تلگرام را دور بزند",
@@ -828,7 +828,7 @@
828
828
  "label": "تنظیمات TLS"
829
829
  },
830
830
  "tls_fragment_enable": {
831
- "description": "تحت برخی شرایط، می تواند سیستم لیست سیاه SNI را دور بزند",
831
+ "description": "<p style=\"direction:rtl\">تحت برخی شرایط، می تواند سیستم لیست سیاه SNI را دور بزند.&nbsp;<a href=\"https://hiddify.com/fa/manager/basic-concepts-and-troubleshooting/How-the-TLS-Trick-works-and-its-usage/\" target=\"_blank\">(بیشتر بدانید)</a></p>",
832
832
  "label": "⏯ TLS Fragment را فعال کنید"
833
833
  },
834
834
  "tls_fragment_size": {
@@ -844,7 +844,7 @@
844
844
  "label": "🔠 TLS Mixed SNI Case را فعال کنید"
845
845
  },
846
846
  "tls_padding_enable": {
847
- "description": "Padding تکه تکه شدن TLS را فعال می کند",
847
+ "description": "<p style=\"direction:rtl\">Padding تکه تکه شدن TLS را فعال می کند.&nbsp;<a href=\"https://hiddify.com/fa/manager/basic-concepts-and-troubleshooting/How-the-TLS-Trick-works-and-its-usage/#tls-padding\" target=\"_blank\">(بیشتر بدانید)</a></p>",
848
848
  "label": "♒️ TLS Padding را فعال کنید"
849
849
  },
850
850
  "tls_padding_length": {
@@ -868,8 +868,8 @@
868
868
  "label": "تنظیمات Torrent Block"
869
869
  },
870
870
  "trojan_enable": {
871
- "description": "",
872
- "label": ""
871
+ "description": "فعال کردن پروتکل Trojan",
872
+ "label": "فعال سازی Trojan"
873
873
  },
874
874
  "tuic": {
875
875
  "description": "پروکسی Delicately-TUICed با کارایی بالا روی پروتکل QUIC است. \nهدف TUIC این است که تأخیر handshake را تا حد امکان به حداقل برساند.",
@@ -899,8 +899,8 @@
899
899
  "validation-success": "تنظیمات با موفقیت ذخیره شدند. لطفا بر روی این لینک: %(link)s کلیک کنید تا بر روی سیستم اعمال شوند. این کار ممکن است 2 دقیقه طول بکشد",
900
900
  "validation-success-no-reset": " ✅ تنظیمات با موفقیت تغییر کرد",
901
901
  "vless_enable": {
902
- "description": "",
903
- "label": ""
902
+ "description": "فعال کردن پروتکل VLess",
903
+ "label": "فعال سازی VLess"
904
904
  },
905
905
  "vmess_enable": {
906
906
  "description": "فعال کردن پروتکل VMess",
@@ -963,8 +963,8 @@
963
963
  "label": "🔰 Websocket را فعال کنید"
964
964
  },
965
965
  "xtls_enable": {
966
- "description": "",
967
- "label": ""
966
+ "description": "فعال کردن پروتکل XTLS",
967
+ "label": "فعال سازی XTLS"
968
968
  }
969
969
  },
970
970
  "config.invalid uuid": "رمز UUID نامعتبر است. به عنوان مثال: 6098ea35-8cb2-4a08-ba15-2be25bc49cb6",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: hiddifypanel
3
- Version: 10.16.0.dev0
3
+ Version: 10.16.0.dev3
4
4
  Summary: hiddifypanel multi proxy panel
5
5
  Home-page: https://github.com/hiddify/hiddify-manager/
6
6
  Author: hiddify
@@ -24,7 +24,7 @@ Requires-Dist: MarkupSafe ==2.1.5
24
24
  Requires-Dist: PyMySQL ==1.1.0
25
25
  Requires-Dist: PyYAML ==6.0.1
26
26
  Requires-Dist: SQLAlchemy-Utils ==0.41.2
27
- Requires-Dist: SQLAlchemy-serializer ==1.4.6
27
+ Requires-Dist: SQLAlchemy-serializer ==1.4.12
28
28
  Requires-Dist: SQLAlchemy ==2.0.29
29
29
  Requires-Dist: StrEnum ==0.4.15
30
30
  Requires-Dist: WTForms ==3.1.2
@@ -1,12 +1,12 @@
1
1
  hiddifypanel/Events.py,sha256=AlnRdjVul0jP-NCT4-zoaQgowoOo-JhdQB4ytetAFKA,723
2
- hiddifypanel/VERSION,sha256=ugMSgWn9-MHWlcme3rr6cZMGbEkkx5qhtfvBwi9QZCs,13
3
- hiddifypanel/VERSION.py,sha256=tdP9jIvzil6bRnSJnTO1gWydyef0rHk0VwucDnYGmLE,118
2
+ hiddifypanel/VERSION,sha256=0-XDvqX6n1Up7He9CQa_5ZtPwjbawrjx4lVhG7poZls,13
3
+ hiddifypanel/VERSION.py,sha256=_RKSdSDIVo3dCpHkpvS2rmqK0lJhJEtiVOrBYobuKbk,118
4
4
  hiddifypanel/__init__.py,sha256=aLukp3ORszdcH4G9J-MlxhjHN6yFlOuOE6mm-L3aG_g,266
5
5
  hiddifypanel/__main__.py,sha256=IVchnXpK6bm8T3N--mN17HBQNLMeLAjyP7iwzULexB4,218
6
6
  hiddifypanel/auth.py,sha256=5GUwwKCRY90RS0WTKPfqzuOYuLuwGLpNLpnKmubf7DE,7405
7
7
  hiddifypanel/base.py,sha256=cFmEQklruNn7TvCxb4nbsR83_dVfEmzeZNsaHMGZCOU,5484
8
- hiddifypanel/cache.py,sha256=LKc7CQEelwwttNKZAHRlO8PgeOocxo7DXPNYZHZ1o40,2198
9
- hiddifypanel/database.py,sha256=5NGoAGdYIxJXcQqGJkHbAXERqGsIjDGnazF2twSvQFs,482
8
+ hiddifypanel/cache.py,sha256=8Y_Gj5XzKv63qhTY98BLS8Vy_dk1u0qT1KJ6t7q3OGY,2197
9
+ hiddifypanel/database.py,sha256=14sfbGEG-NCqkfUtyLvcO2JbkQ3-Fzs-MezPNkNbvgk,717
10
10
  hiddifypanel/drivers/abstract_driver.py,sha256=HpWkgbWVWF8n3WhDe0BlxsIF1WTWO57AQEAEb2ZVCPM,223
11
11
  hiddifypanel/drivers/singbox_api.py,sha256=vApQU4vwMZdd71-FEnTGm8btRLoC1l0sSzAcH_7lTcQ,2207
12
12
  hiddifypanel/drivers/ssh_liberty_bridge_api.py,sha256=FXoS65hydwisizC20HTJvMQR_SNx1MvZ4Fu8jSwesWw,1768
@@ -25,7 +25,7 @@ hiddifypanel/hutils/random.py,sha256=KrsarmRNL05PYzwMxDaDyv-_QcKS0YsZR2z7BnllAqI
25
25
  hiddifypanel/hutils/system.py,sha256=nX7ZvmXKfHu6_cFVOGZRG-7ch2glqgzQL2iWraQc4S0,4350
26
26
  hiddifypanel/hutils/utils.py,sha256=ogLBVb4x8l5tRMYXKDUdTnb9dyEnrQsRjsMcuLeonlE,1065
27
27
  hiddifypanel/hutils/importer/__init__.py,sha256=kjl4ePaQodEXhliZmunCMQ-j7MsQbVYL_Zyd_35009A,18
28
- hiddifypanel/hutils/importer/xui.py,sha256=MOxn49Kkl5FVx08UG1uD2rkwZ2_otLfvh0RqtDs1nC8,5491
28
+ hiddifypanel/hutils/importer/xui.py,sha256=DdftEeZUa8SPR2F0mCiTnWYT79DiSsoGmBegDTnHFpk,5491
29
29
  hiddifypanel/hutils/network/__init__.py,sha256=jEyLLnMUak2lXXWNvkQ5_fRtuo2wpOvba6q8gMJT7D8,328
30
30
  hiddifypanel/hutils/network/auto_ip_selector.py,sha256=uSQjxnqI7NdJ6N_jCNtHAGLwjRjHagBG4GeR0lhD-HM,5667
31
31
  hiddifypanel/hutils/network/net.py,sha256=jgtKq_w8z9BbjoT2JQ4POdqNGblRj3v50Ti40iZdZ-g,12065
@@ -39,20 +39,20 @@ hiddifypanel/hutils/proxy/clash.py,sha256=ERyiuUZibOUYvkyC1HPLCRPNB1lrZpuuafey2S
39
39
  hiddifypanel/hutils/proxy/shared.py,sha256=T2YuC3coTG1iM6p7SQQVCzRjnp3dB25X9rIgA8h2OUc,21547
40
40
  hiddifypanel/hutils/proxy/singbox.py,sha256=ssaO5lCK6CmZ3BIHgAdlD7GcMZljJSF8DaMissgw_Jw,10800
41
41
  hiddifypanel/hutils/proxy/xray.py,sha256=HDK4PsyY8qnnmQ51hNiP4UKJVXE-nMjIRuFjF1ZcHOY,10769
42
- hiddifypanel/hutils/proxy/xrayjson.py,sha256=KrK8VT91FzBjR8aRN6SL1-2GbO4XscIW-7-f3iDp9gY,13016
42
+ hiddifypanel/hutils/proxy/xrayjson.py,sha256=QaP3byxwQquHKp8t_SPkqjz9qENFGRtqiP0MofcwA80,12950
43
43
  hiddifypanel/models/__init__.py,sha256=W7lWG_7jNNPn-cdXV5wMmuPv1unHUFVlMd9OmwDn2gM,860
44
- hiddifypanel/models/admin.py,sha256=6nZOjNsKo2FE-HRFPATsEYr02nxnw5MGmJHKcI2runs,6856
45
- hiddifypanel/models/base_account.py,sha256=X8gg5kwrxkRgDsWU_KzbkKQae5dFLRqjhXlOW3_CAEo,2993
46
- hiddifypanel/models/child.py,sha256=20nKDWgTm8kJAA02HRgeox2NUNKWzIoDHdt6uVLHSWU,3000
47
- hiddifypanel/models/config.py,sha256=hJ0e8iuG7PwAB8C-yjxnluJucHkQCsUwLLvXBUDhTdE,6671
48
- hiddifypanel/models/config_enum.py,sha256=NBEuJKygY_hA4PvQMsMx7lMz3VDibYCxgcF2mvIyZdE,14638
49
- hiddifypanel/models/domain.py,sha256=B2Bcy-SqVvfJNwkeQoJsIcNFTnIFX5O_YOn3gMk0rfM,8432
44
+ hiddifypanel/models/admin.py,sha256=W1C0R9fhLtwjnIzgPgiVcaNXc6YzzIolAsyy4QaqQKw,6936
45
+ hiddifypanel/models/base_account.py,sha256=T2vllZo1QTGzYos3njgdYtAlnYB77LYrfzpEoO8yRk8,3060
46
+ hiddifypanel/models/child.py,sha256=ZFJaH-GWTKAGD0BGMH0iKEMipi37_cAk59OeJKt2IKA,3039
47
+ hiddifypanel/models/config.py,sha256=AoY3gDjHscIaXNSDXPIFWASo7WS9-UjNyLd-3K2ntIE,6755
48
+ hiddifypanel/models/config_enum.py,sha256=bosh0mWYSUknPZTTaONH8JrVcfOBr2SJ04BNP0miuJU,14633
49
+ hiddifypanel/models/domain.py,sha256=9HR7Ch3BniuzDM5TJfQNpTuoOPbkthEDhjF-exUXCuM,8499
50
50
  hiddifypanel/models/parent_domain.py,sha256=bs5F1neOAQu9XHEk3QQTBM4p2iuebM4cnAQqwfNjCtg,2291
51
- hiddifypanel/models/proxy.py,sha256=OYOa1k17zUCgtX0thzaUg_vqY7cpBQZqRKAer75eFKI,3237
52
- hiddifypanel/models/report.py,sha256=McWwgDvwz3JEKjfIIeQCPtVhKt7JvbFVjncoPYfr9lc,917
51
+ hiddifypanel/models/proxy.py,sha256=9cm5Q0ZUEPeRDWdm1lQGom0SM_Q32NCDFTNFh36OzaQ,3304
52
+ hiddifypanel/models/report.py,sha256=33h9k12SAEWkwZsc3-jUdIIpFL66cEOTHQqVXd07NWY,1001
53
53
  hiddifypanel/models/role.py,sha256=V93_AhOcgbIiAaRYUaNIWKsKZ704ANl0hq-uAJFQCUo,269
54
- hiddifypanel/models/usage.py,sha256=2PRFNlVVkmIdAQq6VZ_Sm0D1foBEzZcDgAWhycc35-c,4295
55
- hiddifypanel/models/user.py,sha256=SXONs56BUodI7xlgyw19pJpx-w3SDJ51hoGGw6T8xck,13241
54
+ hiddifypanel/models/usage.py,sha256=BCZtYhmgru-bF8O2dGwJgcN7qtZ29a3arQEK9EVPdtE,4362
55
+ hiddifypanel/models/user.py,sha256=bMiw0ZveN47qmwQ0BFTB-F9QnONvawsrFg_ttemcnvY,13325
56
56
  hiddifypanel/panel/__init__.py,sha256=YDC8OatzZ2PoGrOARauce7OimcFsbTEvIq8AcNl1_-s,180
57
57
  hiddifypanel/panel/admin_2.py,sha256=23fKDbYlME0hNUALU76JZZbL9L4lWrHtFZ1IO6h_Zjo,989
58
58
  hiddifypanel/panel/asset.py,sha256=sp3NJVsTYycVgM2NbXX_KnOENGDmRB72CRKZwhd7f-4,500
@@ -63,7 +63,7 @@ hiddifypanel/panel/cli.py,sha256=a2rTpUlUsjv3aEkqAK0aa8_PW3e1IzpXWaJPb4EVIyg,936
63
63
  hiddifypanel/panel/common.py,sha256=fns77UWOc5zreyqZHEOHcHc3WuEX8mZZEwRY8J0aWAo,7995
64
64
  hiddifypanel/panel/custom_widgets.py,sha256=9qI_fNX8NKqB1r8ljgcaisGZaDM89_PM_rOBZbGaTYs,2506
65
65
  hiddifypanel/panel/hiddify.py,sha256=K8obO2Chc8A0Dh0FwMWT2NyvPbI8eGSHY3wLpCB2XoU,14436
66
- hiddifypanel/panel/init_db.py,sha256=5N-y7br2PBQ9hydT8kAHjB0ujlmEmBcjqF1e5n0FkFM,32667
66
+ hiddifypanel/panel/init_db.py,sha256=QqJYlIoc9HBy4JPmfsIVPxHn1oUom6iMFCs5neWnX90,33041
67
67
  hiddifypanel/panel/run_commander.py,sha256=D9y-My0xSe2adHWXKV5UPYGl-9WwKURzniq55MRu6tE,3259
68
68
  hiddifypanel/panel/usage.py,sha256=zYXhd0OTGWWV7K_UErb4mCoEla2qE2f_Rzl4-C13ia4,4828
69
69
  hiddifypanel/panel/admin/Actions.py,sha256=Ea2eFbHzPcXQcuGh1oihaMjlszuHcmSuE70azysaZ7M,8794
@@ -75,7 +75,7 @@ hiddifypanel/panel/admin/DomainAdmin.py,sha256=n6vNX58Bc7LxYwkXcAIOKf8GZuES3-AgW
75
75
  hiddifypanel/panel/admin/NodeAdmin.py,sha256=QAHQjF7e7F4KqsWNWpMt7SoLANlFEborVtWQV9OXJ2E,3102
76
76
  hiddifypanel/panel/admin/ProxyAdmin.py,sha256=e-tCTfsEjqjbRezhVJvFyQZHh-uluvHFZXXwc4aFRDE,5319
77
77
  hiddifypanel/panel/admin/QuickSetup.py,sha256=X8d492PLQu8vNtabh-X2R2IDZVs_5pmWeyn-Qz5_qXk,7560
78
- hiddifypanel/panel/admin/SettingAdmin.py,sha256=qpKQXuiqfV-q7Qjb5LmsMJoI-EgSLAVu_5R9jpIYUog,18663
78
+ hiddifypanel/panel/admin/SettingAdmin.py,sha256=Xo3cFhwOtcsgwWgq5TE4kHCYe4kD1isDDrG9bPwndlc,18848
79
79
  hiddifypanel/panel/admin/Terminal.py,sha256=fjLVLspXYHOwZGyMU_KbytWe1zf-m6KbmvBPEDps45w,1737
80
80
  hiddifypanel/panel/admin/UserAdmin.py,sha256=pAiZRoDxQRjcZOUhGu5nRqglTuippeXgiGxTOf-Thv4,17145
81
81
  hiddifypanel/panel/admin/__init__.py,sha256=hb0A2HuK_nBZRCNPumwahXX-25FMxODKYlNbk2ItF08,3015
@@ -161,7 +161,7 @@ hiddifypanel/panel/commercial/restapi/v2/parent/sync_api.py,sha256=Pew5PJU-LAj6Y
161
161
  hiddifypanel/panel/commercial/restapi/v2/parent/usage_api.py,sha256=FOvb6nFuWcucTEtZPwhINpbZQDdprgk4orpwwi02jK4,2373
162
162
  hiddifypanel/panel/commercial/restapi/v2/user/__init__.py,sha256=SxWty7krk6kt_JORT1AyQcUfgRdY_55vRb3FAxT4LB8,1230
163
163
  hiddifypanel/panel/commercial/restapi/v2/user/apps_api.py,sha256=WVq8Ufjr_HpkdHG3juTD6Tfg12kE-00VRV8PrbSiqY8,20833
164
- hiddifypanel/panel/commercial/restapi/v2/user/configs_api.py,sha256=tc2fP-neC2mbc7sRQADpLYwlIFLr5UtUjyTsOT3rVp4,4602
164
+ hiddifypanel/panel/commercial/restapi/v2/user/configs_api.py,sha256=OoA57YDR3Sh9rbBW6KhfRqaDhiYsq59N00IaFenES-A,4780
165
165
  hiddifypanel/panel/commercial/restapi/v2/user/info_api.py,sha256=Ou-3TjwLqYYECIttjSU9rpjmfjDFbgHj2_gGnwmHj5E,3918
166
166
  hiddifypanel/panel/commercial/restapi/v2/user/mtproxies.py,sha256=wK6zMOw2OTVxeMkzZGVah34GYDMJa8Keq5z7jGKfFys,1676
167
167
  hiddifypanel/panel/commercial/restapi/v2/user/short_api.py,sha256=rhsmDJSCiZOhX9jpJGcRS_zBVRqvjpjH3CaNaJ9gMiI,1137
@@ -177,7 +177,7 @@ hiddifypanel/panel/common_bp/login.py,sha256=eDynKaUI6Q015E8cByMNT9twBw7xIiFL6TD
177
177
  hiddifypanel/panel/common_bp/templates/login.html,sha256=jDl9-Nh2qMuCsLQmXm7e5jvSaRAlBxReVVCbNSTTHJw,1312
178
178
  hiddifypanel/panel/user/__init__.py,sha256=E9RxA2YGc0eXLGjfJbyryeLG3bXEWJ3DoVOyIpVaDIo,1859
179
179
  hiddifypanel/panel/user/link_maker.html,sha256=g420NAm_fUI8asYjyfCiXyUOIwEQfDPonZA9xh3p0-8,177
180
- hiddifypanel/panel/user/user.py,sha256=wQZYCbbm32newWANXrVn1Gr0x0cHNKqqgpdi4II1yis,13827
180
+ hiddifypanel/panel/user/user.py,sha256=PC1vCFY2bLOT2ZsdzNJEiLqA6r9HnLFXWZ7Iq4FSYzs,13793
181
181
  hiddifypanel/panel/user/templates/all_configs copy.txt,sha256=u5jhAgjhH07_0csdIisuXy2HNCC9SWlP0whBAGFXA78,564
182
182
  hiddifypanel/panel/user/templates/all_configs.txt,sha256=i8I6g9ujOr3RIuRoGRqY2Q75I89mbHko_JVPvQt4E_g,1260
183
183
  hiddifypanel/panel/user/templates/base_singbox_config.json.j2,sha256=xhvQpm0fp2w3VA8N7zXbYs8RWlRgdyApiedFH_sRTfM,7107
@@ -820,24 +820,24 @@ hiddifypanel/templates/redirect.html,sha256=K9x_O4P96vEkqBhOXIhoGrWw1KIqd2bL0BjI
820
820
  hiddifypanel/templates/static.html,sha256=jp6q4wtx-k2A_cjqJoNiMS7Ee30arE45qI3ev4d5ky4,165
821
821
  hiddifypanel/templates/hiddify-flask-admin/actions.html,sha256=2NeITe2e-lPKCk_o511tCIqVtrPu8LYHE1wTCtrFUrI,1331
822
822
  hiddifypanel/templates/hiddify-flask-admin/list.html,sha256=MBGrTqZpzNLe4sZy0RozvXNr8seFUQc2C6v88BJtNWc,11095
823
- hiddifypanel/translations/en/LC_MESSAGES/messages.mo,sha256=rPtaWV83QXB7qyh0mFXNEtGNdct7ZOi3U5QJDDJRtFQ,74266
824
- hiddifypanel/translations/en/LC_MESSAGES/messages.po,sha256=htfXb1yD7U4vfsyeF9ECctKBrfJOwnaAfPp8cUiZvTE,77415
825
- hiddifypanel/translations/fa/LC_MESSAGES/messages.mo,sha256=Ngc8IRm8Nd7aXU0ins4e0pMRtRQr74D1HfbgMkxQf7A,94799
826
- hiddifypanel/translations/fa/LC_MESSAGES/messages.po,sha256=kfaTzdmS1eJCb0NjrHLfltd_y-FGXI2LCQxDEannE4E,99980
827
- hiddifypanel/translations/pt/LC_MESSAGES/messages.mo,sha256=W_2BDz65QT8a_v-j3ZTCTd8u9qufpjJ0BQSRpLrEkU0,60612
823
+ hiddifypanel/translations/en/LC_MESSAGES/messages.mo,sha256=7SONp6cawE1coIigHquY66YZdKItHadyCoPEw3-KGMo,74599
824
+ hiddifypanel/translations/en/LC_MESSAGES/messages.po,sha256=JYdJWkz8ZjeqzNdbz1kOOAw11YHMpFU447R1SYaD1Sg,77783
825
+ hiddifypanel/translations/fa/LC_MESSAGES/messages.mo,sha256=xBLIZCxMGMhw_koknRxOKvKw9N27H-_i7fu5WJ07dh4,96482
826
+ hiddifypanel/translations/fa/LC_MESSAGES/messages.po,sha256=c4_SjizFofBr6uNRAlD8j9HRbVv4f4SCGVlFGWxMWA8,101063
827
+ hiddifypanel/translations/pt/LC_MESSAGES/messages.mo,sha256=S5U1hkPKKS6nLxUQJeSJKIOOINf1jDS08eONwDgh9I0,60612
828
828
  hiddifypanel/translations/pt/LC_MESSAGES/messages.po,sha256=tUp3Ed-ZBDZeD99yb7o6I76wWUU_QQT2i_cQfNV_7Zk,69869
829
- hiddifypanel/translations/ru/LC_MESSAGES/messages.mo,sha256=0xGRdDDqJcbQ21-FQ3upJaBc-gxZ-x93wqiK0lIJ5lg,95543
829
+ hiddifypanel/translations/ru/LC_MESSAGES/messages.mo,sha256=JS2kFQptLzkeg-bDrjGS5z0XIkAoRkFC19MGYuF75rA,95543
830
830
  hiddifypanel/translations/ru/LC_MESSAGES/messages.po,sha256=ojNL5z1gvjgiO-5hjccCLhK0Z-CeZKrwE3yiEE4ekeg,102007
831
- hiddifypanel/translations/zh/LC_MESSAGES/messages.mo,sha256=ZYp6tM5CxYBykEXEkNR_vAmysGN5q_95e6mw_dn3dwY,60878
831
+ hiddifypanel/translations/zh/LC_MESSAGES/messages.mo,sha256=aCGEYnPvvD0Aya64HNxjdhp0ATDi3c-6ht7z-_CMyvE,60878
832
832
  hiddifypanel/translations/zh/LC_MESSAGES/messages.po,sha256=f0fv1MW5_Okc5GixUoPv5BkV0XwM6wKrjK7khLeiv18,69040
833
- hiddifypanel/translations.i18n/en.json,sha256=07z5rKyF0AADkYOPjJVAN9aFrbtj4V8ZAQM5wK4f4bc,67420
834
- hiddifypanel/translations.i18n/fa.json,sha256=M5-D3rdRCbrWQqT3N4hw0OEmjfsBAIWOLeLmqSshyCw,89976
833
+ hiddifypanel/translations.i18n/en.json,sha256=SEBuSZt0rP6l-IK3dkZteEEvzLs3JVMwfaWCiak_jBk,67764
834
+ hiddifypanel/translations.i18n/fa.json,sha256=Xn6sJ8o74HE8qjzOjgjW-LzHJRrHk7Aze-6EYts2Gt0,91044
835
835
  hiddifypanel/translations.i18n/pt.json,sha256=Wh72C6ToJUVXgAfB_2JqJKQjw0_Rvv7gsYIp8-Nbd8Q,60171
836
836
  hiddifypanel/translations.i18n/ru.json,sha256=WNSflb5-l-CWOQ71SWhDSkgQLkJVHeZ_dehn3lRyv0s,91988
837
837
  hiddifypanel/translations.i18n/zh.json,sha256=17fERyiPhWV2899MMynfIeuZL6X7u-_pWd0h5n6FJUo,59588
838
- hiddifypanel-10.16.0.dev0.dist-info/LICENSE.md,sha256=oDrt-cUsyiDGnRPjEJh-3dH2ddAuK_bIVBD8ntkOtZw,19807
839
- hiddifypanel-10.16.0.dev0.dist-info/METADATA,sha256=AQVAB0o2OqwDFJXH5Jr8OuIcqt0AiAuXFFed5Q1sa3A,4013
840
- hiddifypanel-10.16.0.dev0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
841
- hiddifypanel-10.16.0.dev0.dist-info/entry_points.txt,sha256=Xzpqlh3nwBtZhoV9AANJykano056VJvYzaujxPztJaM,60
842
- hiddifypanel-10.16.0.dev0.dist-info/top_level.txt,sha256=rv-b3qFWUZQTBy0kyBfsr7L6tPpeO7AaQlLHXn-HI5M,13
843
- hiddifypanel-10.16.0.dev0.dist-info/RECORD,,
838
+ hiddifypanel-10.16.0.dev3.dist-info/LICENSE.md,sha256=oDrt-cUsyiDGnRPjEJh-3dH2ddAuK_bIVBD8ntkOtZw,19807
839
+ hiddifypanel-10.16.0.dev3.dist-info/METADATA,sha256=MDm6ytfVYj8Ex1Ujn_5zATVOUPV0cnZYJL7jgP8am_w,4014
840
+ hiddifypanel-10.16.0.dev3.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
841
+ hiddifypanel-10.16.0.dev3.dist-info/entry_points.txt,sha256=Xzpqlh3nwBtZhoV9AANJykano056VJvYzaujxPztJaM,60
842
+ hiddifypanel-10.16.0.dev3.dist-info/top_level.txt,sha256=rv-b3qFWUZQTBy0kyBfsr7L6tPpeO7AaQlLHXn-HI5M,13
843
+ hiddifypanel-10.16.0.dev3.dist-info/RECORD,,