37 lines
918 B
Go
37 lines
918 B
Go
package rateLimit
|
|
|
|
import (
|
|
"errors"
|
|
"sun-panel/global"
|
|
)
|
|
|
|
const (
|
|
ERROR_RATE_EXCEED_MINUTE = "minute exceed" // 分钟速率超出限制
|
|
ERROR_RATE_EXCEED_HOUR = "minute hour" // 小时速率超出限制
|
|
)
|
|
|
|
// 获取用户套餐的速率 此处正常根据用户套餐设定获取-暂时写死
|
|
func GetUserPackageRate(userId uint) (minuteRate, hourRate int) {
|
|
return 10, 200
|
|
}
|
|
|
|
func CheckRateLimit(userId uint) error {
|
|
minuteRate, hourRate := GetUserPackageRate(userId)
|
|
if minuteRate != 0 && minuteRate <= global.RateLimit.MinuteGet(userId) {
|
|
return errors.New(ERROR_RATE_EXCEED_MINUTE)
|
|
}
|
|
|
|
if hourRate != 0 && hourRate <= global.RateLimit.HourGet(userId) {
|
|
return errors.New(ERROR_RATE_EXCEED_HOUR)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// 速率+1次 同时增加小时和分钟的次数
|
|
func AddOnceRate(userId uint) error {
|
|
global.RateLimit.MinuteAddOnce(userId)
|
|
global.RateLimit.HourAddOnce(userId)
|
|
return nil
|
|
}
|