mirror of
				https://github.com/TeaOSLab/EdgeCommon.git
				synced 2025-11-04 05:00:24 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			78 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package shared
 | 
						|
 | 
						|
import "strings"
 | 
						|
 | 
						|
// HTTPHeaderPolicy HeaderList定义
 | 
						|
type HTTPHeaderPolicy struct {
 | 
						|
	Id          int64  `yaml:"id" json:"id"`                   // ID
 | 
						|
	Name        string `yaml:"name" json:"name"`               // 名称 TODO
 | 
						|
	IsOn        bool   `yaml:"isOn" json:"isOn"`               // 是否启用 TODO
 | 
						|
	Description string `yaml:"description" json:"description"` // 描述 TODO
 | 
						|
 | 
						|
	SetHeaderRefs []*HTTPHeaderRef    `yaml:"setHeaderRefs" json:"setHeaderRefs"`
 | 
						|
	SetHeaders    []*HTTPHeaderConfig `yaml:"setHeaders" json:"setHeaders"`
 | 
						|
	DeleteHeaders []string            `yaml:"deleteHeaders" json:"deleteHeaders"` // 删除的Header
 | 
						|
 | 
						|
	Expires            *HTTPExpireHeaderConfig `yaml:"expires" json:"expires"`                       // 内容过期设置 TODO
 | 
						|
	CORS               *HTTPCORSHeaderConfig   `yaml:"cors" json:"cors"`                             // CORS跨域设置
 | 
						|
	NonStandardHeaders []string                `yaml:"nonStandardHeaders" json:"nonStandardHeaders"` // 非标Header列表
 | 
						|
 | 
						|
	setHeaderNames  []string
 | 
						|
	deleteHeaderMap map[string]bool // header => bool
 | 
						|
}
 | 
						|
 | 
						|
// Init 校验
 | 
						|
func (this *HTTPHeaderPolicy) Init() error {
 | 
						|
	this.setHeaderNames = []string{}
 | 
						|
	for _, h := range this.SetHeaders {
 | 
						|
		err := h.Init()
 | 
						|
		if err != nil {
 | 
						|
			return err
 | 
						|
		}
 | 
						|
		this.setHeaderNames = append(this.setHeaderNames, strings.ToUpper(h.Name))
 | 
						|
	}
 | 
						|
 | 
						|
	// delete
 | 
						|
	this.deleteHeaderMap = map[string]bool{}
 | 
						|
	for _, header := range this.DeleteHeaders {
 | 
						|
		this.deleteHeaderMap[strings.ToUpper(header)] = true
 | 
						|
	}
 | 
						|
 | 
						|
	// cors
 | 
						|
	if this.CORS != nil {
 | 
						|
		err := this.CORS.Init()
 | 
						|
		if err != nil {
 | 
						|
			return err
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
// IsEmpty 判断是否为空
 | 
						|
func (this *HTTPHeaderPolicy) IsEmpty() bool {
 | 
						|
	return len(this.SetHeaders) == 0 &&
 | 
						|
		this.Expires == nil &&
 | 
						|
		len(this.DeleteHeaders) == 0 &&
 | 
						|
		len(this.NonStandardHeaders) == 0 &&
 | 
						|
		(this.CORS == nil || !this.CORS.IsOn)
 | 
						|
}
 | 
						|
 | 
						|
// ContainsHeader 判断Add和Set中是否包含某个Header
 | 
						|
func (this *HTTPHeaderPolicy) ContainsHeader(name string) bool {
 | 
						|
	name = strings.ToUpper(name)
 | 
						|
 | 
						|
	for _, n := range this.setHeaderNames {
 | 
						|
		if n == name {
 | 
						|
			return true
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return false
 | 
						|
}
 | 
						|
 | 
						|
// ContainsDeletedHeader 判断删除列表中是否包含某个Header
 | 
						|
func (this *HTTPHeaderPolicy) ContainsDeletedHeader(name string) bool {
 | 
						|
	_, ok := this.deleteHeaderMap[strings.ToUpper(name)]
 | 
						|
	return ok
 | 
						|
}
 |