#4901 接口流量控制增加白名单功能

Merged
zouap merged 3 commits from fix-4893 into V20231120 5 months ago
  1. +14
    -2
      modules/context/repo.go
  2. +4
    -0
      modules/setting/ratelimit.go

+ 14
- 2
modules/context/repo.go View File

@@ -382,10 +382,22 @@ func limiterHandler(rateLimit int, burst int) macaron.Handler {
if setting.RateLimitConfig.Enabled {
limiter = rate.NewLimiter(rate.Limit(rateLimit), burst)
}

return func(ctx *Context) {

if !ctx.IsSigned {
if setting.RateLimitConfig.Enabled && limiter != nil && !limiter.Allow() {
isInWhiteList := false
userName := ctx.Params(":username")
repoName := ctx.Params(":reponame")

if userName != "" && repoName != "" {
for _, v := range setting.RateLimitConfig.WhiteList {
if v == userName+"/"+repoName {
isInWhiteList = true
}
}
}

if !isInWhiteList && setting.RateLimitConfig.Enabled && limiter != nil && !limiter.Allow() {
ctx.HTML(http.StatusTooManyRequests, "status/429")
return
}


+ 4
- 0
modules/setting/ratelimit.go View File

@@ -1,5 +1,7 @@
package setting

import "strings"

var RateLimitConfig *RateLimit

type RateLimit struct {
@@ -8,6 +10,7 @@ type RateLimit struct {
LowBurst int
HighRate int
HighBurst int
WhiteList []string
}

func initRateLimitConfig() {
@@ -18,6 +21,7 @@ func initRateLimitConfig() {
LowBurst: sec.Key("LowBurst").MustInt(20),
HighRate: sec.Key("HighRate").MustInt(20),
HighBurst: sec.Key("HighBurst").MustInt(30),
WhiteList: strings.Split(sec.Key("WhiteList").MustString(""), ","),
}

}

Loading…
Cancel
Save