From 1d78207004cc267b078ce8447498791afb940178 Mon Sep 17 00:00:00 2001 From: nyne Date: Fri, 28 Nov 2025 19:12:31 +0800 Subject: [PATCH] feat: add UnsupportedRegionMiddleware to handle requests from unsupported regions --- main.go | 2 ++ .../unsupported_region_middleware.go | 29 +++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 server/middleware/unsupported_region_middleware.go diff --git a/main.go b/main.go index 2434c50..8cbe11a 100644 --- a/main.go +++ b/main.go @@ -19,6 +19,8 @@ func main() { Format: "[${ip}]:${port} ${status} - ${method} ${path}\n", })) + app.Use(middleware.UnsupportedRegionMiddleware) + app.Use(middleware.ErrorHandler) app.Use(middleware.RealUserMiddleware) diff --git a/server/middleware/unsupported_region_middleware.go b/server/middleware/unsupported_region_middleware.go new file mode 100644 index 0000000..5e2b33d --- /dev/null +++ b/server/middleware/unsupported_region_middleware.go @@ -0,0 +1,29 @@ +package middleware + +import ( + "strings" + + "github.com/gofiber/fiber/v3" +) + +func UnsupportedRegionMiddleware(c fiber.Ctx) error { + path := string(c.Request().URI().Path()) + + // Skip static file requests + if strings.Contains(path, ".") { + return c.Next() + } + + // Skip API requests + if strings.HasPrefix(path, "/api") { + return c.Next() + } + + if string(c.Request().Header.Peek("Unsupported-Region")) == "true" { + // Return a 403 Forbidden response with an empty html for unsupported regions + c.Response().Header.Add("Content-Type", "text/html") + c.Status(fiber.StatusForbidden) + return c.SendString("") + } + return c.Next() +}