mhsanaei 2 days ago
parent
commit
e094a450fb

+ 12 - 4
sub/subJsonService.go

@@ -184,8 +184,16 @@ func (s *SubJsonService) getConfig(inbound *model.Inbound, client model.Client,
 		var newOutbounds []json_util.RawMessage
 
 		switch inbound.Protocol {
-		case "vmess", "vless":
-			newOutbounds = append(newOutbounds, s.genVnext(inbound, streamSettings, client))
+		case "vmess":
+			newOutbounds = append(newOutbounds, s.genVnext(inbound, streamSettings, client, ""))
+		case "vless":
+			var inboundSettings struct {
+				Encryption string `json:"encryption,omitempty"`
+			}
+			_ = json.Unmarshal([]byte(inbound.Settings), &inboundSettings)
+
+			newOutbounds = append(newOutbounds,
+				s.genVnext(inbound, streamSettings, client, inboundSettings.Encryption))
 		case "trojan", "shadowsocks":
 			newOutbounds = append(newOutbounds, s.genServer(inbound, streamSettings, client))
 		}
@@ -284,7 +292,7 @@ func (s *SubJsonService) realityData(rData map[string]any) map[string]any {
 	return rltyData
 }
 
-func (s *SubJsonService) genVnext(inbound *model.Inbound, streamSettings json_util.RawMessage, client model.Client) json_util.RawMessage {
+func (s *SubJsonService) genVnext(inbound *model.Inbound, streamSettings json_util.RawMessage, client model.Client, encryption string) json_util.RawMessage {
 	outbound := Outbound{}
 	usersData := make([]UserVnext, 1)
 
@@ -295,7 +303,7 @@ func (s *SubJsonService) genVnext(inbound *model.Inbound, streamSettings json_ut
 	}
 	if inbound.Protocol == model.VLESS {
 		usersData[0].Flow = client.Flow
-		usersData[0].Encryption = "none"
+		usersData[0].Encryption = encryption
 	}
 
 	vnextData := make([]VnextSetting, 1)

+ 9 - 6
web/assets/js/model/inbound.js

@@ -1861,14 +1861,15 @@ Inbound.VLESSSettings = class extends Inbound.Settings {
         protocol,
         vlesses = [new Inbound.VLESSSettings.VLESS()],
         decryption = "none",
-        fallbacks = []
+        encryption = "",
+        fallbacks = [],
     ) {
         super(protocol);
         this.vlesses = vlesses;
         this.decryption = decryption;
+        this.encryption = encryption;
         this.fallbacks = fallbacks;
         this.selectedAuth = "X25519, not Post-Quantum";
-        this.encryption = "";
     }
 
     addFallback() {
@@ -1883,13 +1884,11 @@ Inbound.VLESSSettings = class extends Inbound.Settings {
         const obj = new Inbound.VLESSSettings(
             Protocols.VLESS,
             (json.clients || []).map(client => Inbound.VLESSSettings.VLESS.fromJson(client)),
-            json.decryption || "none",
+            json.decryption,
+            json.encryption,
             Inbound.VLESSSettings.Fallback.fromJson(json.fallbacks || [])
         );
-
-        obj.encryption = json.encryption || "";
         obj.selectedAuth = json.selectedAuth || "X25519, not Post-Quantum";
-
         return obj;
     }
 
@@ -1911,6 +1910,10 @@ Inbound.VLESSSettings = class extends Inbound.Settings {
             json.fallbacks = Inbound.VLESSSettings.toJsonArray(this.fallbacks);
         }
 
+        if (this.selectedAuth) {
+            json.selectedAuth = this.selectedAuth;
+        }
+
         return json;
     }
 

+ 1 - 1
web/controller/server.go

@@ -271,7 +271,7 @@ func (a *ServerController) getNewEchCert(c *gin.Context) {
 func (a *ServerController) getNewVlessEnc(c *gin.Context) {
 	out, err := a.serverService.GetNewVlessEnc()
 	if err != nil {
-		jsonMsg(c, I18nWeb(c, "pages.inbounds.toasts.getNewmlkem768Error"), err)
+		jsonMsg(c, I18nWeb(c, "pages.inbounds.toasts.getNewVlessEncError"), err)
 		return
 	}
 	jsonObj(c, out, nil)

+ 6 - 4
web/html/form/protocol/vless.html

@@ -21,24 +21,26 @@
 <template>
   <a-form :colon="false" :label-col="{ md: {span:8} }" :wrapper-col="{ md: {span:14} }">
     <a-form-item label="Authentication">
-      <a-select v-model="inbound.settings.selectedAuth" @change="getNewVlessEnc"
-        :dropdown-class-name="themeSwitcher.currentTheme">
+      <a-select v-model="inbound.settings.selectedAuth" @change="getNewVlessEnc" :dropdown-class-name="themeSwitcher.currentTheme">
         <a-select-option value="X25519, not Post-Quantum">X25519 (not Post-Quantum)</a-select-option>
         <a-select-option value="ML-KEM-768, Post-Quantum">ML-KEM-768 (Post-Quantum)</a-select-option>
       </a-select>
     </a-form-item>
     <a-form-item label="decryption">
-       <a-input v-model.trim="inbound.settings.decryption"></a-input>
+      <a-input v-model.trim="inbound.settings.decryption"></a-input>
     </a-form-item>
     <a-form-item label="encryption">
       <a-input v-model="inbound.settings.encryption" disabled></a-input>
     </a-form-item>
     <a-form-item label=" ">
+      <a-space>
         <a-button type="primary" icon="import" @click="getNewVlessEnc">Get New keys</a-button>
+        <a-button danger @click="clearKeys">Clear</a-button>
+      </a-space>
     </a-form-item>
   </a-form>
 </template>
-<template v-if="inbound.isTcp">
+<template v-if="inbound.isTcp && !inbound.settings.encryption">
   <a-form :colon="false" :label-col="{ md: {span:8} }" :wrapper-col="{ md: {span:14} }">
     <a-form-item label="Fallbacks">
       <a-button icon="plus" type="primary" size="small" @click="inbound.settings.addFallback()"></a-button>

+ 3 - 3
web/html/inbounds.html

@@ -706,7 +706,7 @@
     }, {
         title: '{{ i18n "pages.inbounds.enable" }}',
         align: 'center',
-        width: 30,
+        width: 35,
         scopedSlots: { customRender: 'enable' },
     }, {
         title: '{{ i18n "pages.inbounds.remark" }}',
@@ -770,8 +770,8 @@
 
     const innerColumns = [
         { title: '{{ i18n "pages.inbounds.operate" }}', width: 65, scopedSlots: { customRender: 'actions' } },
-        { title: '{{ i18n "pages.inbounds.enable" }}', width: 30, scopedSlots: { customRender: 'enable' } },
-        { title: '{{ i18n "online" }}', width: 30, scopedSlots: { customRender: 'online' } },
+        { title: '{{ i18n "pages.inbounds.enable" }}', width: 35, scopedSlots: { customRender: 'enable' } },
+        { title: '{{ i18n "online" }}', width: 32, scopedSlots: { customRender: 'online' } },
         { title: '{{ i18n "pages.inbounds.client" }}', width: 80, scopedSlots: { customRender: 'client' } },
         { title: '{{ i18n "pages.inbounds.traffic" }}', width: 80, align: 'center', scopedSlots: { customRender: 'traffic' } },
         { title: '{{ i18n "pages.inbounds.allTimeTraffic" }}', width: 80, align: 'center', scopedSlots: { customRender: 'allTime' } },

+ 4 - 4
web/html/modals/inbound_modal.html

@@ -171,7 +171,6 @@
 
                 const auths = msg.obj.auths || [];
                 const selected = inModal.inbound.settings.selectedAuth;
-
                 const block = auths.find(a => a.label === selected);
 
                 if (!block) {
@@ -179,11 +178,12 @@
                     return;
                 }
 
-                // ✅ server config field
                 inModal.inbound.settings.decryption = block.decryption;
-
-                // ✅ UI-only field (not saved in config)
                 inModal.inbound.settings.encryption = block.encryption;
+            },
+            clearKeys() {
+                this.inbound.settings.decryption = 'none';
+                this.inbound.settings.encryption = '';
             }
 
         },

+ 1 - 1
web/translation/translate.ar_EG.toml

@@ -266,7 +266,7 @@
 "trafficGetError" = "خطأ في الحصول على حركات المرور"
 "getNewX25519CertError" = "حدث خطأ أثناء الحصول على شهادة X25519."
 "getNewmldsa65Error" = "حدث خطاء في الحصول على mldsa65."
-"getNewmlkem768Error" = "حدث خطأ أثناء الحصول على mlkem768."
+"getNewVlessEncError" = "حدث خطأ أثناء الحصول على VlessEnc."
 
 [pages.inbounds.stream.general]
 "request" = "طلب"

+ 1 - 1
web/translation/translate.en_US.toml

@@ -266,7 +266,7 @@
 "trafficGetError" = "Error getting traffics."
 "getNewX25519CertError" = "Error while obtaining the X25519 certificate."
 "getNewmldsa65Error" = "Error while obtaining mldsa65."
-"getNewmlkem768Error" = "Error while obtaining mlkem768."
+"getNewVlessEncError" = "Error while obtaining VlessEnc."
 
 [pages.inbounds.stream.general]
 "request" = "Request"

+ 1 - 1
web/translation/translate.es_ES.toml

@@ -266,7 +266,7 @@
 "trafficGetError" = "Error al obtener los tráficos"
 "getNewX25519CertError" = "Error al obtener el certificado X25519."
 "getNewmldsa65Error" = "Error al obtener el certificado mldsa65."
-"getNewmlkem768Error" = "Error al obtener el certificado mlkem768."
+"getNewVlessEncError" = "Error al obtener el certificado VlessEnc."
 
 [pages.inbounds.stream.general]
 "request" = "Pedido"

+ 1 - 1
web/translation/translate.fa_IR.toml

@@ -266,7 +266,7 @@
 "trafficGetError" = "خطا در دریافت ترافیک‌ها"
 "getNewX25519CertError" = "خطا در دریافت گواهی X25519."
 "getNewmldsa65Error" = "خطا در دریافت گواهی mldsa65."
-"getNewmlkem768Error" = "خطا در دریافت گواهی mlkem768."
+"getNewVlessEncError" = "خطا در دریافت گواهی VlessEnc."
 
 [pages.inbounds.stream.general]
 "request" = "درخواست"

+ 1 - 1
web/translation/translate.id_ID.toml

@@ -266,7 +266,7 @@
 "trafficGetError" = "Gagal mendapatkan data lalu lintas"
 "getNewX25519CertError" = "Terjadi kesalahan saat mendapatkan sertifikat X25519."
 "getNewmldsa65Error" = "Terjadi kesalahan saat mendapatkan sertifikat mldsa65."
-"getNewmlkem768Error" = "Terjadi kesalahan saat mendapatkan sertifikat mlkem768."
+"getNewVlessEncError" = "Terjadi kesalahan saat mendapatkan sertifikat VlessEnc."
 
 [pages.inbounds.stream.general]
 "request" = "Permintaan"

+ 1 - 1
web/translation/translate.ja_JP.toml

@@ -266,7 +266,7 @@
 "trafficGetError" = "トラフィックの取得中にエラーが発生しました"
 "getNewX25519CertError" = "X25519証明書の取得中にエラーが発生しました。"
 "getNewmldsa65Error" = "mldsa65証明書の取得中にエラーが発生しました。"
-"getNewmlkem768Error" = "mlkem768証明書の取得中にエラーが発生しました。"
+"getNewVlessEncError" = "VlessEnc証明書の取得中にエラーが発生しました。"
 
 [pages.inbounds.stream.general]
 "request" = "リクエスト"

+ 1 - 1
web/translation/translate.pt_BR.toml

@@ -266,7 +266,7 @@
 "trafficGetError" = "Erro ao obter tráfegos"
 "getNewX25519CertError" = "Erro ao obter o certificado X25519."
 "getNewmldsa65Error" = "Erro ao obter o certificado mldsa65."
-"getNewmlkem768Error" = "Erro ao obter o certificado mlkem768."
+"getNewVlessEncError" = "Erro ao obter o certificado VlessEnc."
 
 [pages.inbounds.stream.general]
 "request" = "Requisição"

+ 1 - 1
web/translation/translate.ru_RU.toml

@@ -266,7 +266,7 @@
 "trafficGetError" = "Ошибка получения данных о трафике"
 "getNewX25519CertError" = "Ошибка при получении сертификата X25519."
 "getNewmldsa65Error" = "Ошибка при получении сертификата mldsa65."
-"getNewmlkem768Error" = "Ошибка при получении сертификата mlkem768."
+"getNewVlessEncError" = "Ошибка при получении сертификата VlessEnc."
 
 [pages.inbounds.stream.general]
 "request" = "Запрос"

+ 1 - 1
web/translation/translate.tr_TR.toml

@@ -266,7 +266,7 @@
 "trafficGetError" = "Trafik bilgisi alınırken hata oluştu"
 "getNewX25519CertError" = "X25519 sertifikası alınırken hata oluştu."
 "getNewmldsa65Error" = "mldsa65 sertifikası alınırken hata oluştu."
-"getNewmlkem768Error" = "mlkem768 sertifikası alınırken hata oluştu."
+"getNewVlessEncError" = "VlessEnc sertifikası alınırken hata oluştu."
 
 [pages.inbounds.stream.general]
 "request" = "İstek"

+ 1 - 1
web/translation/translate.uk_UA.toml

@@ -266,7 +266,7 @@
 "trafficGetError" = "Помилка отримання даних про трафік"
 "getNewX25519CertError" = "Помилка при отриманні сертифіката X25519."
 "getNewmldsa65Error" = "Помилка при отриманні сертифіката mldsa65."
-"getNewmlkem768Error" = "Помилка при отриманні сертифіката mlkem768."
+"getNewVlessEncError" = "Помилка при отриманні сертифіката VlessEnc."
 
 [pages.inbounds.stream.general]
 "request" = "Запит"

+ 1 - 1
web/translation/translate.vi_VN.toml

@@ -266,7 +266,7 @@
 "trafficGetError" = "Lỗi khi lấy thông tin lưu lượng"
 "getNewX25519CertError" = "Lỗi khi lấy chứng chỉ X25519."
 "getNewmldsa65Error" = "Lỗi khi lấy chứng chỉ mldsa65."
-"getNewmlkem768Error" = "Lỗi khi lấy chứng chỉ mlkem768."
+"getNewVlessEncError" = "Lỗi khi lấy chứng chỉ VlessEnc."
 
 [pages.inbounds.stream.general]
 "request" = "Lời yêu cầu"

+ 1 - 1
web/translation/translate.zh_CN.toml

@@ -266,7 +266,7 @@
 "trafficGetError" = "获取流量数据时出错"
 "getNewX25519CertError" = "获取X25519证书时出错。"
 "getNewmldsa65Error" = "获取mldsa65证书时出错。"
-"getNewmlkem768Error" = "获取mlkem768证书时出错。"
+"getNewVlessEncError" = "获取VlessEnc证书时出错。"
 
 [pages.inbounds.stream.general]
 "request" = "请求"

+ 1 - 1
web/translation/translate.zh_TW.toml

@@ -266,7 +266,7 @@
 "trafficGetError" = "取得流量資料時發生錯誤"
 "getNewX25519CertError" = "取得X25519憑證時發生錯誤。"
 "getNewmldsa65Error" = "取得mldsa65憑證時發生錯誤。"
-"getNewmlkem768Error" = "取得mlkem768憑證時發生錯誤。"
+"getNewVlessEncError" = "取得VlessEnc憑證時發生錯誤。"
 
 [pages.inbounds.stream.general]
 "request" = "請求"