mirror of
				https://github.com/TeaOSLab/EdgeAPI.git
				synced 2025-11-04 07:50:25 +08:00 
			
		
		
		
	HTTP Header中支持设置非标Header
This commit is contained in:
		@@ -157,6 +157,9 @@ func (this *HTTPHeaderPolicyDAO) UpdateDeletingHeaders(tx *dbs.Tx, policyId int6
 | 
			
		||||
		return errors.New("invalid policyId")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if headerNames == nil {
 | 
			
		||||
		headerNames = []string{}
 | 
			
		||||
	}
 | 
			
		||||
	namesJSON, err := json.Marshal(headerNames)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
@@ -164,7 +167,31 @@ func (this *HTTPHeaderPolicyDAO) UpdateDeletingHeaders(tx *dbs.Tx, policyId int6
 | 
			
		||||
 | 
			
		||||
	var op = NewHTTPHeaderPolicyOperator()
 | 
			
		||||
	op.Id = policyId
 | 
			
		||||
	op.DeleteHeaders = string(namesJSON)
 | 
			
		||||
	op.DeleteHeaders = namesJSON
 | 
			
		||||
	err = this.Save(tx, op)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	return this.NotifyUpdate(tx, policyId)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UpdateNonStandardHeaders 修改非标Headers
 | 
			
		||||
func (this *HTTPHeaderPolicyDAO) UpdateNonStandardHeaders(tx *dbs.Tx, policyId int64, headerNames []string) error {
 | 
			
		||||
	if policyId <= 0 {
 | 
			
		||||
		return errors.New("invalid policyId")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if headerNames == nil {
 | 
			
		||||
		headerNames = []string{}
 | 
			
		||||
	}
 | 
			
		||||
	namesJSON, err := json.Marshal(headerNames)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var op = NewHTTPHeaderPolicyOperator()
 | 
			
		||||
	op.Id = policyId
 | 
			
		||||
	op.NonStandardHeaders = namesJSON
 | 
			
		||||
	err = this.Save(tx, op)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
@@ -220,6 +247,16 @@ func (this *HTTPHeaderPolicyDAO) ComposeHeaderPolicyConfig(tx *dbs.Tx, headerPol
 | 
			
		||||
		config.DeleteHeaders = headers
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Non-Standard Headers
 | 
			
		||||
	if IsNotNull(policy.NonStandardHeaders) {
 | 
			
		||||
		var headers = []string{}
 | 
			
		||||
		err = json.Unmarshal(policy.NonStandardHeaders, &headers)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
		config.NonStandardHeaders = headers
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CORS
 | 
			
		||||
	if IsNotNull(policy.Cors) {
 | 
			
		||||
		var corsConfig = shared.NewHTTPCORSHeaderConfig()
 | 
			
		||||
 
 | 
			
		||||
@@ -16,6 +16,7 @@ type HTTPHeaderPolicy struct {
 | 
			
		||||
	ReplaceHeaders     dbs.JSON `field:"replaceHeaders"`     // 替换Header内容
 | 
			
		||||
	Expires            dbs.JSON `field:"expires"`            // Expires单独设置
 | 
			
		||||
	DeleteHeaders      dbs.JSON `field:"deleteHeaders"`      // 删除的Headers
 | 
			
		||||
	NonStandardHeaders dbs.JSON `field:"nonStandardHeaders"` // 非标Headers
 | 
			
		||||
	Cors               dbs.JSON `field:"cors"`               // CORS配置
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -32,6 +33,7 @@ type HTTPHeaderPolicyOperator struct {
 | 
			
		||||
	ReplaceHeaders     any // 替换Header内容
 | 
			
		||||
	Expires            any // Expires单独设置
 | 
			
		||||
	DeleteHeaders      any // 删除的Headers
 | 
			
		||||
	NonStandardHeaders any // 非标Headers
 | 
			
		||||
	Cors               any // CORS配置
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -219,3 +219,28 @@ func (this *HTTPHeaderPolicyService) UpdateHTTPHeaderPolicyCORS(ctx context.Cont
 | 
			
		||||
 | 
			
		||||
	return this.Success()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UpdateHTTPHeaderPolicyNonStandardHeaders 修改非标的Headers
 | 
			
		||||
func (this *HTTPHeaderPolicyService) UpdateHTTPHeaderPolicyNonStandardHeaders(ctx context.Context, req *pb.UpdateHTTPHeaderPolicyNonStandardHeadersRequest) (*pb.RPCSuccess, error) {
 | 
			
		||||
	_, userId, err := this.ValidateAdminAndUser(ctx, true)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var tx = this.NullTx()
 | 
			
		||||
 | 
			
		||||
	// 检查权限
 | 
			
		||||
	if userId > 0 {
 | 
			
		||||
		err = models.SharedHTTPHeaderPolicyDAO.CheckUserHeaderPolicy(tx, userId, req.HttpHeaderPolicyId)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err = models.SharedHTTPHeaderPolicyDAO.UpdateNonStandardHeaders(tx, req.HttpHeaderPolicyId, req.HeaderNames)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return this.Success()
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -61579,7 +61579,7 @@
 | 
			
		||||
      "name": "edgeHTTPHeaderPolicies",
 | 
			
		||||
      "engine": "InnoDB",
 | 
			
		||||
      "charset": "utf8mb4_general_ci",
 | 
			
		||||
      "definition": "CREATE TABLE `edgeHTTPHeaderPolicies` (\n  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',\n  `isOn` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '是否启用',\n  `state` tinyint(1) unsigned DEFAULT '1' COMMENT '状态',\n  `adminId` int(11) unsigned DEFAULT '0' COMMENT '管理员ID',\n  `userId` int(11) unsigned DEFAULT '0' COMMENT '用户ID',\n  `createdAt` bigint(11) unsigned DEFAULT '0' COMMENT '创建时间',\n  `addHeaders` json DEFAULT NULL COMMENT '添加的Header',\n  `addTrailers` json DEFAULT NULL COMMENT '添加的Trailers',\n  `setHeaders` json DEFAULT NULL COMMENT '设置Header',\n  `replaceHeaders` json DEFAULT NULL COMMENT '替换Header内容',\n  `expires` json DEFAULT NULL COMMENT 'Expires单独设置',\n  `deleteHeaders` json DEFAULT NULL COMMENT '删除的Headers',\n  `cors` json DEFAULT NULL COMMENT 'CORS配置',\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Header定义'",
 | 
			
		||||
      "definition": "CREATE TABLE `edgeHTTPHeaderPolicies` (\n  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',\n  `isOn` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '是否启用',\n  `state` tinyint(1) unsigned DEFAULT '1' COMMENT '状态',\n  `adminId` int(11) unsigned DEFAULT '0' COMMENT '管理员ID',\n  `userId` int(11) unsigned DEFAULT '0' COMMENT '用户ID',\n  `createdAt` bigint(11) unsigned DEFAULT '0' COMMENT '创建时间',\n  `addHeaders` json DEFAULT NULL COMMENT '添加的Header',\n  `addTrailers` json DEFAULT NULL COMMENT '添加的Trailers',\n  `setHeaders` json DEFAULT NULL COMMENT '设置Header',\n  `replaceHeaders` json DEFAULT NULL COMMENT '替换Header内容',\n  `expires` json DEFAULT NULL COMMENT 'Expires单独设置',\n  `deleteHeaders` json DEFAULT NULL COMMENT '删除的Headers',\n  `nonStandardHeaders` json DEFAULT NULL COMMENT '非标Headers',\n  `cors` json DEFAULT NULL COMMENT 'CORS配置',\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Header定义'",
 | 
			
		||||
      "fields": [
 | 
			
		||||
        {
 | 
			
		||||
          "name": "id",
 | 
			
		||||
@@ -61629,6 +61629,10 @@
 | 
			
		||||
          "name": "deleteHeaders",
 | 
			
		||||
          "definition": "json COMMENT '删除的Headers'"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "name": "nonStandardHeaders",
 | 
			
		||||
          "definition": "json COMMENT '非标Headers'"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "name": "cors",
 | 
			
		||||
          "definition": "json COMMENT 'CORS配置'"
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user