Files
EdgeCommon/pkg/serverconfigs/uam_config.go

83 lines
1.9 KiB
Go
Raw Normal View History

2022-03-29 21:24:36 +08:00
// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
package serverconfigs
2024-01-12 17:13:34 +08:00
import (
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
)
2023-03-06 21:49:11 +08:00
2022-07-03 22:10:18 +08:00
// UAMConfig UAM配置
2022-03-29 21:24:36 +08:00
type UAMConfig struct {
IsPrior bool `yaml:"isPrior" json:"isPrior"`
IsOn bool `yaml:"isOn" json:"isOn"`
2023-03-06 21:49:11 +08:00
2024-01-12 17:13:34 +08:00
AddToWhiteList bool `yaml:"addToWhiteList" json:"addToWhiteList"` // 是否将IP加入到白名单
OnlyURLPatterns []*shared.URLPattern `yaml:"onlyURLPatterns" json:"onlyURLPatterns"` // 仅限的URL
ExceptURLPatterns []*shared.URLPattern `yaml:"exceptURLPatterns" json:"exceptURLPatterns"` // 排除的URL
MinQPSPerIP int `yaml:"minQPSPerIP" json:"minQPSPerIP"` // 启用要求的单IP最低平均QPS
Conds *shared.HTTPRequestCondsConfig `yaml:"conds" json:"conds"` // 匹配条件
2022-03-29 21:24:36 +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
}
}
2024-01-12 17:13:34 +08:00
// conds
if this.Conds != nil {
err := this.Conds.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
}
2024-01-12 17:13:34 +08:00
func (this *UAMConfig) MatchRequest(formatter func(s string) string) bool {
if this.Conds == nil {
return true
}
return this.Conds.MatchRequest(formatter)
}