From b9ef8f457218a7cfa611735e4ad8b116c9bff61a Mon Sep 17 00:00:00 2001 From: Chang lue Tsen Date: Fri, 5 Sep 2025 04:28:05 -0400 Subject: [PATCH] feat(middleware): enhance user agent handling by querying client list in PanDomainMiddleware --- internal/handler/subscribe.go | 13 +++++++++++++ internal/middleware/panDomainMiddleware.go | 13 +++++++++++++ 2 files changed, 26 insertions(+) diff --git a/internal/handler/subscribe.go b/internal/handler/subscribe.go index a8a5acb..d5cbf88 100644 --- a/internal/handler/subscribe.go +++ b/internal/handler/subscribe.go @@ -8,6 +8,7 @@ import ( "github.com/perfect-panel/server/internal/logic/subscribe" "github.com/perfect-panel/server/internal/svc" "github.com/perfect-panel/server/internal/types" + "github.com/perfect-panel/server/pkg/logger" "github.com/perfect-panel/server/pkg/tool" ) @@ -30,6 +31,18 @@ func SubscribeHandler(svcCtx *svc.ServiceContext) func(c *gin.Context) { return } clientUserAgents := tool.RemoveDuplicateElements(strings.Split(svcCtx.Config.Subscribe.UserAgentList, "\n")...) + + // query client list + clients, err := svcCtx.ClientModel.List(c.Request.Context()) + if err != nil { + logger.Errorw("[PanDomainMiddleware] Query client list failed", logger.Field("error", err.Error())) + } + for _, item := range clients { + u := strings.ToLower(item.UserAgent) + u = strings.Trim(u, " ") + clientUserAgents = append(clientUserAgents, u) + } + var allow = false for _, keyword := range clientUserAgents { keyword = strings.Trim(keyword, " ") diff --git a/internal/middleware/panDomainMiddleware.go b/internal/middleware/panDomainMiddleware.go index 4447336..518c787 100644 --- a/internal/middleware/panDomainMiddleware.go +++ b/internal/middleware/panDomainMiddleware.go @@ -8,6 +8,7 @@ import ( "github.com/perfect-panel/server/internal/logic/subscribe" "github.com/perfect-panel/server/internal/svc" "github.com/perfect-panel/server/internal/types" + "github.com/perfect-panel/server/pkg/logger" "github.com/perfect-panel/server/pkg/tool" ) @@ -26,6 +27,18 @@ func PanDomainMiddleware(svc *svc.ServiceContext) func(c *gin.Context) { } browserKeywords := tool.RemoveDuplicateElements(strings.Split(svc.Config.Subscribe.UserAgentList, "\n")...) var allow = false + + // query client list + clients, err := svc.ClientModel.List(c.Request.Context()) + if err != nil { + logger.Errorw("[PanDomainMiddleware] Query client list failed", logger.Field("error", err.Error())) + } + for _, item := range clients { + u := strings.ToLower(item.UserAgent) + u = strings.Trim(u, " ") + browserKeywords = append(browserKeywords, u) + } + for _, keyword := range browserKeywords { keyword = strings.ToLower(strings.Trim(keyword, " ")) if keyword == "" {