From 59330cb3a2dc988d5ccfc7081c0da56d8a18cade Mon Sep 17 00:00:00 2001
From: serogaq <36307024+serogaq@users.noreply.github.com>
Date: Wed, 13 Nov 2024 12:47:52 +0300
Subject: [PATCH 1/5] 2 / GetLogsSniffedDomains
---
logger/logger.go | 17 +++++++++++++++++
web/controller/server.go | 7 +++++++
web/service/server.go | 9 +++++++++
3 files changed, 33 insertions(+)
diff --git a/logger/logger.go b/logger/logger.go
index 35c5c0ac..2d23abaf 100644
--- a/logger/logger.go
+++ b/logger/logger.go
@@ -4,6 +4,7 @@ import (
"fmt"
"os"
"time"
+ "strings"
"github.com/op/go-logging"
)
@@ -126,3 +127,19 @@ func GetLogs(c int, level string) []string {
}
return output
}
+
+func GetLogsSniffedDomains(c int) []string {
+ var output []string
+ logLevel, _ := logging.LogLevel("info")
+
+ for i := len(logBuffer) - 1; i >= 0 && len(output) <= c; i-- {
+ if logBuffer[i].level <= logLevel && strings.Contains(logBuffer[i].log, "sniffed domain: ") {
+ index := strings.LastIndex(log, ": ")
+ if index != -1 {
+ domain := log[index+2:]
+ output = append(output, fmt.Sprintf("%s - %s", logBuffer[i].time, domain))
+ }
+ }
+ }
+ return output
+}
diff --git a/web/controller/server.go b/web/controller/server.go
index fc7756ba..4e2d752d 100644
--- a/web/controller/server.go
+++ b/web/controller/server.go
@@ -45,6 +45,7 @@ func (a *ServerController) initRouter(g *gin.RouterGroup) {
g.POST("/restartXrayService", a.restartXrayService)
g.POST("/installXray/:version", a.installXray)
g.POST("/logs/:count", a.getLogs)
+ g.GET("/logs-sniffed/:count", a.getLogsSniffedDomains)
g.POST("/getConfigJson", a.getConfigJson)
g.GET("/getDb", a.getDb)
g.POST("/importDB", a.importDB)
@@ -125,6 +126,12 @@ func (a *ServerController) getLogs(c *gin.Context) {
jsonObj(c, logs, nil)
}
+func (a *ServerController) getLogsSniffedDomains(c *gin.Context) {
+ count := c.Param("count")
+ logs := a.serverService.GetLogsSniffedDomains(count)
+ jsonObj(c, logs, nil)
+}
+
func (a *ServerController) getConfigJson(c *gin.Context) {
configJson, err := a.serverService.GetConfigJson()
if err != nil {
diff --git a/web/service/server.go b/web/service/server.go
index eab5d700..63158252 100644
--- a/web/service/server.go
+++ b/web/service/server.go
@@ -442,6 +442,15 @@ func (s *ServerService) GetLogs(count string, level string, syslog string) []str
return lines
}
+func (s *ServerService) GetLogsSniffedDomains(count string) []string {
+ c, _ := strconv.Atoi(count)
+ var lines []string
+
+ lines = logger.GetLogsSniffedDomains(c)
+
+ return lines
+}
+
func (s *ServerService) GetConfigJson() (interface{}, error) {
config, err := s.xrayService.GetXrayConfig()
if err != nil {
From b484bfd4cbcc8e22f3c728f05e8ed098bd565828 Mon Sep 17 00:00:00 2001
From: serogaq <36307024+serogaq@users.noreply.github.com>
Date: Wed, 13 Nov 2024 13:00:09 +0300
Subject: [PATCH 2/5] 2 / fix
---
logger/logger.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/logger/logger.go b/logger/logger.go
index 2d23abaf..5ef0a5c9 100644
--- a/logger/logger.go
+++ b/logger/logger.go
@@ -134,9 +134,9 @@ func GetLogsSniffedDomains(c int) []string {
for i := len(logBuffer) - 1; i >= 0 && len(output) <= c; i-- {
if logBuffer[i].level <= logLevel && strings.Contains(logBuffer[i].log, "sniffed domain: ") {
- index := strings.LastIndex(log, ": ")
+ index := strings.LastIndex(logBuffer[i].log, ": ")
if index != -1 {
- domain := log[index+2:]
+ domain := logBuffer[i].log[index+2:]
output = append(output, fmt.Sprintf("%s - %s", logBuffer[i].time, domain))
}
}
From e386ef62323ec3f2a41520798cb4dd348dbbf457 Mon Sep 17 00:00:00 2001
From: serogaq <36307024+serogaq@users.noreply.github.com>
Date: Wed, 13 Nov 2024 13:21:56 +0300
Subject: [PATCH 3/5] 2 / logs-blocked
---
logger/logger.go | 16 ++++++++++++++++
web/controller/server.go | 7 +++++++
web/service/server.go | 9 +++++++++
3 files changed, 32 insertions(+)
diff --git a/logger/logger.go b/logger/logger.go
index 5ef0a5c9..52b1977a 100644
--- a/logger/logger.go
+++ b/logger/logger.go
@@ -143,3 +143,19 @@ func GetLogsSniffedDomains(c int) []string {
}
return output
}
+
+func GetLogsBlockedDomains(c int) []string {
+ var output []string
+ logLevel, _ := logging.LogLevel("info")
+
+ for i := len(logBuffer) - 1; i >= 0 && len(output) <= c; i-- {
+ if logBuffer[i].level <= logLevel && strings.Contains(logBuffer[i].log, "[blocked] for ") {
+ index := strings.LastIndex(logBuffer[i].log, "for [")
+ if index != -1 {
+ domain := strings.Replace(logBuffer[i].log[index+5:], "]", "", -1)
+ output = append(output, fmt.Sprintf("%s - %s", logBuffer[i].time, domain))
+ }
+ }
+ }
+ return output
+}
diff --git a/web/controller/server.go b/web/controller/server.go
index 4e2d752d..15ccb258 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("/logs/:count", a.getLogs)
g.GET("/logs-sniffed/:count", a.getLogsSniffedDomains)
+ g.GET("/logs-blocked/:count", a.getLogsBlockedDomains)
g.POST("/getConfigJson", a.getConfigJson)
g.GET("/getDb", a.getDb)
g.POST("/importDB", a.importDB)
@@ -132,6 +133,12 @@ func (a *ServerController) getLogsSniffedDomains(c *gin.Context) {
jsonObj(c, logs, nil)
}
+func (a *ServerController) getLogsBlockedDomains(c *gin.Context) {
+ count := c.Param("count")
+ logs := a.serverService.GetLogsBlockedDomains(count)
+ jsonObj(c, logs, nil)
+}
+
func (a *ServerController) getConfigJson(c *gin.Context) {
configJson, err := a.serverService.GetConfigJson()
if err != nil {
diff --git a/web/service/server.go b/web/service/server.go
index 63158252..7f078bfd 100644
--- a/web/service/server.go
+++ b/web/service/server.go
@@ -451,6 +451,15 @@ func (s *ServerService) GetLogsSniffedDomains(count string) []string {
return lines
}
+func (s *ServerService) GetLogsBlockedDomains(count string) []string {
+ c, _ := strconv.Atoi(count)
+ var lines []string
+
+ lines = logger.GetLogsBlockedDomains(c)
+
+ return lines
+}
+
func (s *ServerService) GetConfigJson() (interface{}, error) {
config, err := s.xrayService.GetXrayConfig()
if err != nil {
From a300e131f36f8940af8096c2a993652172ab53ac Mon Sep 17 00:00:00 2001
From: serogaq <36307024+serogaq@users.noreply.github.com>
Date: Wed, 13 Nov 2024 14:06:55 +0300
Subject: [PATCH 4/5] 2 / log domains front
---
web/html/xui/index.html | 89 ++++++++++++++++++++++++++++
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.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 +
12 files changed, 100 insertions(+)
diff --git a/web/html/xui/index.html b/web/html/xui/index.html
index 2e57277a..dee6e8d3 100644
--- a/web/html/xui/index.html
+++ b/web/html/xui/index.html
@@ -125,6 +125,7 @@
{{ i18n "menu.link" }}:
{{ i18n "pages.index.logs" }}
+ {{ i18n "pages.index.logDomains" }}
{{ i18n "pages.index.config" }}
{{ i18n "pages.index.backup" }}
@@ -314,6 +315,43 @@
+ logDomainsModal.visible = false"
+ :class="themeSwitcher.currentTheme"
+ width="800px" footer="">
+
+ {{ i18n "pages.index.logDomains" }}
+
+
+
+
+
+
+
+ Few
+ Medium
+ Many
+
+
+ Sniffed
+ Blocked
+
+
+
+
+
+
+
+
+
+
@@ -490,6 +528,47 @@
},
};
+ const logDomainsModal = {
+ visible: false,
+ logs: [],
+ rows: 500,
+ type: 'sniffed',
+ loading: false,
+ show(logs) {
+ this.visible = true;
+ this.logs = logs;
+ this.formattedLogs = this.logs?.length > 0 ? this.formatLogs(this.logs, this.type) : "No Record...";
+ },
+ formatLogs(logs, type) {
+ let formattedLogs = '';
+
+ logs.forEach((log, index) => {
+ let [data, message] = log.split(" - ",2);
+ const parts = data.split(" ");
+ if(index>0) formattedLogs += '
';
+
+ if (parts.length === 2) {
+ const d = parts[0];
+ const t = parts[1];
+ formattedLogs += `${d} ${t}`;
+ } else {
+ formattedLogs += `${data}`;
+ }
+
+ if (message) {
+ message = ""+(type === 'sniffed' ? 'Sniffed' : 'Blocked')+": " + message;
+ }
+
+ formattedLogs += message ? ' - ' + message : '';
+ });
+
+ return formattedLogs;
+ },
+ hide() {
+ this.visible = false;
+ },
+ };
+
const backupModal = {
visible: false,
title: '',
@@ -595,6 +674,16 @@
await PromiseUtil.sleep(500);
logModal.loading = false;
},
+ async openLogDomains(){
+ logDomainsModal.loading = true;
+ const msg = await HttpUtil.get('server/logs-'.+(logDomainsModal.type==='blocked'?'blocked':'sniffed')+.'/'+logDomainsModal.rows);
+ if (!msg.success) {
+ return;
+ }
+ logDomainsModal.show(msg.obj);
+ await PromiseUtil.sleep(500);
+ logDomainsModal.loading = false;
+ },
async openConfig() {
this.loading(true);
const msg = await HttpUtil.post('server/getConfigJson');
diff --git a/web/translation/translate.en_US.toml b/web/translation/translate.en_US.toml
index 1d9d0067..0d8defd1 100644
--- a/web/translation/translate.en_US.toml
+++ b/web/translation/translate.en_US.toml
@@ -105,6 +105,7 @@
"xraySwitchVersionDialogDesc" = "Are you sure you want to change the Xray version to"
"dontRefresh" = "Installation is in progress, please do not refresh this page"
"logs" = "Logs"
+"logDomains" = "Log Domains"
"config" = "Config"
"backup" = "Backup & Restore"
"backupTitle" = "Database Backup & Restore"
diff --git a/web/translation/translate.es_ES.toml b/web/translation/translate.es_ES.toml
index b9af3272..76719614 100644
--- a/web/translation/translate.es_ES.toml
+++ b/web/translation/translate.es_ES.toml
@@ -105,6 +105,7 @@
"xraySwitchVersionDialogDesc" = "¿Estás seguro de que deseas cambiar la versión de Xray a"
"dontRefresh" = "La instalación está en progreso, por favor no actualices esta página."
"logs" = "Registros"
+"logDomains" = "Log Domains"
"config" = "Configuración"
"backup" = "Copia de Seguridad y Restauración"
"backupTitle" = "Copia de Seguridad y Restauración de la Base de Datos"
diff --git a/web/translation/translate.fa_IR.toml b/web/translation/translate.fa_IR.toml
index c7fad84e..538c2fbd 100644
--- a/web/translation/translate.fa_IR.toml
+++ b/web/translation/translate.fa_IR.toml
@@ -105,6 +105,7 @@
"xraySwitchVersionDialogDesc" = "آیا از تغییر نسخه مطمئن هستید؟"
"dontRefresh" = "در حال نصب، لطفا صفحه را رفرش نکنید"
"logs" = "گزارشها"
+"logDomains" = "Log Domains"
"config" = "پیکربندی"
"backup" = "پشتیبانگیری"
"backupTitle" = "پشتیبانگیری دیتابیس"
diff --git a/web/translation/translate.id_ID.toml b/web/translation/translate.id_ID.toml
index 85f8f967..cbaa0654 100644
--- a/web/translation/translate.id_ID.toml
+++ b/web/translation/translate.id_ID.toml
@@ -105,6 +105,7 @@
"xraySwitchVersionDialogDesc" = "Apakah Anda yakin ingin mengubah versi Xray menjadi"
"dontRefresh" = "Instalasi sedang berlangsung, harap jangan menyegarkan halaman ini"
"logs" = "Log"
+"logDomains" = "Log Domains"
"config" = "Konfigurasi"
"backup" = "Cadangan & Pulihkan"
"backupTitle" = "Cadangan & Pulihkan Database"
diff --git a/web/translation/translate.pt_BR.toml b/web/translation/translate.pt_BR.toml
index 5effdecb..b7a9d6d5 100644
--- a/web/translation/translate.pt_BR.toml
+++ b/web/translation/translate.pt_BR.toml
@@ -105,6 +105,7 @@
"xraySwitchVersionDialogDesc" = "Tem certeza de que deseja alterar a versão do Xray para"
"dontRefresh" = "Instalação em andamento, por favor não atualize a página"
"logs" = "Logs"
+"logDomains" = "Log Domains"
"config" = "Configuração"
"backup" = "Backup e Restauração"
"backupTitle" = "Backup e Restauração do Banco de Dados"
diff --git a/web/translation/translate.ru_RU.toml b/web/translation/translate.ru_RU.toml
index 91fd2853..acb2e402 100644
--- a/web/translation/translate.ru_RU.toml
+++ b/web/translation/translate.ru_RU.toml
@@ -105,6 +105,7 @@
"xraySwitchVersionDialogDesc" = "Вы точно хотите сменить версию Xray?"
"dontRefresh" = "Идёт установка. Пожалуйста, не обновляйте эту страницу"
"logs" = "Логи"
+"logDomains" = "Логи доменов"
"config" = "Конфигурация"
"backup" = "Бэкап и восстановление"
"backupTitle" = "База данных бэкапа и восстановления"
diff --git a/web/translation/translate.tr_TR.toml b/web/translation/translate.tr_TR.toml
index bee64b0f..a52a7ca1 100644
--- a/web/translation/translate.tr_TR.toml
+++ b/web/translation/translate.tr_TR.toml
@@ -105,6 +105,7 @@
"xraySwitchVersionDialogDesc" = "Xray sürümünü değiştirmek istediğinizden emin misiniz"
"dontRefresh" = "Kurulum devam ediyor, lütfen bu sayfayı yenilemeyin"
"logs" = "Günlükler"
+"logDomains" = "Log Domains"
"config" = "Yapılandırma"
"backup" = "Yedekle & Geri Yükle"
"backupTitle" = "Veritabanı Yedekleme & Geri Yükleme"
diff --git a/web/translation/translate.uk_UA.toml b/web/translation/translate.uk_UA.toml
index 791d2154..1a9db3ce 100644
--- a/web/translation/translate.uk_UA.toml
+++ b/web/translation/translate.uk_UA.toml
@@ -105,6 +105,7 @@
"xraySwitchVersionDialogDesc" = "Ви впевнені, що бажаєте змінити версію Xray на"
"dontRefresh" = "Інсталяція триває, будь ласка, не оновлюйте цю сторінку"
"logs" = "Журнали"
+"logDomains" = "Логи доменов"
"config" = "Конфігурація"
"backup" = "Резервне копіювання та відновлення"
"backupTitle" = "Резервне копіювання та відновлення бази даних"
diff --git a/web/translation/translate.vi_VN.toml b/web/translation/translate.vi_VN.toml
index cd750891..a39fa877 100644
--- a/web/translation/translate.vi_VN.toml
+++ b/web/translation/translate.vi_VN.toml
@@ -105,6 +105,7 @@
"xraySwitchVersionDialogDesc" = "Bạn có chắc chắn muốn chuyển đổi phiên bản Xray sang"
"dontRefresh" = "Đang tiến hành cài đặt, vui lòng không làm mới trang này."
"logs" = "Nhật ký"
+"logDomains" = "Log Domains"
"config" = "Cấu hình"
"backup" = "Sao lưu & Khôi phục"
"backupTitle" = "Sao lưu & Khôi phục Cơ sở dữ liệu"
diff --git a/web/translation/translate.zh_CN.toml b/web/translation/translate.zh_CN.toml
index b5f5cce1..f2ab78b3 100644
--- a/web/translation/translate.zh_CN.toml
+++ b/web/translation/translate.zh_CN.toml
@@ -105,6 +105,7 @@
"xraySwitchVersionDialogDesc" = "是否切换 Xray 版本至"
"dontRefresh" = "安装中,请勿刷新此页面"
"logs" = "日志"
+"logDomains" = "Log Domains"
"config" = "配置"
"backup" = "备份和恢复"
"backupTitle" = "备份和恢复数据库"
diff --git a/web/translation/translate.zh_TW.toml b/web/translation/translate.zh_TW.toml
index 466b2b82..79895314 100644
--- a/web/translation/translate.zh_TW.toml
+++ b/web/translation/translate.zh_TW.toml
@@ -105,6 +105,7 @@
"xraySwitchVersionDialogDesc" = "是否切換 Xray 版本至"
"dontRefresh" = "安裝中,請勿重新整理此頁面"
"logs" = "日誌"
+"logDomains" = "Log Domains"
"config" = "配置"
"backup" = "備份和恢復"
"backupTitle" = "備份和恢復資料庫"
From 4a72e9cae84f7594bc85bec4badcf6d9e6306cf6 Mon Sep 17 00:00:00 2001
From: serogaq <36307024+serogaq@users.noreply.github.com>
Date: Wed, 13 Nov 2024 14:25:46 +0300
Subject: [PATCH 5/5] 2 / fix
---
web/html/xui/index.html | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/web/html/xui/index.html b/web/html/xui/index.html
index dee6e8d3..50902b8a 100644
--- a/web/html/xui/index.html
+++ b/web/html/xui/index.html
@@ -331,7 +331,7 @@
-
Few
Medium
@@ -676,7 +676,7 @@
},
async openLogDomains(){
logDomainsModal.loading = true;
- const msg = await HttpUtil.get('server/logs-'.+(logDomainsModal.type==='blocked'?'blocked':'sniffed')+.'/'+logDomainsModal.rows);
+ const msg = await HttpUtil.get('server/logs-'+(logDomainsModal.type==='blocked'?'blocked':'sniffed')+'/'+logDomainsModal.rows);
if (!msg.success) {
return;
}