mirror of
https://github.com/TeaOSLab/EdgeAPI.git
synced 2025-11-03 23:20:26 +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()
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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