From 89255cb437f47c63d9d35975a068c84e179d5731 Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Wed, 29 Nov 2023 16:57:58 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E2=80=9C=E6=9E=81=E9=AA=8C-?= =?UTF-8?q?=E8=A1=8C=E4=B8=BA=E9=AA=8C=E2=80=9D=E9=AA=8C=E8=AF=81=E7=A0=81?= =?UTF-8?q?=E9=9B=86=E6=88=90=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../default/servers/components/waf/index.go | 12 +++--- .../default/servers/components/waf/update.go | 17 ++++++++ .../server/settings/locations/waf/index.go | 22 +++++++--- .../servers/server/settings/waf/index.go | 22 +++++++--- .../http-firewall-captcha-options-viewer.js | 5 +++ .../server/http-firewall-captcha-options.js | 41 ++++++++++++++++++- .../server/http-firewall-config-box.js | 18 +++++++- 7 files changed, 117 insertions(+), 20 deletions(-) diff --git a/internal/web/actions/default/servers/components/waf/index.go b/internal/web/actions/default/servers/components/waf/index.go index 147e6e68..20d2a2c4 100644 --- a/internal/web/actions/default/servers/components/waf/index.go +++ b/internal/web/actions/default/servers/components/waf/index.go @@ -31,8 +31,8 @@ func (this *IndexAction) RunGet(params struct { this.ErrorPage(err) return } - count := countResp.Count - page := this.NewPage(count) + var count = countResp.Count + var page = this.NewPage(count) listResp, err := this.RPC().HTTPFirewallPolicyRPC().ListEnabledHTTPFirewallPolicies(this.AdminContext(), &pb.ListEnabledHTTPFirewallPoliciesRequest{ NodeClusterId: params.ClusterId, @@ -44,10 +44,10 @@ func (this *IndexAction) RunGet(params struct { this.ErrorPage(err) return } - policyMaps := []maps.Map{} + var policyMaps = []maps.Map{} for _, policy := range listResp.HttpFirewallPolicies { - countInbound := 0 - countOutbound := 0 + var countInbound = 0 + var countOutbound = 0 if len(policy.InboundJSON) > 0 { inboundConfig := &firewallconfigs.HTTPFirewallInboundConfig{} err = json.Unmarshal(policy.InboundJSON, inboundConfig) @@ -72,7 +72,7 @@ func (this *IndexAction) RunGet(params struct { this.ErrorPage(err) return } - countClusters := countClustersResp.Count + var countClusters = countClustersResp.Count // mode if len(policy.Mode) == 0 { diff --git a/internal/web/actions/default/servers/components/waf/update.go b/internal/web/actions/default/servers/components/waf/update.go index ad3a1e8f..92c743be 100644 --- a/internal/web/actions/default/servers/components/waf/update.go +++ b/internal/web/actions/default/servers/components/waf/update.go @@ -141,6 +141,23 @@ func (this *UpdateAction) RunPost(params struct { this.Fail("验证码动作参数校验失败:" + err.Error()) } + // 检查极验配置 + if captchaOptions.CaptchaType == firewallconfigs.CaptchaTypeGeeTest || captchaOptions.GeeTestConfig.IsOn { + if captchaOptions.CaptchaType == firewallconfigs.CaptchaTypeGeeTest && !captchaOptions.GeeTestConfig.IsOn { + this.Fail("人机识别动作配置的默认验证方式为极验-行为验,所以需要选择允许用户使用极验") + return + } + + if len(captchaOptions.GeeTestConfig.CaptchaId) == 0 { + this.FailField("geetestCaptchaId", "请输入极验-验证ID") + return + } + if len(captchaOptions.GeeTestConfig.CaptchaKey) == 0 { + this.FailField("geetestCaptchaKey", "请输入极验-验证Key") + return + } + } + // 最大内容尺寸 if params.MaxRequestBodySize < 0 { params.MaxRequestBodySize = 0 diff --git a/internal/web/actions/default/servers/server/settings/locations/waf/index.go b/internal/web/actions/default/servers/server/settings/locations/waf/index.go index 20769838..d816e7ca 100644 --- a/internal/web/actions/default/servers/server/settings/locations/waf/index.go +++ b/internal/web/actions/default/servers/server/settings/locations/waf/index.go @@ -1,6 +1,7 @@ package waf 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" @@ -37,12 +38,23 @@ func (this *IndexAction) RunGet(params struct { return } if firewallPolicy != nil { + // captcha action + var captchaOptions = firewallconfigs.DefaultHTTPFirewallCaptchaAction() + if len(firewallPolicy.CaptchaOptionsJSON) > 0 { + err = json.Unmarshal(firewallPolicy.CaptchaOptionsJSON, captchaOptions) + if err != nil { + this.ErrorPage(err) + return + } + } + this.Data["firewallPolicy"] = maps.Map{ - "id": firewallPolicy.Id, - "name": firewallPolicy.Name, - "isOn": firewallPolicy.IsOn, - "mode": firewallPolicy.Mode, - "modeInfo": firewallconfigs.FindFirewallMode(firewallPolicy.Mode), + "id": firewallPolicy.Id, + "name": firewallPolicy.Name, + "isOn": firewallPolicy.IsOn, + "mode": firewallPolicy.Mode, + "modeInfo": firewallconfigs.FindFirewallMode(firewallPolicy.Mode), + "captchaOptions": captchaOptions, } } else { this.Data["firewallPolicy"] = nil diff --git a/internal/web/actions/default/servers/server/settings/waf/index.go b/internal/web/actions/default/servers/server/settings/waf/index.go index e41c5852..0d710f2a 100644 --- a/internal/web/actions/default/servers/server/settings/waf/index.go +++ b/internal/web/actions/default/servers/server/settings/waf/index.go @@ -1,6 +1,7 @@ package waf 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" @@ -50,12 +51,23 @@ func (this *IndexAction) RunGet(params struct { return } if firewallPolicy != nil { + // captcha action + var captchaOptions = firewallconfigs.DefaultHTTPFirewallCaptchaAction() + if len(firewallPolicy.CaptchaOptionsJSON) > 0 { + err = json.Unmarshal(firewallPolicy.CaptchaOptionsJSON, captchaOptions) + if err != nil { + this.ErrorPage(err) + return + } + } + this.Data["firewallPolicy"] = maps.Map{ - "id": firewallPolicy.Id, - "name": firewallPolicy.Name, - "isOn": firewallPolicy.IsOn, - "mode": firewallPolicy.Mode, - "modeInfo": firewallconfigs.FindFirewallMode(firewallPolicy.Mode), + "id": firewallPolicy.Id, + "name": firewallPolicy.Name, + "isOn": firewallPolicy.IsOn, + "mode": firewallPolicy.Mode, + "modeInfo": firewallconfigs.FindFirewallMode(firewallPolicy.Mode), + "captchaAction": captchaOptions, } } else { this.Data["firewallPolicy"] = nil diff --git a/web/public/js/components/server/http-firewall-captcha-options-viewer.js b/web/public/js/components/server/http-firewall-captcha-options-viewer.js index 440c7516..3b0f4c8e 100644 --- a/web/public/js/components/server/http-firewall-captcha-options-viewer.js +++ b/web/public/js/components/server/http-firewall-captcha-options-viewer.js @@ -57,6 +57,11 @@ Vue.component("http-firewall-captcha-options-viewer", { summaryList.push("定制UI") } } + + if (this.options.geeTestConfig.isOn) { + summaryList.push("已配置极验") + } + if (summaryList.length == 0) { this.summary = "默认配置" } else { diff --git a/web/public/js/components/server/http-firewall-captcha-options.js b/web/public/js/components/server/http-firewall-captcha-options.js index a1f5ab98..45984d2b 100644 --- a/web/public/js/components/server/http-firewall-captcha-options.js +++ b/web/public/js/components/server/http-firewall-captcha-options.js @@ -22,7 +22,12 @@ Vue.component("http-firewall-captcha-options", { uiFooter: "", uiBody: "", cookieId: "", - lang: "" + lang: "", + geeTestConfig: { + isOn: false, + captchaId: "", + captchaKey: "" + } } } if (options.countLetters <= 0) { @@ -33,6 +38,7 @@ Vue.component("http-firewall-captcha-options", { options.captchaType = "default" } + return { options: options, isEditing: false, @@ -92,6 +98,9 @@ Vue.component("http-firewall-captcha-options", { } else { this.uiBodyWarning = "" } + }, + "options.geeTestConfig.isOn": function (v) { + this.updateSummary() } }, methods: { @@ -127,6 +136,10 @@ Vue.component("http-firewall-captcha-options", { } } + if (this.options.geeTestConfig.isOn) { + summaryList.push("已配置极验") + } + if (summaryList.length == 0) { this.summary = "默认配置" } else { @@ -202,7 +215,6 @@ Vue.component("http-firewall-captcha-options", { 定制UI - @@ -254,6 +266,31 @@ Vue.component("http-firewall-captcha-options", { + + + + + + + + + + + + + + + + +
允许用户使用极验 +

选中后,表示允许用户在WAF设置中选择极验。

+
极验-验证ID * + +

在极验控制台--业务管理中获取。

+
极验-验证Key * + +

在极验控制台--业务管理中获取。

+
` diff --git a/web/public/js/components/server/http-firewall-config-box.js b/web/public/js/components/server/http-firewall-config-box.js index 6c0bb522..10431956 100644 --- a/web/public/js/components/server/http-firewall-config-box.js +++ b/web/public/js/components/server/http-firewall-config-box.js @@ -16,11 +16,25 @@ Vue.component("http-firewall-config-box", { firewall.defaultCaptchaType = "none" } + let allCaptchaTypes = window.WAF_CAPTCHA_TYPES.$copy() + + // geetest + let geeTestIsOn = false + if (this.vFirewallPolicy != null && this.vFirewallPolicy.captchaAction != null && this.vFirewallPolicy.captchaAction.geeTestConfig != null) { + geeTestIsOn = this.vFirewallPolicy.captchaAction.geeTestConfig.isOn + } + + // 如果没有启用geetest,则还原 + if (!geeTestIsOn && firewall.defaultCaptchaType == "geetest") { + firewall.defaultCaptchaType = "none" + } + return { firewall: firewall, moreOptionsVisible: false, execGlobalRules: !firewall.ignoreGlobalRules, - captchaTypes: window.WAF_CAPTCHA_TYPES + captchaTypes: allCaptchaTypes, + geeTestIsOn: geeTestIsOn } }, watch: { @@ -66,7 +80,7 @@ Vue.component("http-firewall-config-box", {

使用系统默认的设置。

{{captchaType.description}}