diff options
Diffstat (limited to 'vendor/github.com/ulule/limiter/v3/drivers/middleware/gin/options.go')
-rw-r--r-- | vendor/github.com/ulule/limiter/v3/drivers/middleware/gin/options.go | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/vendor/github.com/ulule/limiter/v3/drivers/middleware/gin/options.go b/vendor/github.com/ulule/limiter/v3/drivers/middleware/gin/options.go new file mode 100644 index 000000000..604c6bc68 --- /dev/null +++ b/vendor/github.com/ulule/limiter/v3/drivers/middleware/gin/options.go @@ -0,0 +1,71 @@ +package gin + +import ( + "net/http" + + "github.com/gin-gonic/gin" +) + +// Option is used to define Middleware configuration. +type Option interface { + apply(*Middleware) +} + +type option func(*Middleware) + +func (o option) apply(middleware *Middleware) { + o(middleware) +} + +// ErrorHandler is an handler used to inform when an error has occurred. +type ErrorHandler func(c *gin.Context, err error) + +// WithErrorHandler will configure the Middleware to use the given ErrorHandler. +func WithErrorHandler(handler ErrorHandler) Option { + return option(func(middleware *Middleware) { + middleware.OnError = handler + }) +} + +// DefaultErrorHandler is the default ErrorHandler used by a new Middleware. +func DefaultErrorHandler(c *gin.Context, err error) { + panic(err) +} + +// LimitReachedHandler is an handler used to inform when the limit has exceeded. +type LimitReachedHandler func(c *gin.Context) + +// WithLimitReachedHandler will configure the Middleware to use the given LimitReachedHandler. +func WithLimitReachedHandler(handler LimitReachedHandler) Option { + return option(func(middleware *Middleware) { + middleware.OnLimitReached = handler + }) +} + +// DefaultLimitReachedHandler is the default LimitReachedHandler used by a new Middleware. +func DefaultLimitReachedHandler(c *gin.Context) { + c.String(http.StatusTooManyRequests, "Limit exceeded") +} + +// KeyGetter will define the rate limiter key given the gin Context. +type KeyGetter func(c *gin.Context) string + +// WithKeyGetter will configure the Middleware to use the given KeyGetter. +func WithKeyGetter(handler KeyGetter) Option { + return option(func(middleware *Middleware) { + middleware.KeyGetter = handler + }) +} + +// DefaultKeyGetter is the default KeyGetter used by a new Middleware. +// It returns the Client IP address. +func DefaultKeyGetter(c *gin.Context) string { + return c.ClientIP() +} + +// WithExcludedKey will configure the Middleware to ignore key(s) using the given function. +func WithExcludedKey(handler func(string) bool) Option { + return option(func(middleware *Middleware) { + middleware.ExcludedKey = handler + }) +} |