Skip to content

Commit ca421c0

Browse files
authored
Merge pull request #19 from hiddify/beta
release
2 parents 2a392fa + b72a22c commit ca421c0

File tree

25 files changed

+132
-118
lines changed

25 files changed

+132
-118
lines changed

HISTORY.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,28 @@
11
# Changelog
22

33

4+
## v11.0.0 (2025-07-10)
5+
6+
#### Fix
7+
8+
* Ssh bug.
9+
10+
#### Other
11+
12+
* Prevent duplicate ports.
13+
14+
15+
16+
## v10.86.3 (2025-07-10)
17+
18+
#### Other
19+
20+
* Merge branch 'dev' of github.com:hiddify/Hiddify-Panel into dev.
21+
22+
* Chore: update translations with Fink 🐦
23+
24+
25+
426
## v10.86.2 (2025-07-10)
527

628
#### Other

hiddifypanel/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
10.86.2
1+
11.0.0

hiddifypanel/VERSION.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# import importlib.metadata
22
from datetime import datetime
33

4-
__version__ = '10.86.2'
5-
__release_time__= datetime.strptime('2025-07-10T17:21:34','%Y-%m-%dT%H:%M:%S')
4+
__version__ = '11.0.0'
5+
__release_time__= datetime.strptime('2025-07-10T20:14:23','%Y-%m-%dT%H:%M:%S')
66
is_released_version = False

