You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
synctv/server/middlewares/rateLimit.go

23 lines
663 B
Go

package middlewares
import (
"net/http"
"time"
"github.com/gin-gonic/gin"
"github.com/synctv-org/synctv/server/model"
limiter "github.com/ulule/limiter/v3"
mgin "github.com/ulule/limiter/v3/drivers/middleware/gin"
"github.com/ulule/limiter/v3/drivers/store/memory"
)
func NewLimiter(period time.Duration, limit int64, options ...limiter.Option) gin.HandlerFunc {
limiter := limiter.New(memory.NewStore(), limiter.Rate{
Period: period,
Limit: limit,
}, options...)
return mgin.NewMiddleware(limiter, mgin.WithLimitReachedHandler(func(c *gin.Context) {
c.JSON(http.StatusTooManyRequests, model.NewAPIErrorStringResp("too many requests"))
}))
}