From 83b73c78801f68bc13b6bcdb4c02ed53ddcc848c Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Fri, 19 May 2023 19:52: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 --- .../settings/headers/createDeletePopup.go | 4 +- .../headers/createNonStandardHeaderPopup.go | 67 ++++++++++ .../settings/headers/deleteDeletingHeader.go | 8 +- .../headers/deleteNonStandardHeader.go | 52 ++++++++ .../servers/server/settings/headers/init.go | 2 + .../server/http-header-policy-box.js | 119 ++++++++++++------ .../headers/createNonStandardPopup.html | 16 +++ .../headers/createNonStandardPopup.js | 7 ++ 8 files changed, 233 insertions(+), 42 deletions(-) create mode 100644 internal/web/actions/default/servers/server/settings/headers/createNonStandardHeaderPopup.go create mode 100644 internal/web/actions/default/servers/server/settings/headers/deleteNonStandardHeader.go create mode 100644 web/views/@default/servers/server/settings/headers/createNonStandardPopup.html create mode 100644 web/views/@default/servers/server/settings/headers/createNonStandardPopup.js diff --git a/internal/web/actions/default/servers/server/settings/headers/createDeletePopup.go b/internal/web/actions/default/servers/server/settings/headers/createDeletePopup.go index bc029778..60fb17a7 100644 --- a/internal/web/actions/default/servers/server/settings/headers/createDeletePopup.go +++ b/internal/web/actions/default/servers/server/settings/headers/createDeletePopup.go @@ -45,14 +45,14 @@ func (this *CreateDeletePopupAction) RunPost(params struct { this.ErrorPage(err) return } - policyConfig := &shared.HTTPHeaderPolicy{} + var policyConfig = &shared.HTTPHeaderPolicy{} err = json.Unmarshal(policyConfigResp.HttpHeaderPolicyJSON, policyConfig) if err != nil { this.ErrorPage(err) return } - deleteHeaders := policyConfig.DeleteHeaders + var deleteHeaders = policyConfig.DeleteHeaders deleteHeaders = append(deleteHeaders, params.Name) _, err = this.RPC().HTTPHeaderPolicyRPC().UpdateHTTPHeaderPolicyDeletingHeaders(this.AdminContext(), &pb.UpdateHTTPHeaderPolicyDeletingHeadersRequest{ HttpHeaderPolicyId: params.HeaderPolicyId, diff --git a/internal/web/actions/default/servers/server/settings/headers/createNonStandardHeaderPopup.go b/internal/web/actions/default/servers/server/settings/headers/createNonStandardHeaderPopup.go new file mode 100644 index 00000000..6bfbeb62 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/headers/createNonStandardHeaderPopup.go @@ -0,0 +1,67 @@ +package headers + +import ( + "encoding/json" + "github.com/TeaOSLab/EdgeAdmin/internal/oplogs" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared" + "github.com/iwind/TeaGo/actions" +) + +type CreateNonStandardPopupAction struct { + actionutils.ParentAction +} + +func (this *CreateNonStandardPopupAction) Init() { + this.Nav("", "", "") +} + +func (this *CreateNonStandardPopupAction) RunGet(params struct { + HeaderPolicyId int64 + Type string +}) { + this.Data["headerPolicyId"] = params.HeaderPolicyId + this.Data["type"] = params.Type + + this.Show() +} + +func (this *CreateNonStandardPopupAction) RunPost(params struct { + HeaderPolicyId int64 + Name string + + Must *actions.Must +}) { + // 日志 + defer this.CreateLog(oplogs.LevelInfo, "添加非标的Header HeaderPolicyId: %d, Name: %s", params.HeaderPolicyId, params.Name) + + params.Must. + Field("name", params.Name). + Require("名称不能为空") + + policyConfigResp, err := this.RPC().HTTPHeaderPolicyRPC().FindEnabledHTTPHeaderPolicyConfig(this.AdminContext(), &pb.FindEnabledHTTPHeaderPolicyConfigRequest{HttpHeaderPolicyId: params.HeaderPolicyId}) + if err != nil { + this.ErrorPage(err) + return + } + var policyConfig = &shared.HTTPHeaderPolicy{} + err = json.Unmarshal(policyConfigResp.HttpHeaderPolicyJSON, policyConfig) + if err != nil { + this.ErrorPage(err) + return + } + + var nonStandardHeaders = policyConfig.NonStandardHeaders + nonStandardHeaders = append(nonStandardHeaders, params.Name) + _, err = this.RPC().HTTPHeaderPolicyRPC().UpdateHTTPHeaderPolicyNonStandardHeaders(this.AdminContext(), &pb.UpdateHTTPHeaderPolicyNonStandardHeadersRequest{ + HttpHeaderPolicyId: params.HeaderPolicyId, + HeaderNames: nonStandardHeaders, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/actions/default/servers/server/settings/headers/deleteDeletingHeader.go b/internal/web/actions/default/servers/server/settings/headers/deleteDeletingHeader.go index 8ed32793..36a71936 100644 --- a/internal/web/actions/default/servers/server/settings/headers/deleteDeletingHeader.go +++ b/internal/web/actions/default/servers/server/settings/headers/deleteDeletingHeader.go @@ -17,22 +17,22 @@ func (this *DeleteDeletingHeaderAction) RunPost(params struct { HeaderName string }) { // 日志 - defer this.CreateLog(oplogs.LevelInfo, "删除需要删除的请求Header,HeaderPolicyId:%d, HeaderName:%s", params.HeaderPolicyId, params.HeaderName) + defer this.CreateLog(oplogs.LevelInfo, "删除需要删除的Header,HeaderPolicyId:%d, HeaderName:%s", params.HeaderPolicyId, params.HeaderName) policyConfigResp, err := this.RPC().HTTPHeaderPolicyRPC().FindEnabledHTTPHeaderPolicyConfig(this.AdminContext(), &pb.FindEnabledHTTPHeaderPolicyConfigRequest{HttpHeaderPolicyId: params.HeaderPolicyId}) if err != nil { this.ErrorPage(err) return } - policyConfigJSON := policyConfigResp.HttpHeaderPolicyJSON - policyConfig := &shared.HTTPHeaderPolicy{} + var policyConfigJSON = policyConfigResp.HttpHeaderPolicyJSON + var policyConfig = &shared.HTTPHeaderPolicy{} err = json.Unmarshal(policyConfigJSON, policyConfig) if err != nil { this.ErrorPage(err) return } - headerNames := []string{} + var headerNames = []string{} for _, h := range policyConfig.DeleteHeaders { if h == params.HeaderName { continue diff --git a/internal/web/actions/default/servers/server/settings/headers/deleteNonStandardHeader.go b/internal/web/actions/default/servers/server/settings/headers/deleteNonStandardHeader.go new file mode 100644 index 00000000..3cc596e9 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/headers/deleteNonStandardHeader.go @@ -0,0 +1,52 @@ +package headers + +import ( + "encoding/json" + "github.com/TeaOSLab/EdgeAdmin/internal/oplogs" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared" +) + +type DeleteNonStandardHeaderAction struct { + actionutils.ParentAction +} + +func (this *DeleteNonStandardHeaderAction) RunPost(params struct { + HeaderPolicyId int64 + HeaderName string +}) { + // 日志 + defer this.CreateLog(oplogs.LevelInfo, "删除需要非标的Header,HeaderPolicyId:%d, HeaderName:%s", params.HeaderPolicyId, params.HeaderName) + + policyConfigResp, err := this.RPC().HTTPHeaderPolicyRPC().FindEnabledHTTPHeaderPolicyConfig(this.AdminContext(), &pb.FindEnabledHTTPHeaderPolicyConfigRequest{HttpHeaderPolicyId: params.HeaderPolicyId}) + if err != nil { + this.ErrorPage(err) + return + } + var policyConfigJSON = policyConfigResp.HttpHeaderPolicyJSON + var policyConfig = &shared.HTTPHeaderPolicy{} + err = json.Unmarshal(policyConfigJSON, policyConfig) + if err != nil { + this.ErrorPage(err) + return + } + + var headerNames = []string{} + for _, h := range policyConfig.NonStandardHeaders { + if h == params.HeaderName { + continue + } + headerNames = append(headerNames, h) + } + _, err = this.RPC().HTTPHeaderPolicyRPC().UpdateHTTPHeaderPolicyNonStandardHeaders(this.AdminContext(), &pb.UpdateHTTPHeaderPolicyNonStandardHeadersRequest{ + HttpHeaderPolicyId: params.HeaderPolicyId, + HeaderNames: headerNames, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/actions/default/servers/server/settings/headers/init.go b/internal/web/actions/default/servers/server/settings/headers/init.go index 57adce04..dea05d57 100644 --- a/internal/web/actions/default/servers/server/settings/headers/init.go +++ b/internal/web/actions/default/servers/server/settings/headers/init.go @@ -18,6 +18,8 @@ func init() { GetPost("/updateSetPopup", new(UpdateSetPopupAction)). GetPost("/createDeletePopup", new(CreateDeletePopupAction)). Post("/deleteDeletingHeader", new(DeleteDeletingHeaderAction)). + GetPost("/createNonStandardPopup", new(CreateNonStandardPopupAction)). + Post("/deleteNonStandardHeader", new(DeleteNonStandardHeaderAction)). Post("/delete", new(DeleteAction)). GetPost("/updateCORSPopup", new(UpdateCORSPopupAction)). EndAll() diff --git a/web/public/js/components/server/http-header-policy-box.js b/web/public/js/components/server/http-header-policy-box.js index eecf16c7..b0461367 100644 --- a/web/public/js/components/server/http-header-policy-box.js +++ b/web/public/js/components/server/http-header-policy-box.js @@ -29,6 +29,7 @@ Vue.component("http-header-policy-box", { // 请求相关 let requestSettingHeaders = [] let requestDeletingHeaders = [] + let requestNonStandardHeaders = [] let requestPolicy = this.vRequestHeaderPolicy if (requestPolicy != null) { @@ -38,11 +39,15 @@ Vue.component("http-header-policy-box", { if (requestPolicy.deleteHeaders != null) { requestDeletingHeaders = requestPolicy.deleteHeaders } + if (requestPolicy.nonStandardHeaders != null) { + requestNonStandardHeaders = requestPolicy.nonStandardHeaders + } } // 响应相关 let responseSettingHeaders = [] let responseDeletingHeaders = [] + let responseNonStandardHeaders = [] let responsePolicy = this.vResponseHeaderPolicy if (responsePolicy != null) { @@ -52,6 +57,9 @@ Vue.component("http-header-policy-box", { if (responsePolicy.deleteHeaders != null) { responseDeletingHeaders = responsePolicy.deleteHeaders } + if (responsePolicy.nonStandardHeaders != null) { + responseNonStandardHeaders = responsePolicy.nonStandardHeaders + } } let responseCORS = { @@ -64,12 +72,16 @@ Vue.component("http-header-policy-box", { return { type: type, typeName: (type == "request") ? "请求" : "响应", + requestHeaderRef: requestHeaderRef, responseHeaderRef: responseHeaderRef, requestSettingHeaders: requestSettingHeaders, requestDeletingHeaders: requestDeletingHeaders, + requestNonStandardHeaders: requestNonStandardHeaders, + responseSettingHeaders: responseSettingHeaders, responseDeletingHeaders: responseDeletingHeaders, + responseNonStandardHeaders: responseNonStandardHeaders, responseCORS: responseCORS } }, @@ -93,8 +105,15 @@ Vue.component("http-header-policy-box", { } }) }, + addNonStandardHeader: function (policyId, type) { + teaweb.popup("/servers/server/settings/headers/createNonStandardPopup?" + this.vParams + "&headerPolicyId=" + policyId + "&type=" + type, { + callback: function () { + teaweb.successRefresh("保存成功") + } + }) + }, updateSettingPopup: function (policyId, headerId) { - teaweb.popup("/servers/server/settings/headers/updateSetPopup?" + this.vParams + "&headerPolicyId=" + policyId + "&headerId=" + headerId+ "&type=" + this.type, { + teaweb.popup("/servers/server/settings/headers/updateSetPopup?" + this.vParams + "&headerPolicyId=" + policyId + "&headerId=" + headerId + "&type=" + this.type, { callback: function () { teaweb.successRefresh("保存成功") } @@ -111,6 +130,17 @@ Vue.component("http-header-policy-box", { .refresh() }) }, + deleteNonStandardHeader: function (policyId, headerName) { + teaweb.confirm("确定要删除'" + headerName + "'吗?", function () { + Tea.action("/servers/server/settings/headers/deleteNonStandardHeader") + .params({ + headerPolicyId: policyId, + headerName: headerName + }) + .post() + .refresh() + }) + }, deleteHeader: function (policyId, type, headerId) { teaweb.confirm("确定要删除此Header吗?", function () { this.$post("/servers/server/settings/headers/delete") @@ -186,20 +216,31 @@ Vue.component("http-header-policy-box", { -

删除请求Header

-

这里可以设置需要从请求中删除的Header。

+

其他设置

- - - - + + + + + + + + + +
需要删除的Header -
-
{{headerName}}
-
-
- -
删除Header +
+
{{headerName}}
+
+
+ +
非标Header +
+
{{headerName}}
+
+
+ +
@@ -254,32 +295,38 @@ Vue.component("http-header-policy-box", { -

删除响应Header

-

这里可以设置需要从响应中删除的Header。

- - - - - - -
需要删除的Header -
-
{{headerName}}
-
-
- -
-

其他设置

- - - - + + + + + + + + + + + + + +
CORS自适应跨域 - 已启用未启用   [修改] -

启用后,服务器可以服务器会自动生成Access-Control-*-*相关的Header。

-
删除Header +
+
{{headerName}}  
+
+
+ +
非标Header +
+
{{headerName}}  
+
+
+ +
CORS自适应跨域 + 已启用未启用   [修改] +

启用后,服务器可以服务器会自动生成Access-Control-*-*相关的Header。

+
diff --git a/web/views/@default/servers/server/settings/headers/createNonStandardPopup.html b/web/views/@default/servers/server/settings/headers/createNonStandardPopup.html new file mode 100644 index 00000000..b60bd04f --- /dev/null +++ b/web/views/@default/servers/server/settings/headers/createNonStandardPopup.html @@ -0,0 +1,16 @@ +{$layout "layout_popup"} + +

添加非标Header

+
+ + + + + + +
名称(Name) + +

比如hello_world

+
+ +
diff --git a/web/views/@default/servers/server/settings/headers/createNonStandardPopup.js b/web/views/@default/servers/server/settings/headers/createNonStandardPopup.js new file mode 100644 index 00000000..25cdde74 --- /dev/null +++ b/web/views/@default/servers/server/settings/headers/createNonStandardPopup.js @@ -0,0 +1,7 @@ +Tea.context(function () { + this.headerName = "" + + this.selectHeader = function (headerName) { + this.headerName = headerName + } +}) \ No newline at end of file