package systemconfigs

import "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"

// SecurityConfig 安全相关配置
type SecurityConfig struct {
	Frame                  string   `json:"frame"`                  // Frame嵌套
	AllowCountryIds        []int64  `json:"allowCountryIds"`        // 允许的国家/地区
	AllowProvinceIds       []int64  `json:"allowProvinceIds"`       // 允许的省份
	AllowLocal             bool     `json:"allowLocal"`             // 允许本地+局域网IP访问
	AllowIPs               []string `json:"allowIPs"`               // 允许访问的IP
	AllowRememberLogin     bool     `json:"allowRememberLogin"`     // 是否允许在设备上记住登录
	DenySearchEngines      bool     `json:"denySearchEngines"`      // 禁止常见的搜索引擎访问
	DenySpiders            bool     `json:"denySpiders"`            // 禁止常见的爬虫
	AllowDomains           []string `json:"allowDomains"`           // 允许访问的域名
	CheckClientFingerprint bool     `json:"checkClientFingerprint"` // 在登录状态下检查客户端指纹
	CheckClientRegion      bool     `json:"checkClientRegion"`      // 在登录状态下检查客户端区域

	ClientIPHeaderNames string `json:"clientIPHeaderNames"` // 客户端IP获取报头名称列表
	ClientIPHeaderOnly  bool   `json:"clientIPHeaderOnly"`  // 是否仅从报头中获取IP

	allowIPRanges []*shared.IPRangeConfig
}

// Init 初始化
func (this *SecurityConfig) Init() error {
	this.allowIPRanges = []*shared.IPRangeConfig{}
	for _, allowIP := range this.AllowIPs {
		r, err := shared.ParseIPRange(allowIP)
		if err != nil {
			return err
		}
		this.allowIPRanges = append(this.allowIPRanges, r)
	}
	return nil
}

// AllowIPRanges 查询允许的IP区域
func (this *SecurityConfig) AllowIPRanges() []*shared.IPRangeConfig {
	return this.allowIPRanges
}
