From 73d72f0d33550ac5a095a952171186803b5be8ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E7=A5=A5=E8=B6=85?= Date: Fri, 19 May 2023 19:54:10 +0800 Subject: [PATCH] =?UTF-8?q?HTTP=20Header=E4=B8=AD=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E9=9D=9E=E6=A0=87Header?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/db/models/http_header_policy_dao.go | 39 +++++++++++++- .../db/models/http_header_policy_model.go | 54 ++++++++++--------- .../services/service_http_header_policy.go | 25 +++++++++ internal/setup/sql.json | 6 ++- 4 files changed, 96 insertions(+), 28 deletions(-) diff --git a/internal/db/models/http_header_policy_dao.go b/internal/db/models/http_header_policy_dao.go index 6716eee8..73e645d6 100644 --- a/internal/db/models/http_header_policy_dao.go +++ b/internal/db/models/http_header_policy_dao.go @@ -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() diff --git a/internal/db/models/http_header_policy_model.go b/internal/db/models/http_header_policy_model.go index b6628cef..9052455a 100644 --- a/internal/db/models/http_header_policy_model.go +++ b/internal/db/models/http_header_policy_model.go @@ -4,35 +4,37 @@ import "github.com/iwind/TeaGo/dbs" // HTTPHeaderPolicy Header定义 type HTTPHeaderPolicy struct { - Id uint32 `field:"id"` // ID - IsOn bool `field:"isOn"` // 是否启用 - State uint8 `field:"state"` // 状态 - AdminId uint32 `field:"adminId"` // 管理员ID - UserId uint32 `field:"userId"` // 用户ID - CreatedAt uint64 `field:"createdAt"` // 创建时间 - AddHeaders dbs.JSON `field:"addHeaders"` // 添加的Header - AddTrailers dbs.JSON `field:"addTrailers"` // 添加的Trailers - SetHeaders dbs.JSON `field:"setHeaders"` // 设置Header - ReplaceHeaders dbs.JSON `field:"replaceHeaders"` // 替换Header内容 - Expires dbs.JSON `field:"expires"` // Expires单独设置 - DeleteHeaders dbs.JSON `field:"deleteHeaders"` // 删除的Headers - Cors dbs.JSON `field:"cors"` // CORS配置 + Id uint32 `field:"id"` // ID + IsOn bool `field:"isOn"` // 是否启用 + State uint8 `field:"state"` // 状态 + AdminId uint32 `field:"adminId"` // 管理员ID + UserId uint32 `field:"userId"` // 用户ID + CreatedAt uint64 `field:"createdAt"` // 创建时间 + AddHeaders dbs.JSON `field:"addHeaders"` // 添加的Header + AddTrailers dbs.JSON `field:"addTrailers"` // 添加的Trailers + SetHeaders dbs.JSON `field:"setHeaders"` // 设置Header + 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配置 } type HTTPHeaderPolicyOperator struct { - Id any // ID - IsOn any // 是否启用 - State any // 状态 - AdminId any // 管理员ID - UserId any // 用户ID - CreatedAt any // 创建时间 - AddHeaders any // 添加的Header - AddTrailers any // 添加的Trailers - SetHeaders any // 设置Header - ReplaceHeaders any // 替换Header内容 - Expires any // Expires单独设置 - DeleteHeaders any // 删除的Headers - Cors any // CORS配置 + Id any // ID + IsOn any // 是否启用 + State any // 状态 + AdminId any // 管理员ID + UserId any // 用户ID + CreatedAt any // 创建时间 + AddHeaders any // 添加的Header + AddTrailers any // 添加的Trailers + SetHeaders any // 设置Header + ReplaceHeaders any // 替换Header内容 + Expires any // Expires单独设置 + DeleteHeaders any // 删除的Headers + NonStandardHeaders any // 非标Headers + Cors any // CORS配置 } func NewHTTPHeaderPolicyOperator() *HTTPHeaderPolicyOperator { diff --git a/internal/rpc/services/service_http_header_policy.go b/internal/rpc/services/service_http_header_policy.go index 8895b1de..694fb801 100644 --- a/internal/rpc/services/service_http_header_policy.go +++ b/internal/rpc/services/service_http_header_policy.go @@ -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() +} diff --git a/internal/setup/sql.json b/internal/setup/sql.json index 2408fd99..481984cf 100644 --- a/internal/setup/sql.json +++ b/internal/setup/sql.json @@ -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配置'"