mirror of
				https://github.com/TeaOSLab/EdgeAPI.git
				synced 2025-11-04 07:50:25 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			266 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			266 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package models
 | 
						|
 | 
						|
import (
 | 
						|
	"encoding/json"
 | 
						|
	"errors"
 | 
						|
	"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
 | 
						|
	_ "github.com/go-sql-driver/mysql"
 | 
						|
	"github.com/iwind/TeaGo/Tea"
 | 
						|
	"github.com/iwind/TeaGo/dbs"
 | 
						|
	"github.com/iwind/TeaGo/types"
 | 
						|
)
 | 
						|
 | 
						|
const (
 | 
						|
	HTTPHeaderPolicyStateEnabled  = 1 // 已启用
 | 
						|
	HTTPHeaderPolicyStateDisabled = 0 // 已禁用
 | 
						|
)
 | 
						|
 | 
						|
type HTTPHeaderPolicyDAO dbs.DAO
 | 
						|
 | 
						|
func NewHTTPHeaderPolicyDAO() *HTTPHeaderPolicyDAO {
 | 
						|
	return dbs.NewDAO(&HTTPHeaderPolicyDAO{
 | 
						|
		DAOObject: dbs.DAOObject{
 | 
						|
			DB:     Tea.Env,
 | 
						|
			Table:  "edgeHTTPHeaderPolicies",
 | 
						|
			Model:  new(HTTPHeaderPolicy),
 | 
						|
			PkName: "id",
 | 
						|
		},
 | 
						|
	}).(*HTTPHeaderPolicyDAO)
 | 
						|
}
 | 
						|
 | 
						|
var SharedHTTPHeaderPolicyDAO = NewHTTPHeaderPolicyDAO()
 | 
						|
 | 
						|
// 启用条目
 | 
						|
func (this *HTTPHeaderPolicyDAO) EnableHTTPHeaderPolicy(id int64) error {
 | 
						|
	_, err := this.Query().
 | 
						|
		Pk(id).
 | 
						|
		Set("state", HTTPHeaderPolicyStateEnabled).
 | 
						|
		Update()
 | 
						|
	return err
 | 
						|
}
 | 
						|
 | 
						|
// 禁用条目
 | 
						|
func (this *HTTPHeaderPolicyDAO) DisableHTTPHeaderPolicy(id int64) error {
 | 
						|
	_, err := this.Query().
 | 
						|
		Pk(id).
 | 
						|
		Set("state", HTTPHeaderPolicyStateDisabled).
 | 
						|
		Update()
 | 
						|
	return err
 | 
						|
}
 | 
						|
 | 
						|
// 查找启用中的条目
 | 
						|
func (this *HTTPHeaderPolicyDAO) FindEnabledHTTPHeaderPolicy(id int64) (*HTTPHeaderPolicy, error) {
 | 
						|
	result, err := this.Query().
 | 
						|
		Pk(id).
 | 
						|
		Attr("state", HTTPHeaderPolicyStateEnabled).
 | 
						|
		Find()
 | 
						|
	if result == nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
	return result.(*HTTPHeaderPolicy), err
 | 
						|
}
 | 
						|
 | 
						|
// 创建策略
 | 
						|
func (this *HTTPHeaderPolicyDAO) CreateHeaderPolicy() (int64, error) {
 | 
						|
	op := NewHTTPHeaderPolicyOperator()
 | 
						|
	op.IsOn = true
 | 
						|
	op.State = HTTPHeaderPolicyStateEnabled
 | 
						|
	_, err := this.Save(op)
 | 
						|
	if err != nil {
 | 
						|
		return 0, err
 | 
						|
	}
 | 
						|
	return types.Int64(op.Id), nil
 | 
						|
}
 | 
						|
 | 
						|
// 修改AddHeaders
 | 
						|
