HTTP Header中支持设置非标Header

This commit is contained in:
GoEdgeLab
2023-05-19 19:54:10 +08:00
parent 23781a52f1
commit be0874dc37
4 changed files with 96 additions and 28 deletions

View File

@@ -157,6 +157,9 @@ func (this *HTTPHeaderPolicyDAO) UpdateDeletingHeaders(tx *dbs.Tx, policyId int6
return errors.New("invalid policyId") return errors.New("invalid policyId")
} }
if headerNames == nil {
headerNames = []string{}
}
namesJSON, err := json.Marshal(headerNames) namesJSON, err := json.Marshal(headerNames)
if err != nil { if err != nil {
return err return err
@@ -164,7 +167,31 @@ func (this *HTTPHeaderPolicyDAO) UpdateDeletingHeaders(tx *dbs.Tx, policyId int6
var op = NewHTTPHeaderPolicyOperator() var op = NewHTTPHeaderPolicyOperator()
op.Id = policyId 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) err = this.Save(tx, op)
if err != nil { if err != nil {
return err return err
@@ -220,6 +247,16 @@ func (this *HTTPHeaderPolicyDAO) ComposeHeaderPolicyConfig(tx *dbs.Tx, headerPol
config.DeleteHeaders = headers 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 // CORS
if IsNotNull(policy.Cors) { if IsNotNull(policy.Cors) {
var corsConfig = shared.NewHTTPCORSHeaderConfig() var corsConfig = shared.NewHTTPCORSHeaderConfig()

View File

@@ -16,6 +16,7 @@ type HTTPHeaderPolicy struct {
ReplaceHeaders dbs.JSON `field:"replaceHeaders"` // 替换Header内容 ReplaceHeaders dbs.JSON `field:"replaceHeaders"` // 替换Header内容
Expires dbs.JSON `field:"expires"` // Expires单独设置 Expires dbs.JSON `field:"expires"` // Expires单独设置
DeleteHeaders dbs.JSON `field:"deleteHeaders"` // 删除的Headers DeleteHeaders dbs.JSON `field:"deleteHeaders"` // 删除的Headers
NonStandardHeaders dbs.JSON `field:"nonStandardHeaders"` // 非标Headers
Cors dbs.JSON `field:"cors"` // CORS配置 Cors dbs.JSON `field:"cors"` // CORS配置
} }
@@ -32,6 +33,7 @@ type HTTPHeaderPolicyOperator struct {
ReplaceHeaders any // 替换Header内容 ReplaceHeaders any // 替换Header内容
Expires any // Expires单独设置 Expires any // Expires单独设置
DeleteHeaders any // 删除的Headers DeleteHeaders any // 删除的Headers
NonStandardHeaders any // 非标Headers
Cors any // CORS配置 Cors any // CORS配置
} }

View File

@@ -219,3 +219,28 @@ func (this *HTTPHeaderPolicyService) UpdateHTTPHeaderPolicyCORS(ctx context.Cont
return this.Success() 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()
}

View File

@@ -61579,7 +61579,7 @@
"name": "edgeHTTPHeaderPolicies", "name": "edgeHTTPHeaderPolicies",
"engine": "InnoDB", "engine": "InnoDB",
"charset": "utf8mb4_general_ci", "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": [ "fields": [
{ {
"name": "id", "name": "id",
@@ -61629,6 +61629,10 @@
"name": "deleteHeaders", "name": "deleteHeaders",
"definition": "json COMMENT '删除的Headers'" "definition": "json COMMENT '删除的Headers'"
}, },
{
"name": "nonStandardHeaders",
"definition": "json COMMENT '非标Headers'"
},
{ {
"name": "cors", "name": "cors",
"definition": "json COMMENT 'CORS配置'" "definition": "json COMMENT 'CORS配置'"