diff --git a/internal/web/actions/default/servers/server/settings/waf/init.go b/internal/web/actions/default/servers/server/settings/waf/init.go index 526a65d5..e53abf2e 100644 --- a/internal/web/actions/default/servers/server/settings/waf/init.go +++ b/internal/web/actions/default/servers/server/settings/waf/init.go @@ -17,8 +17,8 @@ func init() { GetPost("", new(IndexAction)). Get("/ipadmin/allowList", new(ipadmin.AllowListAction)). Get("/ipadmin/denyList", new(ipadmin.DenyListAction)). - //GetPost("/ipadmin", new(ipadmin.IndexAction)). - //GetPost("/ipadmin/provinces", new(ipadmin.ProvincesAction)). + GetPost("/ipadmin/countries", new(ipadmin.CountriesAction)). + GetPost("/ipadmin/provinces", new(ipadmin.ProvincesAction)). GetPost("/ipadmin/createIPPopup", new(ipadmin.CreateIPPopupAction)). GetPost("/ipadmin/updateIPPopup", new(ipadmin.UpdateIPPopupAction)). Post("/ipadmin/deleteIP", new(ipadmin.DeleteIPAction)). diff --git a/internal/web/actions/default/servers/server/settings/waf/ipadmin/index.go b/internal/web/actions/default/servers/server/settings/waf/ipadmin/countries.go similarity index 82% rename from internal/web/actions/default/servers/server/settings/waf/ipadmin/index.go rename to internal/web/actions/default/servers/server/settings/waf/ipadmin/countries.go index 4535a802..4bc68e7b 100644 --- a/internal/web/actions/default/servers/server/settings/waf/ipadmin/index.go +++ b/internal/web/actions/default/servers/server/settings/waf/ipadmin/countries.go @@ -13,17 +13,22 @@ import ( "strings" ) -type IndexAction struct { +type CountriesAction struct { actionutils.ParentAction } -func (this *IndexAction) Init() { - this.Nav("", "", "ipadmin") +func (this *CountriesAction) Init() { + this.Nav("", "setting", "country") + this.SecondMenu("waf") } -func (this *IndexAction) RunGet(params struct { +func (this *CountriesAction) RunGet(params struct { FirewallPolicyId int64 + ServerId int64 }) { + this.Data["featureIsOn"] = true + this.Data["firewallPolicyId"] = params.FirewallPolicyId + this.Data["subMenuItem"] = "region" // 当前选中的地区 @@ -57,10 +62,18 @@ func (this *IndexAction) RunGet(params struct { } this.Data["countries"] = countryMaps + // WAF是否启用 + webConfig, err := dao.SharedHTTPWebDAO.FindWebConfigWithServerId(this.AdminContext(), params.ServerId) + if err != nil { + this.ErrorPage(err) + return + } + this.Data["wafIsOn"] = webConfig.FirewallRef != nil && webConfig.FirewallRef.IsOn + this.Show() } -func (this *IndexAction) RunPost(params struct { +func (this *CountriesAction) RunPost(params struct { FirewallPolicyId int64 CountryIds []int64 diff --git a/internal/web/actions/default/servers/server/settings/waf/ipadmin/provinces.go b/internal/web/actions/default/servers/server/settings/waf/ipadmin/provinces.go index b6592c5c..3b92ffe4 100644 --- a/internal/web/actions/default/servers/server/settings/waf/ipadmin/provinces.go +++ b/internal/web/actions/default/servers/server/settings/waf/ipadmin/provinces.go @@ -19,12 +19,16 @@ type ProvincesAction struct { } func (this *ProvincesAction) Init() { - this.Nav("", "", "ipadmin") + this.Nav("", "setting", "province") + this.SecondMenu("waf") } func (this *ProvincesAction) RunGet(params struct { FirewallPolicyId int64 + ServerId int64 }) { + this.Data["featureIsOn"] = true + this.Data["firewallPolicyId"] = params.FirewallPolicyId this.Data["subMenuItem"] = "province" // 当前选中的省份 @@ -59,6 +63,14 @@ func (this *ProvincesAction) RunGet(params struct { } this.Data["provinces"] = provinceMaps + // WAF是否启用 + webConfig, err := dao.SharedHTTPWebDAO.FindWebConfigWithServerId(this.AdminContext(), params.ServerId) + if err != nil { + this.ErrorPage(err) + return + } + this.Data["wafIsOn"] = webConfig.FirewallRef != nil && webConfig.FirewallRef.IsOn + this.Show() } diff --git a/web/views/@default/servers/server/settings/waf/@menu.html b/web/views/@default/servers/server/settings/waf/@menu.html index b37d53cc..f6608570 100644 --- a/web/views/@default/servers/server/settings/waf/@menu.html +++ b/web/views/@default/servers/server/settings/waf/@menu.html @@ -2,6 +2,8 @@ 设置 入站规则 出站规则 + 国家/地区封禁 + 省份封禁 白名单 黑名单 \ No newline at end of file diff --git a/web/views/@default/servers/server/settings/waf/ipadmin/countries.css b/web/views/@default/servers/server/settings/waf/ipadmin/countries.css new file mode 100644 index 00000000..1cd34e35 --- /dev/null +++ b/web/views/@default/servers/server/settings/waf/ipadmin/countries.css @@ -0,0 +1,16 @@ +.region-letter-group .item { + padding-left: 1em !important; + padding-right: 1em !important; +} +.country-group { + padding-bottom: 1em; +} +.country-group .country-list .item { + float: left; + width: 12em; + margin-bottom: 0.5em; +} +.country-group .country-list .item .checkbox label { + font-size: 12px !important; +} +/*# sourceMappingURL=countries.css.map */ \ No newline at end of file diff --git a/web/views/@default/servers/server/settings/waf/ipadmin/countries.css.map b/web/views/@default/servers/server/settings/waf/ipadmin/countries.css.map new file mode 100644 index 00000000..6f08bd35 --- /dev/null +++ b/web/views/@default/servers/server/settings/waf/ipadmin/countries.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["countries.less"],"names":[],"mappings":"AAAA,oBACC;EACC,4BAAA;EACA,6BAAA;;AAIF;EAaC,mBAAA;;AAbD,cACC,cACC;EACC,WAAA;EACA,WAAA;EACA,oBAAA;;AALH,cACC,cACC,MAKC,UAAU;EACT,0BAAA","file":"countries.css"} \ No newline at end of file diff --git a/web/views/@default/servers/server/settings/waf/ipadmin/countries.html b/web/views/@default/servers/server/settings/waf/ipadmin/countries.html new file mode 100644 index 00000000..8eddbc4c --- /dev/null +++ b/web/views/@default/servers/server/settings/waf/ipadmin/countries.html @@ -0,0 +1,59 @@ +{$layout} +{$template "/left_menu"} + +
+ {$template "../menu"} + +
尚未为当前用户开通此功能。
+ + {$ if .featureIsOn} +

当前WAF未启用,设置将在[启用]后生效。

+ +
+ + + + + + + + + + +
已封禁 + 暂时没有选择封禁区域。 +
+ + ({{country.letter}}){{country.name}} +
+
选择封禁区域 + 选择区域 + + +
+
+

{{letter}}

+
+
+
+ + +
+
+
+
+
+
+
+ +
+ {$end} +
\ No newline at end of file diff --git a/web/views/@default/servers/server/settings/waf/ipadmin/countries.js b/web/views/@default/servers/server/settings/waf/ipadmin/countries.js new file mode 100644 index 00000000..450fcf99 --- /dev/null +++ b/web/views/@default/servers/server/settings/waf/ipadmin/countries.js @@ -0,0 +1,66 @@ +Tea.context(function () { + this.letterGroups = [ + "ABC", "DEF", "GHI", "JKL", "MNO", "PQR", "STU", "VWX", "YZ" + ]; + this.selectedGroup = "ABC" + this.letterCountries = {} + let that = this + this.countSelectedCountries = this.countries.$count(function (k, country) { + return country.isChecked + }) + this.countries.forEach(function (country) { + if (typeof (that.letterCountries[country.letter]) == "undefined") { + that.letterCountries[country.letter] = [] + } + that.letterCountries[country.letter].push(country) + }) + this.isCheckingAll = false + + this.selectGroup = function (group) { + this.selectedGroup = group + } + + this.selectCountry = function (country) { + country.isChecked = !country.isChecked + this.change() + } + + this.deselectCountry = function (country) { + country.isChecked = false + this.change() + } + + this.checkAll = function () { + this.isCheckingAll = !this.isCheckingAll + + this.countries.forEach(function (country) { + country.isChecked = that.isCheckingAll + }) + + this.change() + } + + this.success = function () { + teaweb.success("保存成功", function () { + teaweb.reload() + }) + } + + this.change = function () { + this.countSelectedCountries = this.countries.$count(function (k, country) { + return country.isChecked + }) + } + + /** + * 添加IP名单菜单 + */ + this.createIP = function (type) { + teaweb.popup("/servers/components/waf/ipadmin/createIPPopup?firewallPolicyId=" + this.firewallPolicyId + '&type=' + type, { + height: "23em", + callback: function () { + window.location = "/servers/components/waf/ipadmin/lists?firewallPolicyId=" + this.firewallPolicyId + "&type=" + type + } + }) + } +}) \ No newline at end of file diff --git a/web/views/@default/servers/server/settings/waf/ipadmin/countries.less b/web/views/@default/servers/server/settings/waf/ipadmin/countries.less new file mode 100644 index 00000000..f6774ab9 --- /dev/null +++ b/web/views/@default/servers/server/settings/waf/ipadmin/countries.less @@ -0,0 +1,22 @@ +.region-letter-group { + .item { + padding-left: 1em !important; + padding-right: 1em !important; + } +} + +.country-group { + .country-list { + .item { + float: left; + width: 12em; + margin-bottom: 0.5em; + + .checkbox label { + font-size: 12px !important; + } + } + } + + padding-bottom: 1em; +} \ No newline at end of file diff --git a/web/views/@default/servers/server/settings/waf/ipadmin/provinces.html b/web/views/@default/servers/server/settings/waf/ipadmin/provinces.html index ca240b3f..29ca9750 100644 --- a/web/views/@default/servers/server/settings/waf/ipadmin/provinces.html +++ b/web/views/@default/servers/server/settings/waf/ipadmin/provinces.html @@ -1,7 +1,13 @@ {$layout} +{$template "/left_menu"} - {$template "../waf_menu"} - {$template "menu"} +
+ {$template "../menu"} + +
尚未为当前用户开通此功能。
+ + {$ if .featureIsOn} +

当前WAF未启用,设置将在[启用]后生效。

@@ -43,4 +49,6 @@ -
\ No newline at end of file + + {$end} +
\ No newline at end of file