diff --git a/internal/web/actions/default/servers/components/waf/policy.go b/internal/web/actions/default/servers/components/waf/policy.go index 32dc8adb..16719e6e 100644 --- a/internal/web/actions/default/servers/components/waf/policy.go +++ b/internal/web/actions/default/servers/components/waf/policy.go @@ -47,11 +47,12 @@ func (this *PolicyAction) RunGet(params struct { } this.Data["firewallPolicy"] = maps.Map{ - "id": firewallPolicy.Id, - "name": firewallPolicy.Name, - "isOn": firewallPolicy.IsOn, - "description": firewallPolicy.Description, - "groups": internalGroups, + "id": firewallPolicy.Id, + "name": firewallPolicy.Name, + "isOn": firewallPolicy.IsOn, + "description": firewallPolicy.Description, + "groups": internalGroups, + "blockOptions": firewallPolicy.BlockOptions, } // 正在使用此策略的服务 diff --git a/internal/web/actions/default/servers/components/waf/update.go b/internal/web/actions/default/servers/components/waf/update.go index 276ab0de..9ec0f06f 100644 --- a/internal/web/actions/default/servers/components/waf/update.go +++ b/internal/web/actions/default/servers/components/waf/update.go @@ -8,6 +8,7 @@ import ( "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/firewallconfigs" "github.com/iwind/TeaGo/actions" "github.com/iwind/TeaGo/maps" + "net/http" ) type UpdateAction struct { @@ -30,11 +31,21 @@ func (this *UpdateAction) RunGet(params struct { this.NotFound("firewallPolicy", params.FirewallPolicyId) return } + + if firewallPolicy.BlockOptions == nil { + firewallPolicy.BlockOptions = &firewallconfigs.HTTPFirewallBlockAction{ + StatusCode: http.StatusForbidden, + Body: "Blocked By WAF", + URL: "", + } + } + this.Data["firewallPolicy"] = maps.Map{ - "id": firewallPolicy.Id, - "name": firewallPolicy.Name, - "description": firewallPolicy.Description, - "isOn": firewallPolicy.IsOn, + "id": firewallPolicy.Id, + "name": firewallPolicy.Name, + "description": firewallPolicy.Description, + "isOn": firewallPolicy.IsOn, + "blockOptions": firewallPolicy.BlockOptions, } // 预置分组 @@ -63,6 +74,7 @@ func (this *UpdateAction) RunPost(params struct { FirewallPolicyId int64 Name string GroupCodes []string + BlockOptionsJSON []byte Description string IsOn bool @@ -81,6 +93,7 @@ func (this *UpdateAction) RunPost(params struct { Name: params.Name, Description: params.Description, FirewallGroupCodes: params.GroupCodes, + BlockOptionsJSON: params.BlockOptionsJSON, }) if err != nil { this.ErrorPage(err) diff --git a/web/public/js/components/server/http-firewall-block-options.js b/web/public/js/components/server/http-firewall-block-options.js new file mode 100644 index 00000000..7341108b --- /dev/null +++ b/web/public/js/components/server/http-firewall-block-options.js @@ -0,0 +1,37 @@ +Vue.component("http-firewall-block-options", { + props: ["v-block-options"], + data: function () { + return { + blockOptions: this.vBlockOptions, + statusCode: this.vBlockOptions.statusCode + } + }, + watch: { + statusCode: function (v) { + let statusCode = parseInt(v) + if (isNaN(statusCode)) { + this.blockOptions.statusCode = 403 + } else { + this.blockOptions.statusCode = statusCode + } + } + }, + template: `
| 状态码 | ++ + | +
| 提示内容 | ++ + | +
 					
| 状态码 | +{{firewallPolicy.blockOptions.statusCode}} | +
| 提示内容 | +{{firewallPolicy.blockOptions.body}} | +
可以启用一些我们预置的规则组。