hiddifypanel/hutils/proxy/xray.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,11 @@ def to_link(proxy: dict) -> str | dict:
6767
# else:
6868
hk = ",".join(proxy["host_keys"])
6969
pk = proxy["private_key"].replace('\n', '')
70-
d={
70+
q={
7171
'file':'ssh',
72+
'hk':hk,
7273
'pk':pk,
7374
'private_key':pk,
74-
'hk':hk,
7575
'authentication':0,
7676
'passphrase':'',
7777
}

hiddifypanel/panel/admin/SettingAdmin.py

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
from hiddifypanel.cache import cache
2+
from hiddifypanel import __version__
3+
from hiddifypanel.panel import hiddify, custom_widgets
4+
from hiddifypanel.database import db
5+
from hiddifypanel.models import *
6+
from hiddifypanel.models import BoolConfig, StrConfig, ConfigEnum, hconfig, ConfigCategory
17
import re
28
import flask_babel
39
import flask_babel
@@ -20,14 +26,6 @@
2026
ALLOWED_TAGS = set([*BLEACH_ALLOWED_TAGS, "h1", "h2", "h3", "h4", "p"])
2127

2228

23-
from hiddifypanel.models import BoolConfig, StrConfig, ConfigEnum, hconfig, ConfigCategory
24-
from hiddifypanel.models import *
25-
from hiddifypanel.database import db
26-
from hiddifypanel.panel import hiddify, custom_widgets
27-
from hiddifypanel import __version__
28-
from hiddifypanel.cache import cache
29-
30-
3129
class SettingAdmin(FlaskView):
3230

3331
@login_required(roles={Role.super_admin})
@@ -63,10 +61,15 @@ def post(self):
6361
return render_template('config.html', form=form)
6462
if "port" in k:
6563
for p in v.split(","):
66-
for k2, v2 in c_items.items():
67-
if "port" in k2 and k.name != k2 and p in v2:
68-
hutils.flask.flash(_("Port is already used! in") + f" {k2} {k}", 'error')
69-
return render_template('config.html', form=form)
64+
if (k != ConfigEnum.tls_ports and p == "443") or (k != ConfigEnum.http_ports and p == "80"):
65+
hutils.flask.flash(_("Port 80 and 443 can not be selected"), 'error')
66+
return render_template('config.html', form=form)
67+
for c_, c_items2 in form.data.items():
68+
if not isinstance(c_items2, dict):continue
69+
for k2, v2 in c_items2.items():
70+
if "port" in k2 and k.name != k2 and p in v2.strip().split(","):
71+
hutils.flask.flash(_("Port is already used! in") + f" {k2} {k}", 'error')
72+
return render_template('config.html', form=form)
7073
if k == ConfigEnum.parent_panel and v != '':
7174
# v=(v+"/").replace("/admin",'')
7275
v = re.sub("(/admin/.*)", "/", v) + ("/" if not v.endswith("/") else "")
@@ -140,7 +143,6 @@ def post(self):
140143
for field, errors in form.errors.items():
141144
for error in errors:
142145
hutils.flask.flash(error, 'danger') # type: ignore
143-
144146

145147
return reset_action or render_template('config.html', form=form)
146148

hiddifypanel/panel/init_db.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,6 @@
1919
def _v106(child_id):
2020
set_hconfig(ConfigEnum.use_ip_in_config,True)
2121

22-
def _v105(child_id):
23-
StrConfig.query.filter(StrConfig.key==ConfigEnum.reality_port).delete()
24-
def _v104(child_id):
25-
2622
if rport:=hconfig(ConfigEnum.reality_port):
2723
set_hconfig(ConfigEnum.special_port,rport)
2824
StrConfig.query.filter(StrConfig.key==ConfigEnum.reality_port).delete()

hiddifypanel/translations.i18n/en.json

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@
152152
"Please type your message to send to the telegram:": "✏️ Please write your message to send to the Telegram:",
153153
"Please understand that parent panel is under test and the plan and the condition of use maybe change at anytime.": "Please understand that parent Panel is under test and the plan and the condition of use maybe change at anytime.",
154154
"Please wait ": "Please Wait ",
155+
"Port 80 and 443 can not be selected": "Port 80 and 443 can not be selected",
155156
"Port is already used! in": "Port is Already Used in:",
156157
"Premium Description": "Hiddify Manager Is Made For Non-Commercial Use. But If You Use This Panel Commercially, Please Help The Project Grow By Donating. <br/>\nIn Exchange For Your Financial Support, We Also Provide Special Facilities For Your Commercial Product.\n<br/>\n<br/>\nSuch as:\n<ul><li>\n<li>The Possibility Of Syncing To Cloudflare: That Is, By Adding a Domain In The Panel, The Relevant Settings Can Also Be Made In Cloudflare</li>\n<li>Possibility Of Displaying Your Brand In The Panel</li>\n<li>Possibility Of Using The Central Panel To Manage More Than 1 Server In Just One Panel, So It Is No Longer Necessary To Register Users In Different Servers, And Their Volume Will Be Collected In All Servers.\n</li>\n<li>\nThe Possibility Of Using The Telegram Bot\n</li>\n<li>\nAbility To Change Proxy Names\n</li>\n</ul>\n\nPlease Contact <a href='tg://resolve?domain=HiddifyCommercial'>@HiddifyCommercial</a> After Donating.\nSend a Message To Get a Special Version for business users.",
157158
"ProxyPath is already used! use different proxy path": "ProxyPath is already used! use different proxy path",
@@ -461,7 +462,7 @@
461462
},
462463
"default_useragent_string": {
463464
"description": "config.default_useragent_string.description",
464-
"label": "config.default_useragent_string.label"
465+
"label": "Default User Agent"
465466
},
466467
"dns_server": {
467468
"description": "✳️ Default 1.1.1.1 <br>\n🚧 Block Malware 1.1.1.2 <br>\n🔞 Block Porn 1.1.1.3\n",
@@ -670,8 +671,8 @@
670671
"label": "ℹ️ HTTP Upgrade Path"
671672
},
672673
"path_splithttp": {
673-
"description": "config.path_splithttp.description",
674-
"label": "config.path_splithttp.label"
674+
"description": "XHTTP path",
675+
"label": "XHTTP path"
675676
},
676677
"path_ss": {
677678
"description": "Shadowsocks Path in the Links",
@@ -738,7 +739,7 @@
738739
"label": "🌍 Reality Fallback Domain"
739740
},
740741
"reality_port": {
741-
"description": "config.reality_port.description",
742+
"description": "Reality Port",
742743
"label": "config.reality_port.label"
743744
},
744745
"reality_private_key": {
@@ -814,8 +815,8 @@
814815
"label": "🚀 Speed Test"
815816
},
816817
"splithttp_enable": {
817-
"description": "config.splithttp_enable.description",
818-
"label": "config.splithttp_enable.label"
818+
"description": "XHTTP allowing seperate download and upload stream and uniforming gRPC, H2, H1 and also support Quic.",
819+
"label": "Enable XHTTP"
819820
},
820821
"ssfaketls": {
821822
"description": "Shadowsocks FakeTLS is a simple obfusacting tool that encapsulate the date In tls packet",
@@ -1010,8 +1011,8 @@
10101011
"label": "config.unique_id.label"
10111012
},
10121013
"use_ip_in_config": {
1013-
"description": "config.use_ip_in_config.description",
1014-
"label": "config.use_ip_in_config.label"
1014+
"description": "This help to reduce the issue may heppen in resolving server IP. This will use a random IP of the selected domain.",
1015+
"label": "Use IP in configs"
10151016
},
10161017
"utls": {
10171018
"description": "This Option Will Simulate Different Browsers, Therefore, GFW Can Not Detect Your Browsing",

hiddifypanel/translations.i18n/fa.json

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@
6868
"title": "حمایت"
6969
},
7070
"Download App": "<i class='fa-solid fa-download'></i> دانلود",
71-
"Download Domain": "",
7271
"Edit": "ویرایش",
7372
"Edit Proxy Names": "✏️ ویرایش پروکسی‌ها",
7473
"Enable": "❇️ فعال",
@@ -121,13 +120,13 @@
121120
"Network": "شبکه",
122121
"New": "تازه",
123122
"No children!": "هیچ زیر مجموعه ای یافت نشد",
124-
"Not Secure": "",
123+
"Not Secure": "ناامن",
125124
"Note": "📝 یادداشت",
126125
"Offline more than 1 day": "آفلاین بیش از 1 روز",
127126
"Offline more than 1 hour": "آفلاین بیش از 1 ساعت",
128127
"Offline more than 1 week": "آفلاین بیش از 1 هفته",
129128
"Ok": "تایید",
130-
"Online": "",
129+
"Online": "آنلاین",
131130
"Online Users": "کاربران آنلاین",
132131
"Only Blocked and Local websites": "☑️ فقط سایت‌های داخلی و مسدود شده‌ی خارجی",
133132
"Only for sublink?": "🌍 استفاده فقط برای لینک کانفیگ ها (سابسکریپشن)",
@@ -152,14 +151,15 @@
152151
"Please type your message to send to the telegram:": "✏️ لطفا پیامی را که میخواهید با ربات تلگرام ارسال کنید بنویسید:",
153152
"Please understand that parent panel is under test and the plan and the condition of use maybe change at anytime.": "لطفاً توجه داشته باشید که پنل مادر در حال آزمایش است و طرح و شرایط استفاده ممکن است در هر زمان تغییر کند.",
154153
"Please wait ": "لطفا صبر کنید",
154+
"Port 80 and 443 can not be selected": "",
155155
"Port is already used! in": "پورت قبلا استفاده شده است در",
156156
"Premium Description": "پنل هیدیفای برای استفاده غیرتجاری ساخته شده است. اما چنانچه از این پنل استفاده تجاری می‌کنید، از شما خواهشمندیم با دونیت کردن به رشد پروژه کمک کنید. <br/>\nدر عوض حمایت مالی شما، امکانات ویژه ای هم برای محصول تجاری شما فراهم می‌کنیم.\n<br/>\n<br/>\nاز قبیل:\n<ul>\n<li>امکان سینک شدن به کلودفلر: یعنی با افزودن دامنه در پنل، تنظیمات مربوطه در کلود فلر نیز انجام شود</li>\n<li>امکان نمایش برند شما در پنل</li>\n<li>امکان استفاده از پنل مرکزی جهت مدیریت بیش از ۱ سرور در فقط یک پنل بنابراین دیگر لازم نیست کاربران را در سرورهای مختلف ثبت کنید و همین طور حجم آنها در تمام سرورها جمع خواهد شد.\n</li>\n<li>\nامکان استفاده از بات تلگرام\n</li>\n<li>\nامکان تغییر نام پروکسی ها\n</li>\n</ul>\n\nلطفا پس از دونیت کردن به <a href='tg://resolve?domain=HiddifyCommercial'>@HiddifyCommercial</a>\nپیام دهید تا نسخه ویژه ی کاربران تجاری به شما ارائه شود.",
157157
"ProxyPath is already used! use different proxy path": "ProxyPath قبلاً استفاده شده است! از مسیرهای مختلف پروکسی استفاده کنید",
158158
"QR code": "🧾 کیوآر کد",
159159
"QRCode": "<i class='fa-solid fa-qrcode'></i> QR Code ",
160160
"RAM": "رم",
161161
"REALITY Fallback domain is not compaitble with server names!": "دامنه بازگشتی REALITY با نام سرور سازگار نیست!",
162-
"REALITY Fallback domain is not compatible with server names!": "",
162+
"REALITY Fallback domain is not compatible with server names!": "ریالتی: دامنه جایگزین با نام سرورها سازگار نیست!",
163163
"Release": "✅ پایدار",
164164
"Remaining about %(relative)s, exactly %(days)s days": "حدود %(relative)s و دقیقا %(days)s روز باقی مانده است",
165165
"Remote nodes are not supported yet!": "گره های راه دور هنوز پشتیبانی نمی شوند!",
@@ -195,7 +195,7 @@
195195
"Simplifies the process of employing the link elsewhere.": "برای راحتی انتقال این صفحه به ‌پلتفرم دیگر",
196196
"SingBox": "📦 SingBox",
197197
"Sort by %(name)s": "مرتب سازی بر اساس %(name)s",
198-
"Specifying CDN IP is only valid for CDN mode": "",
198+
"Specifying CDN IP is only valid for CDN mode": "مشخص کردن IP مربوط به CDN فقط برای حالت CDN معتبر است",
199199
"Start Date": "زمان شروع",
200200
"Started %(days)s days ago": "از %(days)s روز پیش شروع شد",
201201
"Started from %(relative)s": "از %(relative)s شروع شد",
@@ -461,7 +461,7 @@
461461
},
462462
"default_useragent_string": {
463463
"description": "",
464-
"label": ""
464+
"label": "یوزرایجنت پیش‌فرض"
465465
},
466466
"dns_server": {
467467
"description": "✳️ پیش فرض 1.1.1.1 <br>\n🚧 مسدود کردن بدافزار 1.1.1.2 <br>\n🔞 مسدود کردن پورن 1.1.1.3",
@@ -669,6 +669,10 @@
669669
"description": "باید تصادفی باشد",
670670
"label": "ℹ️ مسیر ارتقاء HTTP"
671671
},
672+
"path_splithttp": {
673+
"description": "مسیر XHTTP",
674+
"label": "مسیر XHTTP"
675+
},
672676
"path_ss": {
673677
"description": "مسیر شدوساکس در لینکها",
674678
"label": "مسیر شدوساکس"
@@ -734,7 +738,7 @@
734738
"label": "🌍 دامنه بازگشتی ریالیتی"
735739
},
736740
"reality_port": {
737-
"description": "",
741+
"description": "پورت reality",
738742
"label": ""
739743
},
740744
"reality_private_key": {
@@ -805,14 +809,14 @@
805809
"description": "شما می توانید یک پورت سفارشی برای سرور ریالیتی خود تنظیم کنید تا پردازش سیستم را کاهش دهید. (اجازه اتصال مستقیم به پروکسی ها باید بله باشد)",
806810
"label": "↔️ پورت ریالیتی"
807811
},
808-
"special_port_old": {
809-
"description": "",
810-
"label": ""
811-
},
812812
"speed_test": {
813813
"description": "با فعالسازی این گزینه به کاربران اجازه تست سرعت می‌دهید. این کار به آن‌ها کمک می‌کند تا کیفیت سرور و کانفیگ‌ها را بسنجند",
814814
"label": "🚀 تست سرعت"
815815
},
816+
"splithttp_enable": {
817+
"description": "XHTTP امکان دانلود و آپلود جداگانه را فراهم می‌کند و gRPC، H2، H1 را یکپارچه می‌کند و همچنین از Quic پشتیبانی می‌کند.",
818+
"label": "فعال کردن XHTTP"
819+
},
816820
"ssfaketls": {
817821
"description": "شادوساکس FakeTLS یک روش مبهم سازی ساده هست که دیتا را در بسته TLS کپسوله میکند تا فیلترچی فریب بخورد.",
818822
"label": "Shadowsocks FakeTLS"
@@ -1006,8 +1010,8 @@
10061010
"label": "config.unique_id.label"
10071011
},
10081012
"use_ip_in_config": {
1009-
"description": "",
1010-
"label": ""
1013+
"description": "این به کاهش مشکلاتی که ممکن است در حل مشکل IP سرور رخ دهد کمک می‌کند. این از یک IP تصادفی از دامنه انتخاب شده استفاده می‌کند.",
1014+
"label": "استفاده از IP در کانفیگها"
10111015
},
10121016
"utls": {
10131017
"description": "این گزینه مرورگرهای معروف را شبیه سازی میکند تا فیلترچی نتواند شما رو شناسایی کند",

hiddifypanel/translations.i18n/fr.json

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,11 +115,13 @@
115115
"Network": "Réseau",
116116
"New": "Nouveau",
117117
"No children!": "Pas d'enfants",
118+
"Not Secure": "Non sécurisé",
118119
"Note": "📝 Remarque",
119120
"Offline more than 1 day": "Hors ligne plus d'un jour",
120121
"Offline more than 1 hour": "Hors ligne plus d'une heure",
121122
"Offline more than 1 week": "Hors ligne plus d'une semaine",
122123
"Ok": "D'accord",
124+
"Online": "En ligne",
123125
"Online Users": "Utilisateurs en ligne",
124126
"Only Blocked and Local websites": "☑️ Uniquement les sites Web bloqués et locaux",
125127
"Only for sublink?": "🌍 Utiliser uniquement pour le lien d'abonnement",
@@ -706,10 +708,6 @@
706708
"description": "Lorsque le GFW visitera les sites Web dans les noms de serveur, il sera redirigé vers ce domaine.",
707709
"label": "🌍 Domaine de repli de Reality"
708710
},
709-
"special_port": {
710-
"description": "Vous pouvez définir un port personnalisé pour votre serveur de Reality afin de réduire la surcharge du système. (Autoriser la connexion directe aux proxys devrait être oui)",
711-
"label": "↔️ Port de Reality directe"
712-
},
713711
"reality_private_key": {
714712
"description": "Ne le changez pas",
715713
"label": "🔑 Clé privée"
@@ -774,6 +772,10 @@
774772
"description": "Cette option crée une fausse configuration dans le sous-lien de l'utilisateur qui affiche le volume restant de l'utilisateur.",
775773
"label": "👁️‍🗨️ Afficher l'utilisation dans le Sublink"
776774
},
775+
"special_port": {
776+
"description": "Vous pouvez définir un port personnalisé pour votre serveur de Reality afin de réduire la surcharge du système. (Autoriser la connexion directe aux proxys devrait être oui)",
777+
"label": "↔️ Port de Reality directe"
778+
},
777779
"speed_test": {
778780
"description": "Autorisez vos utilisateurs à effectuer des tests de vitesse. Cela les aide à identifier la qualité du lien",
779781
"label": "🚀 Test de vitesse"

hiddifypanel/translations.i18n/my.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -709,10 +709,6 @@
709709
"description": "GFW သည် ဆာဗာအမည်များရှိ ဝဘ်ဆိုဒ်များသို့ သွားရောက်သည့်အခါ ၎င်းသည် ဤ ဒိုမိန်းသို့ ပြန်လည်ညွှန်းပေးမည်ဖြစ်သည်။",
710710
"label": "🌍 Reality Fallback ဒိုမိန်း"
711711
},
712-
"special_port": {
713-
"description": "စနစ်၏ အကျုံးဝင်မှုကို လျှော့ချရန် သင်၏ reality ဆာဗာအတွက် စိတ်ကြိုက် Port တစ်ခုကို သင် သတ်မှတ်နိုင်သည်။ (ပရောက်စီများနှင့် တိုက်ရိုက်ချိတ်ဆက်မှုကို ခွင့်ပြုပါက ဟုတ်သင့်သည်)",
714-
"label": "↔️ တိုက်ရိုက် Reality Port"
715-
},
716712
"reality_private_key": {
717713
"description": "ယင်းအား မပြောင်းလဲရ",
718714
"label": "🔑 Private Key"
@@ -777,6 +773,10 @@
777773
"description": "ဤရွေးချယ်မှုသည် အသုံးပြုသူ၏လက်ကျန်ပမာဏကိုပြသသည့် အသုံးပြုသူ၏ခွဲလင့်ခ်တွင် Fake Config ကိုဖန်တီးပေးသည်။",
778774
"label": "👁️‍🗨️ Sublink တွင် အသုံးပြုပုံကို ပြပါ။"
779775
},
776+
"special_port": {
777+
"description": "စနစ်၏ အကျုံးဝင်မှုကို လျှော့ချရန် သင်၏ reality ဆာဗာအတွက် စိတ်ကြိုက် Port တစ်ခုကို သင် သတ်မှတ်နိုင်သည်။ (ပရောက်စီများနှင့် တိုက်ရိုက်ချိတ်ဆက်မှုကို ခွင့်ပြုပါက ဟုတ်သင့်သည်)",
778+
"label": "↔️ တိုက်ရိုက် Reality Port"
779+
},
780780
"speed_test": {
781781
"description": "သင့်အသုံးပြုသူများကို အမြန်နှုန်းစမ်းသပ်မှု ပြုလုပ်ခွင့်ပြုရန်။ ၎င်းသည် ၎င်းတို့အား လင့်ခ်အရည်အသွေးကို ခွဲခြားသတ်မှတ်ရန် ကူညီပေးသည်။",
782782
"label": "🚀 အမြန်နှုန်း စမ်းသပ်"

0 commit comments

Comments
 (0)