mirror of
https://github.com/TeaOSLab/EdgeCommon.git
synced 2025-11-03 20:40:25 +08:00
101 lines
2.6 KiB
Go
101 lines
2.6 KiB
Go
// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn .
|
|
|
|
package serverconfigs
|
|
|
|
import (
|
|
"github.com/TeaOSLab/EdgeCommon/pkg/configutils"
|
|
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
|
|
)
|
|
|
|
// NewReferersConfig 获取新防盗链配置对象
|
|
func NewReferersConfig() *ReferersConfig {
|
|
return &ReferersConfig{
|
|
CheckOrigin: true,
|
|
}
|
|
}
|
|
|
|
// ReferersConfig 防盗链设置
|
|
type ReferersConfig struct {
|
|
IsPrior bool `yaml:"isPrior" json:"isPrior"`
|
|
IsOn bool `yaml:"isOn" json:"isOn"`
|
|
AllowEmpty bool `yaml:"allowEmpty" json:"allowEmpty"` // 来源域名允许为空
|
|
AllowSameDomain bool `yaml:"allowSameDomain" json:"allowSameDomain"` // 允许来源域名和当前访问的域名一致,相当于在站内访问
|
|
AllowDomains []string `yaml:"allowDomains" json:"allowDomains"` // 允许的来源域名列表
|
|
DenyDomains []string `yaml:"denyDomains" json:"denyDomains"` // 禁止的来源域名列表
|
|
CheckOrigin bool `yaml:"checkOrigin" json:"checkOrigin"` // 是否检查Origin
|
|
|
|
OnlyURLPatterns []*shared.URLPattern `yaml:"onlyURLPatterns" json:"onlyURLPatterns"` // 仅限的URL
|
|
ExceptURLPatterns []*shared.URLPattern `yaml:"exceptURLPatterns" json:"exceptURLPatterns"` // 排除的URL
|
|
}
|
|
|
|
func (this *ReferersConfig) Init() error {
|
|
// url patterns
|
|
for _, pattern := range this.ExceptURLPatterns {
|
|
err := pattern.Init()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
for _, pattern := range this.OnlyURLPatterns {
|
|
err := pattern.Init()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (this *ReferersConfig) MatchDomain(requestDomain string, refererDomain string) bool {
|
|
if len(refererDomain) == 0 {
|
|
if this.AllowEmpty {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
if this.AllowSameDomain && requestDomain == refererDomain {
|
|
return true
|
|
}
|
|
|
|
if len(this.AllowDomains) == 0 {
|
|
if len(this.DenyDomains) > 0 {
|
|
return !configutils.MatchDomains(this.DenyDomains, refererDomain)
|
|
}
|
|
return false
|
|
}
|
|
|
|
if configutils.MatchDomains(this.AllowDomains, refererDomain) {
|
|
if len(this.DenyDomains) > 0 && configutils.MatchDomains(this.DenyDomains, refererDomain) {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
func (this *ReferersConfig) MatchURL(url string) bool {
|
|
// except
|
|
if len(this.ExceptURLPatterns) > 0 {
|
|
for _, pattern := range this.ExceptURLPatterns {
|
|
if pattern.Match(url) {
|
|
return false
|
|
}
|
|
}
|
|
}
|
|
|
|
// only
|
|
if len(this.OnlyURLPatterns) > 0 {
|
|
for _, pattern := range this.OnlyURLPatterns {
|
|
if pattern.Match(url) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|