diff --git a/internal/web/actions/default/servers/components/waf/ipadmin/provinces.go b/internal/web/actions/default/servers/components/waf/ipadmin/provinces.go index 008398db..e4691cd8 100644 --- a/internal/web/actions/default/servers/components/waf/ipadmin/provinces.go +++ b/internal/web/actions/default/servers/components/waf/ipadmin/provinces.go @@ -1,6 +1,17 @@ package ipadmin -import "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" +import ( + "encoding/json" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/models" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/firewallconfigs" + "github.com/iwind/TeaGo/actions" + "github.com/iwind/TeaGo/lists" + "github.com/iwind/TeaGo/maps" +) + +const ChinaCountryId = 1 type ProvincesAction struct { actionutils.ParentAction @@ -10,7 +21,86 @@ func (this *ProvincesAction) Init() { this.Nav("", "", "ipadmin") } -func (this *ProvincesAction) RunGet(params struct{}) { +func (this *ProvincesAction) RunGet(params struct { + FirewallPolicyId int64 +}) { this.Data["subMenuItem"] = "province" + + // 当前选中的省份 + policyConfig, err := models.SharedHTTPFirewallPolicyDAO.FindEnabledPolicyConfig(this.AdminContext(), params.FirewallPolicyId) + if err != nil { + this.ErrorPage(err) + return + } + if policyConfig == nil { + this.NotFound("firewallPolicy", params.FirewallPolicyId) + return + } + selectedProvinceIds := []int64{} + if policyConfig.Inbound != nil && policyConfig.Inbound.Region != nil { + selectedProvinceIds = policyConfig.Inbound.Region.DenyProvinceIds + } + + provincesResp, err := this.RPC().RegionProvinceRPC().FindAllEnabledRegionProvincesWithCountryId(this.AdminContext(), &pb.FindAllEnabledRegionProvincesWithCountryIdRequest{ + CountryId: int64(ChinaCountryId), + }) + if err != nil { + this.ErrorPage(err) + return + } + provinceMaps := []maps.Map{} + for _, province := range provincesResp.Provinces { + provinceMaps = append(provinceMaps, maps.Map{ + "id": province.Id, + "name": province.Name, + "isChecked": lists.ContainsInt64(selectedProvinceIds, province.Id), + }) + } + this.Data["provinces"] = provinceMaps + this.Show() } + +func (this *ProvincesAction) RunPost(params struct { + FirewallPolicyId int64 + ProvinceIds []int64 + + Must *actions.Must +}) { + policyConfig, err := models.SharedHTTPFirewallPolicyDAO.FindEnabledPolicyConfig(this.AdminContext(), params.FirewallPolicyId) + if err != nil { + this.ErrorPage(err) + return + } + if policyConfig == nil { + this.NotFound("firewallPolicy", params.FirewallPolicyId) + return + } + + if policyConfig.Inbound == nil { + policyConfig.Inbound = &firewallconfigs.HTTPFirewallInboundConfig{IsOn: true} + } + if policyConfig.Inbound.Region == nil { + policyConfig.Inbound.Region = &firewallconfigs.HTTPFirewallRegionConfig{ + IsOn: true, + } + } + policyConfig.Inbound.Region.DenyProvinceIds = params.ProvinceIds + + inboundJSON, err := json.Marshal(policyConfig.Inbound) + if err != nil { + this.ErrorPage(err) + return + } + + _, err = this.RPC().HTTPFirewallPolicyRPC().UpdateHTTPFirewallInboundConfig(this.AdminContext(), &pb.UpdateHTTPFirewallInboundConfigRequest{ + FirewallPolicyId: params.FirewallPolicyId, + InboundJSON: inboundJSON, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/web/views/@default/servers/components/waf/ipadmin/index.html b/web/views/@default/servers/components/waf/ipadmin/index.html index d02b0617..7bc290a8 100644 --- a/web/views/@default/servers/components/waf/ipadmin/index.html +++ b/web/views/@default/servers/components/waf/ipadmin/index.html @@ -20,7 +20,9 @@ 选择封禁区域 -