func (this *HTTPHeaderPolicyDAO) UpdateAddingHeaders(policyId int64, headersJSON []byte) error {
 | 
						|
	if policyId <= 0 {
 | 
						|
		return errors.New("invalid policyId")
 | 
						|
	}
 | 
						|
 | 
						|
	op := NewHTTPHeaderPolicyOperator()
 | 
						|
	op.Id = policyId
 | 
						|
	op.AddHeaders = headersJSON
 | 
						|
	_, err := this.Save(op)
 | 
						|
 | 
						|
	// TODO 更新相关配置
 | 
						|
 | 
						|
	return err
 | 
						|
}
 | 
						|
 | 
						|
// 修改SetHeaders
 | 
						|
func (this *HTTPHeaderPolicyDAO) UpdateSettingHeaders(policyId int64, headersJSON []byte) error {
 | 
						|
	if policyId <= 0 {
 | 
						|
		return errors.New("invalid policyId")
 | 
						|
	}
 | 
						|
 | 
						|
	op := NewHTTPHeaderPolicyOperator()
 | 
						|
	op.Id = policyId
 | 
						|
	op.SetHeaders = headersJSON
 | 
						|
	_, err := this.Save(op)
 | 
						|
 | 
						|
	// TODO 更新相关配置
 | 
						|
 | 
						|
	return err
 | 
						|
}
 | 
						|
 | 
						|
// 修改ReplaceHeaders
 | 
						|
func (this *HTTPHeaderPolicyDAO) UpdateReplacingHeaders(policyId int64, headersJSON []byte) error {
 | 
						|
	if policyId <= 0 {
 | 
						|
		return errors.New("invalid policyId")
 | 
						|
	}
 | 
						|
 | 
						|
	op := NewHTTPHeaderPolicyOperator()
 | 
						|
	op.Id = policyId
 | 
						|
	op.ReplaceHeaders = headersJSON
 | 
						|
	_, err := this.Save(op)
 | 
						|
 | 
						|
	// TODO 更新相关配置
 | 
						|
 | 
						|
	return err
 | 
						|
}
 | 
						|
 | 
						|
// 修改AddTrailers
 | 
						|
func (this *HTTPHeaderPolicyDAO) UpdateAddingTrailers(policyId int64, headersJSON []byte) error {
 | 
						|
	if policyId <= 0 {
 | 
						|
		return errors.New("invalid policyId")
 | 
						|
	}
 | 
						|
 | 
						|
	op := NewHTTPHeaderPolicyOperator()
 | 
						|
	op.Id = policyId
 | 
						|
	op.AddTrailers = headersJSON
 | 
						|
	_, err := this.Save(op)
 | 
						|
 | 
						|
	// TODO 更新相关配置
 | 
						|
 | 
						|
	return err
 | 
						|
}
 | 
						|
 | 
						|
// 修改DeleteHeaders
 | 
						|
func (this *HTTPHeaderPolicyDAO) UpdateDeletingHeaders(policyId int64, headerNames []string) error {
 | 
						|
	if policyId <= 0 {
 | 
						|
		return errors.New("invalid policyId")
 | 
						|
	}
 | 
						|
 | 
						|
	namesJSON, err := json.Marshal(headerNames)
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
 | 
						|
	op := NewHTTPHeaderPolicyOperator()
 | 
						|
	op.Id = policyId
 | 
						|
	op.DeleteHeaders = string(namesJSON)
 | 
						|
	_, err = this.Save(op)
 | 
						|
 | 
						|
	// TODO 更新相关配置
 | 
						|
 | 
						|
	return err
 | 
						|
}
 | 
						|
 | 
						|
// 组合配置
 | 
						|
