From 01f984e054fe3c6e06aeb9b947ef009fbfe5db65 Mon Sep 17 00:00:00 2001 From: Alireza Ahmadi Date: Mon, 4 Aug 2025 16:45:09 +0200 Subject: [PATCH 1/8] add dokodemo port mapping --- web/assets/js/model/inbound.js | 4 ++++ web/html/form/protocol/dokodemo.html | 13 +++++++++++++ web/translation/translate.ar_EG.toml | 1 + web/translation/translate.en_US.toml | 1 + web/translation/translate.es_ES.toml | 1 + web/translation/translate.fa_IR.toml | 1 + web/translation/translate.id_ID.toml | 1 + web/translation/translate.ja_JP.toml | 1 + web/translation/translate.pt_BR.toml | 1 + web/translation/translate.ru_RU.toml | 1 + web/translation/translate.tr_TR.toml | 1 + web/translation/translate.uk_UA.toml | 1 + web/translation/translate.vi_VN.toml | 1 + web/translation/translate.zh_CN.toml | 1 + web/translation/translate.zh_TW.toml | 1 + 15 files changed, 30 insertions(+) diff --git a/web/assets/js/model/inbound.js b/web/assets/js/model/inbound.js index da5522a5..a2f85194 100644 --- a/web/assets/js/model/inbound.js +++ b/web/assets/js/model/inbound.js @@ -2312,12 +2312,14 @@ Inbound.DokodemoSettings = class extends Inbound.Settings { protocol, address, port, + portMap = [], network = 'tcp,udp', followRedirect = false ) { super(protocol); this.address = address; this.port = port; + this.portMap = portMap; this.network = network; this.followRedirect = followRedirect; } @@ -2327,6 +2329,7 @@ Inbound.DokodemoSettings = class extends Inbound.Settings { Protocols.DOKODEMO, json.address, json.port, + XrayCommonClass.toHeaders(json.portMap), json.network, json.followRedirect, ); @@ -2336,6 +2339,7 @@ Inbound.DokodemoSettings = class extends Inbound.Settings { return { address: this.address, port: this.port, + portMap: XrayCommonClass.toV2Headers(this.portMap), network: this.network, followRedirect: this.followRedirect, }; diff --git a/web/html/form/protocol/dokodemo.html b/web/html/form/protocol/dokodemo.html index 70ffe7e0..267dcf4e 100644 --- a/web/html/form/protocol/dokodemo.html +++ b/web/html/form/protocol/dokodemo.html @@ -6,6 +6,19 @@ + + + + + + + + + + + - + + + TCP,UDP diff --git a/web/translation/translate.ar_EG.toml b/web/translation/translate.ar_EG.toml index c3748499..3c2fc04f 100644 --- a/web/translation/translate.ar_EG.toml +++ b/web/translation/translate.ar_EG.toml @@ -158,6 +158,7 @@ "remark" = "ملاحظة" "protocol" = "بروتوكول" "port" = "بورت" +"portMap" = "خريطة البورت" "traffic" = "الترافيك" "details" = "تفاصيل" "transportConfig" = "نقل" diff --git a/web/translation/translate.en_US.toml b/web/translation/translate.en_US.toml index eb2389dd..4ddef0da 100644 --- a/web/translation/translate.en_US.toml +++ b/web/translation/translate.en_US.toml @@ -158,6 +158,7 @@ "remark" = "Remark" "protocol" = "Protocol" "port" = "Port" +"portMap" = "Port Mapping" "traffic" = "Traffic" "details" = "Details" "transportConfig" = "Transport" diff --git a/web/translation/translate.es_ES.toml b/web/translation/translate.es_ES.toml index e682bd38..51a5aea8 100644 --- a/web/translation/translate.es_ES.toml +++ b/web/translation/translate.es_ES.toml @@ -158,6 +158,7 @@ "remark" = "Notas" "protocol" = "Protocolo" "port" = "Puerto" +"portMap" = "Puertos de Destino" "traffic" = "Tráfico" "details" = "Detalles" "transportConfig" = "Transporte" diff --git a/web/translation/translate.fa_IR.toml b/web/translation/translate.fa_IR.toml index 4d3aa6ae..35100f66 100644 --- a/web/translation/translate.fa_IR.toml +++ b/web/translation/translate.fa_IR.toml @@ -158,6 +158,7 @@ "remark" = "نام" "protocol" = "پروتکل" "port" = "پورت" +"portMap" = "پورت‌های نظیر" "traffic" = "ترافیک" "details" = "توضیحات" "transportConfig" = "نحوه اتصال" diff --git a/web/translation/translate.id_ID.toml b/web/translation/translate.id_ID.toml index bc36f046..21e87dd7 100644 --- a/web/translation/translate.id_ID.toml +++ b/web/translation/translate.id_ID.toml @@ -158,6 +158,7 @@ "remark" = "Catatan" "protocol" = "Protokol" "port" = "Port" +"portMap" = "Port Mapping" "traffic" = "Traffic" "details" = "Rincian" "transportConfig" = "Transport" diff --git a/web/translation/translate.ja_JP.toml b/web/translation/translate.ja_JP.toml index c4461fcf..4bc620c6 100644 --- a/web/translation/translate.ja_JP.toml +++ b/web/translation/translate.ja_JP.toml @@ -158,6 +158,7 @@ "remark" = "備考" "protocol" = "プロトコル" "port" = "ポート" +"portMap" = "ポートマッピング" "traffic" = "トラフィック" "details" = "詳細情報" "transportConfig" = "トランスポート設定" diff --git a/web/translation/translate.pt_BR.toml b/web/translation/translate.pt_BR.toml index a59fb81c..a81f95fb 100644 --- a/web/translation/translate.pt_BR.toml +++ b/web/translation/translate.pt_BR.toml @@ -158,6 +158,7 @@ "remark" = "Observação" "protocol" = "Protocolo" "port" = "Porta" +"portMap" = "Porta Mapeada" "traffic" = "Tráfego" "details" = "Detalhes" "transportConfig" = "Transporte" diff --git a/web/translation/translate.ru_RU.toml b/web/translation/translate.ru_RU.toml index 95ea9509..114ada89 100644 --- a/web/translation/translate.ru_RU.toml +++ b/web/translation/translate.ru_RU.toml @@ -158,6 +158,7 @@ "remark" = "Примечание" "protocol" = "Протокол" "port" = "Порт" +"portMap" = "Порт-маппинг" "traffic" = "Трафик" "details" = "Подробнее" "transportConfig" = "Транспорт" diff --git a/web/translation/translate.tr_TR.toml b/web/translation/translate.tr_TR.toml index 95d27f2c..319b2a9e 100644 --- a/web/translation/translate.tr_TR.toml +++ b/web/translation/translate.tr_TR.toml @@ -158,6 +158,7 @@ "remark" = "Açıklama" "protocol" = "Protokol" "port" = "Port" +"portMap" = "Port Atama" "traffic" = "Trafik" "details" = "Detaylar" "transportConfig" = "Taşıma" diff --git a/web/translation/translate.uk_UA.toml b/web/translation/translate.uk_UA.toml index 6847b8a0..46edca82 100644 --- a/web/translation/translate.uk_UA.toml +++ b/web/translation/translate.uk_UA.toml @@ -158,6 +158,7 @@ "remark" = "Примітка" "protocol" = "Протокол" "port" = "Порт" +"portMap" = "Порт-перехід" "traffic" = "Трафік" "details" = "Деталі" "transportConfig" = "Транспорт" diff --git a/web/translation/translate.vi_VN.toml b/web/translation/translate.vi_VN.toml index 4c3bd99e..c73dc383 100644 --- a/web/translation/translate.vi_VN.toml +++ b/web/translation/translate.vi_VN.toml @@ -158,6 +158,7 @@ "remark" = "Chú thích" "protocol" = "Giao thức" "port" = "Cổng" +"portMap" = "Cổng tạo" "traffic" = "Lưu lượng" "details" = "Chi tiết" "transportConfig" = "Giao vận" diff --git a/web/translation/translate.zh_CN.toml b/web/translation/translate.zh_CN.toml index 6172c32c..ebe57f64 100644 --- a/web/translation/translate.zh_CN.toml +++ b/web/translation/translate.zh_CN.toml @@ -158,6 +158,7 @@ "remark" = "备注" "protocol" = "协议" "port" = "端口" +"portMap" = "端口映射" "traffic" = "流量" "details" = "详细信息" "transportConfig" = "传输配置" diff --git a/web/translation/translate.zh_TW.toml b/web/translation/translate.zh_TW.toml index beb0c34d..694cd9f3 100644 --- a/web/translation/translate.zh_TW.toml +++ b/web/translation/translate.zh_TW.toml @@ -158,6 +158,7 @@ "remark" = "備註" "protocol" = "協議" "port" = "埠" +"portMap" = "埠映射" "traffic" = "流量" "details" = "詳細資訊" "transportConfig" = "傳輸配置" From baf6fdd29d47913d4d57813e558f0fa10cc24b68 Mon Sep 17 00:00:00 2001 From: Sanaei Date: Mon, 4 Aug 2025 17:16:11 +0200 Subject: [PATCH 2/8] fix portMap json (#3312) Co-authored-by: Alireza Ahmadi --- web/assets/js/model/inbound.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/assets/js/model/inbound.js b/web/assets/js/model/inbound.js index a2f85194..6d2a77a4 100644 --- a/web/assets/js/model/inbound.js +++ b/web/assets/js/model/inbound.js @@ -2339,7 +2339,7 @@ Inbound.DokodemoSettings = class extends Inbound.Settings { return { address: this.address, port: this.port, - portMap: XrayCommonClass.toV2Headers(this.portMap), + portMap: XrayCommonClass.toV2Headers(this.portMap, false), network: this.network, followRedirect: this.followRedirect, }; From 5e404581161b976f0a3e8db3fe6347d36bcea3a0 Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Mon, 4 Aug 2025 18:01:32 +0200 Subject: [PATCH 3/8] fix: simplify error handling --- web/controller/inbound.go | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/web/controller/inbound.go b/web/controller/inbound.go index a89f224f..851b4b6f 100644 --- a/web/controller/inbound.go +++ b/web/controller/inbound.go @@ -108,8 +108,8 @@ func (a *InboundController) addInbound(c *gin.Context) { jsonMsg(c, I18nWeb(c, "somethingWentWrong"), err) return } - jsonMsgObj(c, I18nWeb(c, "pages.inbounds.toasts.inboundCreateSuccess"), inbound, err) - if err == nil && needRestart { + jsonMsgObj(c, I18nWeb(c, "pages.inbounds.toasts.inboundCreateSuccess"), inbound, nil) + if needRestart { a.xrayService.SetToNeedRestart() } } @@ -126,8 +126,8 @@ func (a *InboundController) delInbound(c *gin.Context) { jsonMsg(c, I18nWeb(c, "somethingWentWrong"), err) return } - jsonMsgObj(c, I18nWeb(c, "pages.inbounds.toasts.inboundDeleteSuccess"), id, err) - if err == nil && needRestart { + jsonMsgObj(c, I18nWeb(c, "pages.inbounds.toasts.inboundDeleteSuccess"), id, nil) + if needRestart { a.xrayService.SetToNeedRestart() } } @@ -152,8 +152,8 @@ func (a *InboundController) updateInbound(c *gin.Context) { jsonMsg(c, I18nWeb(c, "somethingWentWrong"), err) return } - jsonMsgObj(c, I18nWeb(c, "pages.inbounds.toasts.inboundUpdateSuccess"), inbound, err) - if err == nil && needRestart { + jsonMsgObj(c, I18nWeb(c, "pages.inbounds.toasts.inboundUpdateSuccess"), inbound, nil) + if needRestart { a.xrayService.SetToNeedRestart() } } @@ -342,25 +342,25 @@ func (a *InboundController) onlines(c *gin.Context) { func (a *InboundController) updateClientTraffic(c *gin.Context) { email := c.Param("email") - + // Define the request structure for traffic update type TrafficUpdateRequest struct { Upload int64 `json:"upload"` Download int64 `json:"download"` } - + var request TrafficUpdateRequest err := c.ShouldBindJSON(&request) if err != nil { jsonMsg(c, I18nWeb(c, "pages.inbounds.toasts.inboundUpdateSuccess"), err) return } - + err = a.inboundService.UpdateClientTrafficByEmail(email, request.Upload, request.Download) if err != nil { jsonMsg(c, I18nWeb(c, "somethingWentWrong"), err) return } - + jsonMsg(c, I18nWeb(c, "pages.inbounds.toasts.inboundClientUpdateSuccess"), nil) } From 05e60af283e4cb0e7c290b1fafd8f3d54028bda8 Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Mon, 4 Aug 2025 18:23:37 +0200 Subject: [PATCH 4/8] fix: IPLimitlog display --- web/html/modals/inbound_info_modal.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/html/modals/inbound_info_modal.html b/web/html/modals/inbound_info_modal.html index c9c36398..3807be34 100644 --- a/web/html/modals/inbound_info_modal.html +++ b/web/html/modals/inbound_info_modal.html @@ -199,7 +199,7 @@ [[ infoModal.clientSettings.limitIp ]] - + {{ i18n "pages.inbounds.IPLimitlog" }} [[ infoModal.clientIps ]] From 957f3dbb5449475f330d863171134b56e37da4ad Mon Sep 17 00:00:00 2001 From: fgsfds <4870330+fgsfds@users.noreply.github.com> Date: Mon, 4 Aug 2025 21:47:48 +0500 Subject: [PATCH 5/8] Added xray access log viewer (#3309) * added xray access log viewer * made modal window width adaptive * hide logs button if xray logs are disabled --- web/controller/server.go | 7 +++ web/html/index.html | 114 ++++++++++++++++++++++++++++++++++++++- web/service/server.go | 32 +++++++++++ 3 files changed, 151 insertions(+), 2 deletions(-) diff --git a/web/controller/server.go b/web/controller/server.go index 8a7a2198..dd001f5e 100644 --- a/web/controller/server.go +++ b/web/controller/server.go @@ -46,6 +46,7 @@ func (a *ServerController) initRouter(g *gin.RouterGroup) { g.POST("/installXray/:version", a.installXray) g.POST("/updateGeofile/:fileName", a.updateGeofile) g.POST("/logs/:count", a.getLogs) + g.POST("/xraylogs/:count", a.getXrayLogs) g.POST("/getConfigJson", a.getConfigJson) g.GET("/getDb", a.getDb) g.POST("/importDB", a.importDB) @@ -134,6 +135,12 @@ func (a *ServerController) getLogs(c *gin.Context) { jsonObj(c, logs, nil) } +func (a *ServerController) getXrayLogs(c *gin.Context) { + count := c.Param("count") + logs := a.serverService.GetXrayLogs(count) + jsonObj(c, logs, nil) +} + func (a *ServerController) getConfigJson(c *gin.Context) { configJson, err := a.serverService.GetConfigJson() if err != nil { diff --git a/web/html/index.html b/web/html/index.html index db678cd6..4089e6a6 100644 --- a/web/html/index.html +++ b/web/html/index.html @@ -167,7 +167,10 @@ {{ i18n "pages.index.xrayErrorPopoverTitle" }} - + + + + @@ -179,6 +182,10 @@