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未启用,设置将在[启用]后生效。
+
+
+ {$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未启用,设置将在[启用]后生效。
\ No newline at end of file
+
+ {$end}
+
\ No newline at end of file