This repository has been archived on 2022-09-04. You can view files and clone it, but cannot push or open issues or pull requests.
api/middleware/limit_whitelist.go
Kichiyaki 01fdd80f7f [WIP] - refactor limit, sort, offset
- rename middleware.MayExceedLimit to CanExceedLimit
- update the DailyTribeStats/DailyPlayerStats repository and usecase
- rename utils.SanitizeSort to utils.SanitizeSortExpression
- add two new utils - SanitizeSortExpressions and FindStringWithPrefix
2020-11-21 09:13:25 +01:00

43 lines
942 B
Go

package middleware
import (
"context"
"github.com/gin-gonic/gin"
)
var limitWhitelistContextKey ContextKey = "limitWhitelist"
type LimitWhitelistConfig struct {
IPAddresses []string
}
func LimitWhitelist(cfg LimitWhitelistConfig) gin.HandlerFunc {
return func(c *gin.Context) {
ctx := c.Request.Context()
clientIP := c.ClientIP()
canExceedLimit := false
for _, ip := range cfg.IPAddresses {
if ip == clientIP {
canExceedLimit = true
break
}
}
ctx = StoreLimitWhitelistDataInContext(ctx, canExceedLimit)
c.Request = c.Request.WithContext(ctx)
c.Next()
}
}
func StoreLimitWhitelistDataInContext(ctx context.Context, canExceedLimit bool) context.Context {
return context.WithValue(ctx, limitWhitelistContextKey, canExceedLimit)
}
func CanExceedLimit(ctx context.Context) bool {
whitelisted := ctx.Value(limitWhitelistContextKey)
if whitelisted == nil {
return false
}
return whitelisted.(bool)
}