mirror of
https://github.com/linux-do/new-api.git
synced 2025-09-17 16:06:38 +08:00
feat: 增加GLOBAL_API_RATE_LIMIT_ENABLE
与GLOBAL_WEB_RATE_LIMIT_ENABLE
环境变量,支持是否开启访问速率控制
This commit is contained in:
parent
fad29a8cc2
commit
08023f6d96
@ -144,9 +144,11 @@ var (
|
|||||||
// All duration's unit is seconds
|
// All duration's unit is seconds
|
||||||
// Shouldn't larger then RateLimitKeyExpirationDuration
|
// Shouldn't larger then RateLimitKeyExpirationDuration
|
||||||
var (
|
var (
|
||||||
|
GlobalApiRateLimitEnable = GetEnvOrDefaultBool("GLOBAL_API_RATE_LIMIT_ENABLE", true)
|
||||||
GlobalApiRateLimitNum = GetEnvOrDefault("GLOBAL_API_RATE_LIMIT", 180)
|
GlobalApiRateLimitNum = GetEnvOrDefault("GLOBAL_API_RATE_LIMIT", 180)
|
||||||
GlobalApiRateLimitDuration = int64(GetEnvOrDefault("GLOBAL_API_RATE_LIMIT_DURATION", 180))
|
GlobalApiRateLimitDuration = int64(GetEnvOrDefault("GLOBAL_API_RATE_LIMIT_DURATION", 180))
|
||||||
|
|
||||||
|
GlobalWebRateLimitEnable = GetEnvOrDefaultBool("GLOBAL_WEB_RATE_LIMIT_ENABLE", true)
|
||||||
GlobalWebRateLimitNum = GetEnvOrDefault("GLOBAL_WEB_RATE_LIMIT", 60)
|
GlobalWebRateLimitNum = GetEnvOrDefault("GLOBAL_WEB_RATE_LIMIT", 60)
|
||||||
GlobalWebRateLimitDuration = int64(GetEnvOrDefault("GLOBAL_WEB_RATE_LIMIT_DURATION", 180))
|
GlobalWebRateLimitDuration = int64(GetEnvOrDefault("GLOBAL_WEB_RATE_LIMIT_DURATION", 180))
|
||||||
|
|
||||||
|
@ -13,6 +13,10 @@ var timeFormat = "2006-01-02T15:04:05.000Z"
|
|||||||
|
|
||||||
var inMemoryRateLimiter common.InMemoryRateLimiter
|
var inMemoryRateLimiter common.InMemoryRateLimiter
|
||||||
|
|
||||||
|
var defNext = func(c *gin.Context) {
|
||||||
|
c.Next()
|
||||||
|
}
|
||||||
|
|
||||||
func redisRateLimiter(c *gin.Context, maxRequestNum int, duration int64, mark string) {
|
func redisRateLimiter(c *gin.Context, maxRequestNum int, duration int64, mark string) {
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
rdb := common.RDB
|
rdb := common.RDB
|
||||||
@ -83,11 +87,17 @@ func rateLimitFactory(maxRequestNum int, duration int64, mark string) func(c *gi
|
|||||||
}
|
}
|
||||||
|
|
||||||
func GlobalWebRateLimit() func(c *gin.Context) {
|
func GlobalWebRateLimit() func(c *gin.Context) {
|
||||||
return rateLimitFactory(common.GlobalWebRateLimitNum, common.GlobalWebRateLimitDuration, "GW")
|
if common.GlobalWebRateLimitEnable {
|
||||||
|
return rateLimitFactory(common.GlobalWebRateLimitNum, common.GlobalWebRateLimitDuration, "GW")
|
||||||
|
}
|
||||||
|
return defNext
|
||||||
}
|
}
|
||||||
|
|
||||||
func GlobalAPIRateLimit() func(c *gin.Context) {
|
func GlobalAPIRateLimit() func(c *gin.Context) {
|
||||||
return rateLimitFactory(common.GlobalApiRateLimitNum, common.GlobalApiRateLimitDuration, "GA")
|
if common.GlobalApiRateLimitEnable {
|
||||||
|
return rateLimitFactory(common.GlobalApiRateLimitNum, common.GlobalApiRateLimitDuration, "GA")
|
||||||
|
}
|
||||||
|
return defNext
|
||||||
}
|
}
|
||||||
|
|
||||||
func CriticalRateLimit() func(c *gin.Context) {
|
func CriticalRateLimit() func(c *gin.Context) {
|
||||||
|
Loading…
Reference in New Issue
Block a user