summaryrefslogtreecommitdiffci
path: root/internal/router/rate-limiters.go
diff options
from:
to:
context:
space:
mode:
authorGravatar SayaAndy <saya.andy@posteo.com> 2026-05-02 14:29:55 +0700
committerGravatar SayaAndy <saya.andy@posteo.com> 2026-05-02 14:29:55 +0700
commitca1f36376865cb2a20923aa62fdff3ee217abde3 (patch)
tree2e3676489327505dd2b4d53023ca0da6fc2dc5a2 /internal/router/rate-limiters.go
parent3898baa47faf268864ecac3699f7e98c6cac01a4 (diff)
downloadweb-ca1f36376865cb2a20923aa62fdff3ee217abde3.tar.gz
web-ca1f36376865cb2a20923aa62fdff3ee217abde3.zip
feat: implement rate limiting
Diffstat (limited to 'internal/router/rate-limiters.go')
-rw-r--r--internal/router/rate-limiters.go37
1 files changed, 37 insertions, 0 deletions
diff --git a/internal/router/rate-limiters.go b/internal/router/rate-limiters.go
new file mode 100644
index 0000000..b43581d
--- /dev/null
+++ b/internal/router/rate-limiters.go
@@ -0,0 +1,37 @@
+package router
+
+import (
+ "time"
+
+ "github.com/gofiber/fiber/v2"
+ "github.com/gofiber/fiber/v2/middleware/limiter"
+)
+
+var (
+ RateLimiterStrict = limiter.New(limiter.Config{
+ Max: 5,
+ Expiration: time.Minute,
+ KeyGenerator: func(c *fiber.Ctx) string { return c.IP() },
+ LimitReached: func(c *fiber.Ctx) error {
+ return c.Status(fiber.StatusTooManyRequests).SendString("rate limit")
+ },
+ })
+
+ RateLimiterMedium = limiter.New(limiter.Config{
+ Max: 30,
+ Expiration: time.Minute,
+ KeyGenerator: func(c *fiber.Ctx) string { return c.IP() },
+ LimitReached: func(c *fiber.Ctx) error {
+ return c.Status(fiber.StatusTooManyRequests).SendString("rate limit")
+ },
+ })
+
+ RateLimiterLoose = limiter.New(limiter.Config{
+ Max: 60,
+ Expiration: time.Minute,
+ KeyGenerator: func(c *fiber.Ctx) string { return c.IP() },
+ LimitReached: func(c *fiber.Ctx) error {
+ return c.Status(fiber.StatusTooManyRequests).SendString("rate limit")
+ },
+ })
+)