From 419ea63dd0f7f2a693dbf674e411782301e06dc6 Mon Sep 17 00:00:00 2001 From: fgsfds <4870330+fgsfds@users.noreply.github.com> Date: Tue, 5 Aug 2025 15:10:14 +0500 Subject: Added filters to the xray logs viewer (#3314) * added filters to xray logs viewer * better freedom/blackhole tags handling * better freedom/blackhole tags handling 2 * fix comments * fix comments 2 --- web/controller/server.go | 43 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) (limited to 'web/controller') diff --git a/web/controller/server.go b/web/controller/server.go index dd001f5e..17b25cdc 100644 --- a/web/controller/server.go +++ b/web/controller/server.go @@ -17,7 +17,8 @@ var filenameRegex = regexp.MustCompile(`^[a-zA-Z0-9_\-.]+$`) type ServerController struct { BaseController - serverService service.ServerService + serverService service.ServerService + settingService service.SettingService lastStatus *service.Status lastGetStatusTime time.Time @@ -137,7 +138,45 @@ func (a *ServerController) getLogs(c *gin.Context) { func (a *ServerController) getXrayLogs(c *gin.Context) { count := c.Param("count") - logs := a.serverService.GetXrayLogs(count) + filter := c.PostForm("filter") + showDirect := c.PostForm("showDirect") + showBlocked := c.PostForm("showBlocked") + showProxy := c.PostForm("showProxy") + + var freedoms []string + var blackholes []string + + //getting tags for freedom and blackhole outbounds + config, err := a.settingService.GetDefaultXrayConfig() + if err == nil && config != nil { + if cfgMap, ok := config.(map[string]interface{}); ok { + if outbounds, ok := cfgMap["outbounds"].([]interface{}); ok { + for _, outbound := range outbounds { + if obMap, ok := outbound.(map[string]interface{}); ok { + switch obMap["protocol"] { + case "freedom": + if tag, ok := obMap["tag"].(string); ok { + freedoms = append(freedoms, tag) + } + case "blackhole": + if tag, ok := obMap["tag"].(string); ok { + blackholes = append(blackholes, tag) + } + } + } + } + } + } + } + + if len(freedoms) == 0 { + freedoms = []string{"direct"} + } + if len(blackholes) == 0 { + blackholes = []string{"blocked"} + } + + logs := a.serverService.GetXrayLogs(count, filter, showDirect, showBlocked, showProxy, freedoms, blackholes) jsonObj(c, logs, nil) } -- cgit v1.2.3