mirror of
				https://github.com/TeaOSLab/EdgeCommon.git
				synced 2025-11-04 05:00:24 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			59 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package serverconfigs
 | 
						||
 | 
						||
import (
 | 
						||
	"github.com/TeaOSLab/EdgeCommon/pkg/configutils"
 | 
						||
	"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
 | 
						||
	"time"
 | 
						||
)
 | 
						||
 | 
						||
// HTTPWebsocketConfig websocket设置
 | 
						||
type HTTPWebsocketConfig struct {
 | 
						||
	Id   int64 `yaml:"id" json:"id"`     // ID
 | 
						||
	IsOn bool  `yaml:"isOn" json:"isOn"` // 是否开启
 | 
						||
 | 
						||
	// 握手超时时间
 | 
						||
	HandshakeTimeout *shared.TimeDuration `yaml:"handshakeTimeout" json:"handshakeTimeout"`
 | 
						||
 | 
						||
	// 允许的来源域名,支持 www.example.com, example.com, .example.com, *.example.com
 | 
						||
	AllowAllOrigins bool     `yaml:"allowAllOrigins" json:"allowAllOrigins"`
 | 
						||
	AllowedOrigins  []string `yaml:"allowedOrigins" json:"allowedOrigins"`
 | 
						||
 | 
						||
	// 向后传递的来源
 | 
						||
	RequestSameOrigin bool   `yaml:"requestSameOrigin" json:"requestSameOrigin"` // 和请求一致
 | 
						||
	RequestOrigin     string `yaml:"requestOrigin" json:"requestOrigin"`         // 自行指定Origin,支持变量
 | 
						||
 | 
						||
	handshakeTimeoutDuration  time.Duration
 | 
						||
	requestOriginHasVariables bool
 | 
						||
}
 | 
						||
 | 
						||
// 校验
 | 
						||
func (this *HTTPWebsocketConfig) Init() error {
 | 
						||
	// duration
 | 
						||
	if this.HandshakeTimeout != nil {
 | 
						||
		this.handshakeTimeoutDuration = this.HandshakeTimeout.Duration()
 | 
						||
	}
 | 
						||
 | 
						||
	// requestOrigin
 | 
						||
	this.requestOriginHasVariables = configutils.HasVariables(this.RequestOrigin)
 | 
						||
 | 
						||
	return nil
 | 
						||
}
 | 
						||
 | 
						||
// 获取握手超时时间
 | 
						||
func (this *HTTPWebsocketConfig) HandshakeTimeoutDuration() time.Duration {
 | 
						||
	return this.handshakeTimeoutDuration
 | 
						||
}
 | 
						||
 | 
						||
// 匹配域名
 | 
						||
func (this *HTTPWebsocketConfig) MatchOrigin(origin string) bool {
 | 
						||
	if this.AllowAllOrigins {
 | 
						||
		return true
 | 
						||
	}
 | 
						||
	return configutils.MatchDomains(this.AllowedOrigins, origin)
 | 
						||
}
 | 
						||
 | 
						||
// 判断请求Origin是否有变量
 | 
						||
func (this *HTTPWebsocketConfig) RequestOriginHasVariables() bool {
 | 
						||
	return this.requestOriginHasVariables
 | 
						||
}
 |