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 84870cf2..aa238a52 100644 --- a/internal/web/actions/default/servers/server/settings/pages/createPopup.go +++ b/internal/web/actions/default/servers/server/settings/pages/createPopup.go @@ -6,6 +6,7 @@ import ( "github.com/TeaOSLab/EdgeCommon/pkg/langs/codes" "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" ) @@ -31,26 +32,32 @@ func (this *CreatePopupAction) RunPost(params struct { URL string `alias:"url"` Body string + ExceptURLPatternsJSON []byte + OnlyURLPatternsJSON []byte + NewStatus int Must *actions.Must }) { - // TODO 对状态码进行更多校验 - params.Must. Field("status", params.Status). Require("请输入响应状态码") + if len(params.Status) != 3 { + this.FailField("status", "状态码长度必须为3位") + return + } + switch params.BodyType { case serverconfigs.HTTPPageBodyTypeURL: params.Must. Field("url", params.URL). Require("请输入要显示的URL"). - Match( `^(?i)(http|https)://`, "请输入正确的URL") + Match(`^(?i)(http|https)://`, "请输入正确的URL") case serverconfigs.HTTPPageBodyTypeRedirectURL: params.Must. Field("url", params.URL). Require("请输入要跳转的URL"). - Match( `^(?i)(http|https)://`, "请输入正确的URL") + Match(`^(?i)(http|https)://`, "请输入正确的URL") case serverconfigs.HTTPPageBodyTypeHTML: params.Must. Field("body", params.Body). @@ -62,12 +69,32 @@ func (this *CreatePopupAction) RunPost(params struct { } } + var exceptURLPatterns = []*shared.URLPattern{} + if len(params.ExceptURLPatternsJSON) > 0 { + err := json.Unmarshal(params.ExceptURLPatternsJSON, &exceptURLPatterns) + if err != nil { + this.ErrorPage(err) + return + } + } + + var onlyURLPatterns = []*shared.URLPattern{} + if len(params.OnlyURLPatternsJSON) > 0 { + err := json.Unmarshal(params.OnlyURLPatternsJSON, &onlyURLPatterns) + if err != nil { + this.ErrorPage(err) + return + } + } + createResp, err := this.RPC().HTTPPageRPC().CreateHTTPPage(this.AdminContext(), &pb.CreateHTTPPageRequest{ - StatusList: []string{params.Status}, - BodyType: params.BodyType, - Url: params.URL, - Body: params.Body, - NewStatus: types.Int32(params.NewStatus), + StatusList: []string{params.Status}, + BodyType: params.BodyType, + Url: params.URL, + Body: params.Body, + NewStatus: types.Int32(params.NewStatus), + ExceptURLPatternsJSON: params.ExceptURLPatternsJSON, + OnlyURLPatternsJSON: params.OnlyURLPatternsJSON, }) 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 af159a65..5b053465 100644 --- a/internal/web/actions/default/servers/server/settings/pages/updatePopup.go +++ b/internal/web/actions/default/servers/server/settings/pages/updatePopup.go @@ -6,6 +6,7 @@ import ( "github.com/TeaOSLab/EdgeCommon/pkg/langs/codes" "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" ) @@ -29,12 +30,18 @@ func (this *UpdatePopupAction) RunGet(params struct { return } - pageConfig := &serverconfigs.HTTPPageConfig{} + var pageConfig = &serverconfigs.HTTPPageConfig{} err = json.Unmarshal(configResp.PageJSON, pageConfig) if err != nil { this.ErrorPage(err) return } + if pageConfig.ExceptURLPatterns == nil { + pageConfig.ExceptURLPatterns = []*shared.URLPattern{} + } + if pageConfig.OnlyURLPatterns == nil { + pageConfig.OnlyURLPatterns = []*shared.URLPattern{} + } this.Data["pageConfig"] = pageConfig this.Show() @@ -49,6 +56,9 @@ func (this *UpdatePopupAction) RunPost(params struct { URL string `alias:"url"` Body string + ExceptURLPatternsJSON []byte + OnlyURLPatternsJSON []byte + NewStatus int Must *actions.Must @@ -60,6 +70,11 @@ func (this *UpdatePopupAction) RunPost(params struct { Field("status", params.Status). Require("请输入响应状态码") + if len(params.Status) != 3 { + this.FailField("status", "状态码长度必须为3位") + return + } + switch params.BodyType { case serverconfigs.HTTPPageBodyTypeURL: params.Must. @@ -82,13 +97,33 @@ func (this *UpdatePopupAction) RunPost(params struct { } } + var exceptURLPatterns = []*shared.URLPattern{} + if len(params.ExceptURLPatternsJSON) > 0 { + err := json.Unmarshal(params.ExceptURLPatternsJSON, &exceptURLPatterns) + if err != nil { + this.ErrorPage(err) + return + } + } + + var onlyURLPatterns = []*shared.URLPattern{} + if len(params.OnlyURLPatternsJSON) > 0 { + err := json.Unmarshal(params.OnlyURLPatternsJSON, &onlyURLPatterns) + if err != nil { + this.ErrorPage(err) + return + } + } + _, err := this.RPC().HTTPPageRPC().UpdateHTTPPage(this.AdminContext(), &pb.UpdateHTTPPageRequest{ - HttpPageId: params.PageId, - StatusList: []string{params.Status}, - BodyType: params.BodyType, - Url: params.URL, - Body: params.Body, - NewStatus: types.Int32(params.NewStatus), + HttpPageId: params.PageId, + StatusList: []string{params.Status}, + BodyType: params.BodyType, + Url: params.URL, + Body: params.Body, + NewStatus: types.Int32(params.NewStatus), + ExceptURLPatternsJSON: params.ExceptURLPatternsJSON, + OnlyURLPatternsJSON: params.OnlyURLPatternsJSON, }) if err != nil { this.ErrorPage(err) diff --git a/web/public/js/components/common/url-patterns-box.js b/web/public/js/components/common/url-patterns-box.js index 6755317a..fc62a93f 100644 --- a/web/public/js/components/common/url-patterns-box.js +++ b/web/public/js/components/common/url-patterns-box.js @@ -5,6 +5,7 @@ Vue.component("url-patterns-box", { if (this.value != null) { patterns = this.value } + return { patterns: patterns, isAdding: false, @@ -12,7 +13,9 @@ Vue.component("url-patterns-box", { addingPattern: {"type": "wildcard", "pattern": ""}, editingIndex: -1, - patternIsInvalid: false + patternIsInvalid: false, + + windowIsSmall: window.innerWidth < 600 } }, methods: { @@ -105,7 +108,7 @@ Vue.component("url-patterns-box", {
-
+
-
+
- + - + + + + + + +
响应状态码响应状态码 页面类型操作新状态码例外URL限制URL操作
- {{page.status[0]}} - {{page.status}} + + {{page.status[0]}} + {{page.status}} + + +
{{page.url}}
- 读取 - {{page.newStatus}} + 读取URL
{{page.url}}
- 跳转 + 跳转URL {{page.newStatus}}
@@ -95,6 +101,22 @@ Vue.component("http-pages-box", {
+ {{page.newStatus}} + 保持 + +
+ {{urlPattern.pattern}} +
+ - +
+
+ {{urlPattern.pattern}} +
+ - +
修改   删除 diff --git a/web/views/@default/servers/server/settings/pages/createPopup.html b/web/views/@default/servers/server/settings/pages/createPopup.html index ad0a0ec5..05a1eca5 100644 --- a/web/views/@default/servers/server/settings/pages/createPopup.html +++ b/web/views/@default/servers/server/settings/pages/createPopup.html @@ -1,6 +1,9 @@ {$layout "layout_popup"}

添加自定义页面

+ + + @@ -20,7 +23,7 @@ @@ -38,13 +41,26 @@

将会跳转到此URL。

- - - - + + + + + + + + + + + + + + + + +
响应状态码 *
显示页面HTML * - +

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

新状态码 - -

可以用来修改响应的状态码,不填表示不改变原有状态码。

-
例外URL  
限制URL  
新状态码 + +

可以用来修改响应的状态码,不填表示不改变原有状态码。

+
\ No newline at end of file diff --git a/web/views/@default/servers/server/settings/pages/createPopup.js b/web/views/@default/servers/server/settings/pages/createPopup.js index 9305eafa..5b5bca5a 100644 --- a/web/views/@default/servers/server/settings/pages/createPopup.js +++ b/web/views/@default/servers/server/settings/pages/createPopup.js @@ -22,4 +22,7 @@ Tea.context(function () { ` } + + this.exceptURLPatterns = [] + this.onlyURLPatterns = [] }) \ No newline at end of file diff --git a/web/views/@default/servers/server/settings/pages/updatePopup.html b/web/views/@default/servers/server/settings/pages/updatePopup.html index e960e793..bfe691d3 100644 --- a/web/views/@default/servers/server/settings/pages/updatePopup.html +++ b/web/views/@default/servers/server/settings/pages/updatePopup.html @@ -2,6 +2,8 @@

修改自定义页面

+ + @@ -39,13 +41,26 @@

将会跳转到此URL。

- - - - + + + + + + + + + + + + + + + + +
响应状态码 *
新状态码 - -

可以用来修改响应的状态码,不填表示不改变原有状态码。

-
例外URL  
限制URL  
新状态码 + +

可以用来修改响应的状态码,不填表示不改变原有状态码。

+
\ No newline at end of file