From 5f69761ac45ea5c757b10d38436cb7591a07c0c2 Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Fri, 7 Jul 2023 11:48:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E8=AE=BE=E7=BD=AE=EF=BC=8C=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?URL=E4=B8=8D=E5=86=8D=E6=94=AF=E6=8C=81=E5=A1=AB=E5=86=99?= =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/settings/pages/createPopup.go | 3 +- .../servers/server/settings/pages/index.go | 74 +++++++++++++++++-- .../server/settings/pages/updatePopup.go | 3 +- .../server/http-pages-and-shutdown-box.js | 13 ++-- .../server/settings/pages/createPopup.html | 10 +-- .../server/settings/pages/updatePopup.html | 10 +-- 6 files changed, 89 insertions(+), 24 deletions(-) diff --git a/internal/web/actions/default/servers/server/settings/pages/createPopup.go b/internal/web/actions/default/servers/server/settings/pages/createPopup.go index 832f81e7..c42a29cb 100644 --- a/internal/web/actions/default/servers/server/settings/pages/createPopup.go +++ b/internal/web/actions/default/servers/server/settings/pages/createPopup.go @@ -45,7 +45,8 @@ func (this *CreatePopupAction) RunPost(params struct { case shared.BodyTypeURL: params.Must. Field("url", params.URL). - Require("请输入要显示的URL") + Require("请输入要显示的URL"). + Match( `^(?i)(http|https)://`, "请输入正确的URL") case shared.BodyTypeHTML: params.Must. Field("body", params.Body). diff --git a/internal/web/actions/default/servers/server/settings/pages/index.go b/internal/web/actions/default/servers/server/settings/pages/index.go index ad3120d0..72e1b0f4 100644 --- a/internal/web/actions/default/servers/server/settings/pages/index.go +++ b/internal/web/actions/default/servers/server/settings/pages/index.go @@ -1,11 +1,16 @@ package pages -import ( "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" +import ( + "encoding/json" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" "github.com/TeaOSLab/EdgeCommon/pkg/langs/codes" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/dao" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared" "github.com/iwind/TeaGo/actions" "github.com/iwind/TeaGo/types" + "regexp" ) type IndexAction struct { @@ -46,18 +51,75 @@ func (this *IndexAction) RunGet(params struct { func (this *IndexAction) RunPost(params struct { WebId int64 - PagesJSON string - ShutdownJSON string + PagesJSON []byte + ShutdownJSON []byte Must *actions.Must }) { // 日志 defer this.CreateLogInfo(codes.ServerPage_LogUpdatePages, params.WebId) - // TODO 检查配置 + // 检查配置 + var urlReg = regexp.MustCompile(`^(?i)(http|https)://`) + + // validate pages + if len(params.PagesJSON) > 0 { + var pages = []*serverconfigs.HTTPPageConfig{} + err := json.Unmarshal(params.PagesJSON, &pages) + if err != nil { + this.ErrorPage(err) + return + } + for _, page := range pages { + err = page.Init() + if err != nil { + this.Fail("配置校验失败:" + err.Error()) + return + } + + // check url + if page.BodyType == shared.BodyTypeURL && !urlReg.MatchString(page.URL) { + this.Fail("自定义页面中 '" + page.URL + "' 不是一个正确的URL,请进行修改") + return + } + } + } + + // validate shutdown page + if len(params.ShutdownJSON) > 0 { + var shutdownConfig = &serverconfigs.HTTPShutdownConfig{} + err := json.Unmarshal(params.ShutdownJSON, shutdownConfig) + if err != nil { + this.ErrorPage(err) + return + } + + err = shutdownConfig.Init() + if err != nil { + this.Fail("配置校验失败:" + err.Error()) + return + } + + if shutdownConfig.BodyType == shared.BodyTypeURL { + if len(shutdownConfig.URL) > 512 { + this.Fail("临时关闭页面中URL过长,不能超过512字节") + return + } + + if !urlReg.MatchString(shutdownConfig.URL) { + this.Fail("临时关闭页面中 '" + shutdownConfig.URL + "' 不是一个正确的URL,请进行修改") + return + } + } else if shutdownConfig.Body == shared.BodyTypeHTML { + if len(shutdownConfig.Body) > 32*1024 { + this.Fail("临时关闭页面中HTML内容长度不能超过32K") + return + } + } + } _, err := this.RPC().HTTPWebRPC().UpdateHTTPWebPages(this.AdminContext(), &pb.UpdateHTTPWebPagesRequest{ HttpWebId: params.WebId, - PagesJSON: []byte(params.PagesJSON), + PagesJSON: params.PagesJSON, }) if err != nil { this.ErrorPage(err) @@ -66,7 +128,7 @@ func (this *IndexAction) RunPost(params struct { _, err = this.RPC().HTTPWebRPC().UpdateHTTPWebShutdown(this.AdminContext(), &pb.UpdateHTTPWebShutdownRequest{ HttpWebId: params.WebId, - ShutdownJSON: []byte(params.ShutdownJSON), + ShutdownJSON: params.ShutdownJSON, }) if err != nil { this.ErrorPage(err) diff --git a/internal/web/actions/default/servers/server/settings/pages/updatePopup.go b/internal/web/actions/default/servers/server/settings/pages/updatePopup.go index 93f5fcf3..175b553d 100644 --- a/internal/web/actions/default/servers/server/settings/pages/updatePopup.go +++ b/internal/web/actions/default/servers/server/settings/pages/updatePopup.go @@ -65,7 +65,8 @@ func (this *UpdatePopupAction) RunPost(params struct { case shared.BodyTypeURL: params.Must. Field("url", params.URL). - Require("请输入要显示的URL") + Require("请输入要显示的URL"). + Match( `^(?i)(http|https)://`, "请输入正确的URL") case shared.BodyTypeHTML: params.Must. Field("body", params.Body). diff --git a/web/public/js/components/server/http-pages-and-shutdown-box.js b/web/public/js/components/server/http-pages-and-shutdown-box.js index b68df276..9618f77a 100644 --- a/web/public/js/components/server/http-pages-and-shutdown-box.js +++ b/web/public/js/components/server/http-pages-and-shutdown-box.js @@ -114,18 +114,19 @@ Vue.component("http-pages-and-shutdown-box", { - 开启 + 临时关闭网站
+

选中后,表示临时关闭当前网站,并显示自定义内容。

- 内容类型 * + 显示内容类型 * -

页面文件是相对于节点安装目录的页面文件比如pages/40x.html,或者一个完整的URL。

+ +

将从此URL中读取内容。

- HTML * + 显示页面HTML *

[使用模板]。填写页面的HTML内容,支持请求变量。

diff --git a/web/views/@default/servers/server/settings/pages/createPopup.html b/web/views/@default/servers/server/settings/pages/createPopup.html index 9579d284..7a85d0c5 100644 --- a/web/views/@default/servers/server/settings/pages/createPopup.html +++ b/web/views/@default/servers/server/settings/pages/createPopup.html @@ -6,7 +6,7 @@ 响应状态码 * -

比如404,或者50x。

+

匹配的响应状态码,比如404,或者50x。

@@ -18,14 +18,14 @@ - URL * + 显示页面URL * - -

页面文件是相对于节点安装目录的页面文件比如web/pages/40x.html,或者一个完整的URL。

+ +

将从此URL中读取内容。

- HTML * + 显示页面HTML *

[使用模板]。填写页面的HTML内容,支持请求变量。

diff --git a/web/views/@default/servers/server/settings/pages/updatePopup.html b/web/views/@default/servers/server/settings/pages/updatePopup.html index 16822fe5..d9650c29 100644 --- a/web/views/@default/servers/server/settings/pages/updatePopup.html +++ b/web/views/@default/servers/server/settings/pages/updatePopup.html @@ -7,7 +7,7 @@ 响应状态码 * -

比如404,或者50x。

+

匹配的响应状态码,比如404,或者50x。

@@ -19,14 +19,14 @@ - URL * + 显示页面URL * - -

页面文件是相对于节点安装目录的页面文件比如web/pages/40x.html,或者一个完整的URL。

+ +

将从此URL中读取内容。

- HTML * + 显示页面HTML *

[使用模板]。填写页面的HTML内容,支持请求变量。