func (this *HTTPHeaderPolicyDAO) ComposeHeaderPolicyConfig(headerPolicyId int64) (*shared.HTTPHeaderPolicy, error) {
 | 
						|
	policy, err := this.FindEnabledHTTPHeaderPolicy(headerPolicyId)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
	if policy == nil {
 | 
						|
		return nil, nil
 | 
						|
	}
 | 
						|
 | 
						|
	config := &shared.HTTPHeaderPolicy{}
 | 
						|
	config.Id = int64(policy.Id)
 | 
						|
	config.IsOn = policy.IsOn == 1
 | 
						|
 | 
						|
	// AddHeaders
 | 
						|
	if len(policy.AddHeaders) > 0 {
 | 
						|
		headers := []*shared.HTTPHeaderConfig{}
 | 
						|
		err = json.Unmarshal([]byte(policy.AddHeaders), &headers)
 | 
						|
		if err != nil {
 | 
						|
			return nil, err
 | 
						|
		}
 | 
						|
		if len(headers) > 0 {
 | 
						|
			for k, header := range headers {
 | 
						|
				headerConfig, err := SharedHTTPHeaderDAO.ComposeHeaderConfig(header.Id)
 | 
						|
				if err != nil {
 | 
						|
					return nil, err
 | 
						|
				}
 | 
						|
				headers[k] = headerConfig
 | 
						|
			}
 | 
						|
 | 
						|
			config.AddHeaders = headers
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	// AddTrailers
 | 
						|
	if len(policy.AddTrailers) > 0 {
 | 
						|
		headers := []*shared.HTTPHeaderConfig{}
 | 
						|
		err = json.Unmarshal([]byte(policy.AddTrailers), &headers)
 | 
						|
		if err != nil {
 | 
						|
			return nil, err
 | 
						|
		}
 | 
						|
		if len(headers) > 0 {
 | 
						|
			for k, header := range headers {
 | 
						|
				headerConfig, err := SharedHTTPHeaderDAO.ComposeHeaderConfig(header.Id)
 | 
						|
				if err != nil {
 | 
						|
					return nil, err
 | 
						|
				}
 | 
						|
				headers[k] = headerConfig
 | 
						|
			}
 | 
						|
			config.AddTrailers = headers
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	// SetHeaders
 | 
						|
	if len(policy.SetHeaders) > 0 {
 | 
						|
		headers := []*shared.HTTPHeaderConfig{}
 | 
						|
		err = json.Unmarshal([]byte(policy.SetHeaders), &headers)
 | 
						|
		if err != nil {
 | 
						|
			return nil, err
 | 
						|
		}
 | 
						|
		if len(headers) > 0 {
 | 
						|
			for k, header := range headers {
 | 
						|
				headerConfig, err := SharedHTTPHeaderDAO.ComposeHeaderConfig(header.Id)
 | 
						|
				if err != nil {
 | 
						|
					return nil, err
 | 
						|
				}
 | 
						|
				headers[k] = headerConfig
 | 
						|
			}
 | 
						|
			config.SetHeaders = headers
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	// ReplaceHeaders
 | 
						|
	if len(policy.ReplaceHeaders) > 0 {
 | 
						|
		headers := []*shared.HTTPHeaderConfig{}
 | 
						|
		err = json.Unmarshal([]byte(policy.ReplaceHeaders), &headers)
 | 
						|
		if err != nil {
 | 
						|
			return nil, err
 | 
						|
		}
 | 
						|
		if len(headers) > 0 {
 | 
						|
			for k, header := range headers {
 | 
						|
				headerConfig, err := SharedHTTPHeaderDAO.ComposeHeaderConfig(header.Id)
 | 
						|
				if err != nil {
 | 
						|
					return nil, err
 | 
						|
				}
 | 
						|
				headers[k] = headerConfig
 | 
						|
			}
 | 
						|
			config.ReplaceHeaders = headers
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	// Delete Headers
 | 
						|
	if len(policy.DeleteHeaders) > 0 {
 | 
						|
		headers := []string{}
 | 
						|
		err = json.Unmarshal([]byte(policy.DeleteHeaders), &headers)
 | 
						|
		if err != nil {
 | 
						|
			return nil, err
 | 
						|
		}
 | 
						|
		config.DeletedHeaders = headers
 | 
						|
	}
 | 
						|
 | 
						|
	// Expires
 | 
						|
	// TODO
 | 
						|
 | 
						|
	return config, nil
 | 
						|
}
 |