From e72600569ef1cdca552991f8d530d91da173b8f5 Mon Sep 17 00:00:00 2001 From: mircearoata Date: Tue, 13 Aug 2024 19:30:51 +0300 Subject: [PATCH] feat: handle HEAD on mod download endpoints (#83) --- nodes/mod.go | 6 ++++-- nodes/routes.go | 4 ++++ nodes/version.go | 6 ++++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/nodes/mod.go b/nodes/mod.go index c37eed4f..f9bfd8ef 100644 --- a/nodes/mod.go +++ b/nodes/mod.go @@ -389,7 +389,8 @@ func downloadModVersion(c echo.Context) error { return c.String(404, "version not found, modID:"+modID+" versionID:"+versionID) } - if redis.CanIncrement(c.RealIP(), "download", "version:"+versionID, time.Hour*4) { + if c.Request().Method == echo.GET && + redis.CanIncrement(c.RealIP(), "download", "version:"+versionID, time.Hour*4) { _ = version.Update().AddDownloads(1).Exec(c.Request().Context()) } @@ -444,7 +445,8 @@ func downloadModVersionTarget(c echo.Context) error { return c.String(404, "target not found, modID:"+modID+" versionID:"+versionID+" target:"+target) } - if redis.CanIncrement(c.RealIP(), "download", "version:"+versionID, time.Hour*4) { + if c.Request().Method == echo.GET && + redis.CanIncrement(c.RealIP(), "download", "version:"+versionID, time.Hour*4) { _ = version.Update().AddDownloads(1).Exec(c.Request().Context()) } diff --git a/nodes/routes.go b/nodes/routes.go index 9f1fb629..691baccf 100755 --- a/nodes/routes.go +++ b/nodes/routes.go @@ -17,7 +17,9 @@ func RegisterModRoutes(router *echo.Group) { router.GET("/:modId/versions/:versionId", dataWrapper(getModVersion)) router.GET("/:modId/versions/:versionId/download", downloadModVersion) + router.HEAD("/:modId/versions/:versionId/download", downloadModVersion) router.GET("/:modId/versions/:versionId/:target/download", downloadModVersionTarget) + router.HEAD("/:modId/versions/:versionId/:target/download", downloadModVersionTarget) } func RegisterModsRoutes(router *echo.Group) { @@ -50,5 +52,7 @@ func RegisterUsersRoutes(router *echo.Group) { func RegisterVersionRoutes(router *echo.Group) { router.GET("/:versionId", dataWrapper(getVersion)) router.GET("/:versionId/download", downloadVersion) + router.HEAD("/:versionId/download", downloadVersion) router.GET("/:versionId/:target/download", downloadModTarget) + router.HEAD("/:versionId/:target/download", downloadModTarget) } diff --git a/nodes/version.go b/nodes/version.go index 3302e0e2..8c7b5b97 100644 --- a/nodes/version.go +++ b/nodes/version.go @@ -59,7 +59,8 @@ func downloadVersion(c echo.Context) error { return c.String(404, "version not found") } - if redis.CanIncrement(c.RealIP(), "download", "version:"+versionID, time.Hour*4) { + if c.Request().Method == echo.GET && + redis.CanIncrement(c.RealIP(), "download", "version:"+versionID, time.Hour*4) { _ = version.Update().AddDownloads(1).Exec(c.Request().Context()) } @@ -100,7 +101,8 @@ func downloadModTarget(c echo.Context) error { return c.String(404, "target not found, versionID:"+versionID+" target:"+target) } - if redis.CanIncrement(c.RealIP(), "download", "version:"+versionID, time.Hour*4) { + if c.Request().Method == echo.GET && + redis.CanIncrement(c.RealIP(), "download", "version:"+versionID, time.Hour*4) { _ = version.Update().AddDownloads(1).Exec(c.Request().Context()) }