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 {