mirror of
https://github.com/TeaOSLab/EdgeAPI.git
synced 2025-11-12 14: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")
|
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()
|
||||||
|
|||||||
@@ -4,35 +4,37 @@ import "github.com/iwind/TeaGo/dbs"
|
|||||||
|
|
||||||
// HTTPHeaderPolicy Header定义
|
// HTTPHeaderPolicy Header定义
|
||||||
type HTTPHeaderPolicy struct {
|
type HTTPHeaderPolicy struct {
|
||||||
Id uint32 `field:"id"` // ID
|
Id uint32 `field:"id"` // ID
|
||||||
IsOn bool `field:"isOn"` // 是否启用
|
IsOn bool `field:"isOn"` // 是否启用
|
||||||
State uint8 `field:"state"` // 状态
|
State uint8 `field:"state"` // 状态
|
||||||
AdminId uint32 `field:"adminId"` // 管理员ID
|
AdminId uint32 `field:"adminId"` // 管理员ID
|
||||||
UserId uint32 `field:"userId"` // 用户ID
|
UserId uint32 `field:"userId"` // 用户ID
|
||||||
CreatedAt uint64 `field:"createdAt"` // 创建时间
|
CreatedAt uint64 `field:"createdAt"` // 创建时间
|
||||||
AddHeaders dbs.JSON `field:"addHeaders"` // 添加的Header
|
AddHeaders dbs.JSON `field:"addHeaders"` // 添加的Header
|
||||||
AddTrailers dbs.JSON `field:"addTrailers"` // 添加的Trailers
|
AddTrailers dbs.JSON `field:"addTrailers"` // 添加的Trailers
|
||||||
SetHeaders dbs.JSON `field:"setHeaders"` // 设置Header
|
SetHeaders dbs.JSON `field:"setHeaders"` // 设置Header
|
||||||
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
|
||||||
Cors dbs.JSON `field:"cors"` // CORS配置
|
NonStandardHeaders dbs.JSON `field:"nonStandardHeaders"` // 非标Headers
|
||||||
|
Cors dbs.JSON `field:"cors"` // CORS配置
|
||||||
}
|
}
|
||||||
|
|
||||||
type HTTPHeaderPolicyOperator struct {
|
type HTTPHeaderPolicyOperator struct {
|
||||||
Id any // ID
|
Id any // ID
|
||||||
IsOn any // 是否启用
|
IsOn any // 是否启用
|
||||||
State any // 状态
|
State any // 状态
|
||||||
AdminId any // 管理员ID
|
AdminId any // 管理员ID
|
||||||
UserId any // 用户ID
|
UserId any // 用户ID
|
||||||
CreatedAt any // 创建时间
|
CreatedAt any // 创建时间
|
||||||
AddHeaders any // 添加的Header
|
AddHeaders any // 添加的Header
|
||||||
AddTrailers any // 添加的Trailers
|
AddTrailers any // 添加的Trailers
|
||||||
SetHeaders any // 设置Header
|
SetHeaders any // 设置Header
|
||||||
ReplaceHeaders any // 替换Header内容
|
ReplaceHeaders any // 替换Header内容
|
||||||
Expires any // Expires单独设置
|
Expires any // Expires单独设置
|
||||||
DeleteHeaders any // 删除的Headers
|
DeleteHeaders any // 删除的Headers
|
||||||
Cors any // CORS配置
|
NonStandardHeaders any // 非标Headers
|
||||||
|
Cors any // CORS配置
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewHTTPHeaderPolicyOperator() *HTTPHeaderPolicyOperator {
|
func NewHTTPHeaderPolicyOperator() *HTTPHeaderPolicyOperator {
|
||||||
|
|||||||
@@ -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()
|
||||||
|
}
|
||||||
|
|||||||
@@ -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配置'"
|
||||||
|
|||||||
Reference in New Issue
Block a user