From 44b876ba0e36c4480d78202f0cee04768e3a3e79 Mon Sep 17 00:00:00 2001 From: nyne Date: Mon, 1 Sep 2025 17:40:57 +0800 Subject: [PATCH] add RealUserMiddleware and update resource retrieval to track real users --- main.go | 2 ++ server/api/resource.go | 2 +- server/middleware/frontend_middleware.go | 2 +- server/middleware/real_user_middleware.go | 17 +++++++++++++++++ server/service/resource.go | 13 ++++++++----- 5 files changed, 29 insertions(+), 7 deletions(-) create mode 100644 server/middleware/real_user_middleware.go diff --git a/main.go b/main.go index 29e0321..1d97f6f 100644 --- a/main.go +++ b/main.go @@ -21,6 +21,8 @@ func main() { app.Use(middleware.ErrorHandler) + app.Use(middleware.RealUserMiddleware) + app.Use(middleware.JwtMiddleware) app.Use(middleware.FrontendMiddleware) diff --git a/server/api/resource.go b/server/api/resource.go index 239bf08..f58bfdf 100644 --- a/server/api/resource.go +++ b/server/api/resource.go @@ -56,7 +56,7 @@ func handleGetResource(c fiber.Ctx) error { return model.NewRequestError("Invalid resource ID") } host := c.Hostname() - resource, err := service.GetResource(uint(id), host) + resource, err := service.GetResource(uint(id), host, c) if err != nil { return err } diff --git a/server/middleware/frontend_middleware.go b/server/middleware/frontend_middleware.go index 69cca38..ffeafca 100644 --- a/server/middleware/frontend_middleware.go +++ b/server/middleware/frontend_middleware.go @@ -79,7 +79,7 @@ func serveIndexHtml(c fiber.Ctx) error { idStr := strings.TrimPrefix(path, "/resources/") id, err := strconv.Atoi(idStr) if err == nil { - r, err := service.GetResource(uint(id), c.Hostname()) + r, err := service.GetResource(uint(id), c.Hostname(), c) if err == nil { if len(r.Images) > 0 { preview = fmt.Sprintf("%s/api/image/%d", serverBaseURL, r.Images[0].ID) diff --git a/server/middleware/real_user_middleware.go b/server/middleware/real_user_middleware.go new file mode 100644 index 0000000..af5b34b --- /dev/null +++ b/server/middleware/real_user_middleware.go @@ -0,0 +1,17 @@ +package middleware + +import ( + "strings" + + "github.com/gofiber/fiber/v3" +) + +func RealUserMiddleware(c fiber.Ctx) error { + userAgent := c.Get("User-Agent") + if strings.Contains(userAgent, "Mozilla") || strings.Contains(userAgent, "AppleWebKit") { + c.Locals("real_user", true) + } else { + c.Locals("real_user", false) + } + return c.Next() +} diff --git a/server/service/resource.go b/server/service/resource.go index a0710d6..6913d5e 100644 --- a/server/service/resource.go +++ b/server/service/resource.go @@ -8,6 +8,7 @@ import ( "strconv" "strings" + "github.com/gofiber/fiber/v3" "github.com/gofiber/fiber/v3/log" "gorm.io/gorm" @@ -122,14 +123,16 @@ func parseResourceIfPresent(line string, host string) *model.ResourceView { return &v } -func GetResource(id uint, host string) (*model.ResourceDetailView, error) { +func GetResource(id uint, host string, ctx fiber.Ctx) (*model.ResourceDetailView, error) { r, err := dao.GetResourceByID(id) if err != nil { return nil, err } - err = dao.AddResourceViewCount(id) - if err != nil { - log.Error("AddResourceViewCount error: ", err) + if ctx != nil && ctx.Locals("real_user") == true { + err = dao.AddResourceViewCount(id) + if err != nil { + log.Error("AddResourceViewCount error: ", err) + } } v := r.ToDetailView() if host != "" { @@ -177,7 +180,7 @@ func DeleteResource(uid, id uint) error { return model.NewUnAuthorizedError("You have not permission to delete this resource") } } - r, err := GetResource(id, "") + r, err := GetResource(id, "", nil) if err != nil { return err }