2022-03-29 21:24:36 +08:00
|
|
|
// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
|
|
|
|
|
|
|
|
|
package serverconfigs
|
|
|
|
|
|
2023-03-06 21:49:11 +08:00
|
|
|
import "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
|
|
|
|
|
|
2022-07-03 22:10:18 +08:00
|
|
|
// UAMConfig UAM配置
|
2022-03-29 21:24:36 +08:00
|
|
|
type UAMConfig struct {
|
2022-05-04 20:32:03 +08:00
|
|
|
IsPrior bool `yaml:"isPrior" json:"isPrior"`
|
|
|
|
|
IsOn bool `yaml:"isOn" json:"isOn"`
|
2023-03-06 21:49:11 +08:00
|
|
|
|
2023-04-23 16:04:59 +08:00
|
|
|
AddToWhiteList bool `yaml:"addToWhiteList" json:"addToWhiteList"` // 是否将IP加入到白名单
|
2023-03-06 21:49:11 +08:00
|
|
|
OnlyURLPatterns []*shared.URLPattern `yaml:"onlyURLPatterns" json:"onlyURLPatterns"` // 仅限的URL
|
|
|
|
|
ExceptURLPatterns []*shared.URLPattern `yaml:"exceptURLPatterns" json:"exceptURLPatterns"` // 排除的URL
|
2023-07-14 11:01:14 +08:00
|
|
|
MinQPSPerIP int `yaml:"minQPSPerIP" json:"minQPSPerIP"` // 启用要求的单IP最低平均QPS
|
2022-03-29 21:24:36 +08:00
|
|
|
}
|
|
|
|
|
|
2023-04-23 16:04:59 +08:00
|
|
|
func NewUAMConfig() *UAMConfig {
|
|
|
|
|
return &UAMConfig{
|
|
|
|
|
AddToWhiteList: true,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-29 21:24:36 +08:00
|
|
|
func (this *UAMConfig) Init() error {
|
2023-03-06 21:49:11 +08:00
|
|
|
// only urls
|
|
|
|
|
for _, pattern := range this.OnlyURLPatterns {
|
|
|
|
|
err := pattern.Init()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// except urls
|
|
|
|
|
for _, pattern := range this.ExceptURLPatterns {
|
|
|
|
|
err := pattern.Init()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-29 21:24:36 +08:00
|
|
|
return nil
|
|
|
|
|
}
|
2023-03-06 21:49:11 +08:00
|
|
|
|
|
|
|
|
func (this *UAMConfig) MatchURL(url string) bool {
|
|
|
|
|
// except
|
|
|
|
|
if len(this.ExceptURLPatterns) > 0 {
|
|
|
|
|
for _, pattern := range this.ExceptURLPatterns {
|
|
|
|
|
if pattern.Match(url) {
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if len(this.OnlyURLPatterns) > 0 {
|
|
|
|
|
for _, pattern := range this.OnlyURLPatterns {
|
|
|
|
|
if pattern.Match(url) {
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true
|
|
|
|
|
}
|