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内容,支持请求变量。
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。
页面文件是相对于节点安装目录的页面文件比如web/pages/40x.html,或者一个完整的URL。
+ +将从此URL中读取内容。
[使用模板]。填写页面的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。
页面文件是相对于节点安装目录的页面文件比如web/pages/40x.html,或者一个完整的URL。
+ +将从此URL中读取内容。
[使用模板]。填写页面的HTML内容,支持请求变量。