From 6591c5a7503b4610e725cb23a3b4da8346b2ad2f Mon Sep 17 00:00:00 2001 From: TangBin Date: Tue, 15 Dec 2020 13:18:40 +0800 Subject: [PATCH] fix(region): vpc create validate cidr mask length --- pkg/compute/regiondrivers/aliyun.go | 11 +++++++++++ pkg/compute/regiondrivers/aws.go | 11 +++++++++++ pkg/compute/regiondrivers/azure.go | 12 ++++++++++++ pkg/compute/regiondrivers/ctyun.go | 12 ++++++++++++ pkg/compute/regiondrivers/google.go | 12 ++++++++++++ pkg/compute/regiondrivers/huawei.go | 11 +++++++++++ pkg/compute/regiondrivers/ucloud.go | 12 ++++++++++++ 7 files changed, 81 insertions(+) diff --git a/pkg/compute/regiondrivers/aliyun.go b/pkg/compute/regiondrivers/aliyun.go index 46b62ed7c8..f6286d9739 100644 --- a/pkg/compute/regiondrivers/aliyun.go +++ b/pkg/compute/regiondrivers/aliyun.go @@ -1560,3 +1560,14 @@ func (self *SAliyunRegionDriver) IsSupportedElasticcacheSecgroup() bool { func (self *SAliyunRegionDriver) GetMaxElasticcacheSecurityGroupCount() int { return 0 } + +func (self *SAliyunRegionDriver) ValidateCreateVpcData(ctx context.Context, userCred mcclient.TokenCredential, input api.VpcCreateInput) (api.VpcCreateInput, error) { + cidrV := validators.NewIPv4PrefixValidator("cidr_block") + if err := cidrV.Validate(jsonutils.Marshal(input).(*jsonutils.JSONDict)); err != nil { + return input, err + } + if cidrV.Value.MaskLen < 17 || cidrV.Value.MaskLen > 29 { + return input, httperrors.NewInputParameterError("%s request the mask range should be between 17 and 29", self.GetProvider()) + } + return input, nil +} diff --git a/pkg/compute/regiondrivers/aws.go b/pkg/compute/regiondrivers/aws.go index d57103181a..7631ce81dd 100644 --- a/pkg/compute/regiondrivers/aws.go +++ b/pkg/compute/regiondrivers/aws.go @@ -1437,3 +1437,14 @@ func (self *SAwsRegionDriver) IsSecurityGroupBelongVpc() bool { func (self *SAwsRegionDriver) IsCertificateBelongToRegion() bool { return false } + +func (self *SAwsRegionDriver) ValidateCreateVpcData(ctx context.Context, userCred mcclient.TokenCredential, input api.VpcCreateInput) (api.VpcCreateInput, error) { + cidrV := validators.NewIPv4PrefixValidator("cidr_block") + if err := cidrV.Validate(jsonutils.Marshal(input).(*jsonutils.JSONDict)); err != nil { + return input, err + } + if cidrV.Value.MaskLen < 16 || cidrV.Value.MaskLen > 28 { + return input, httperrors.NewInputParameterError("%s request the mask range should be between 16 and 28", self.GetProvider()) + } + return input, nil +} diff --git a/pkg/compute/regiondrivers/azure.go b/pkg/compute/regiondrivers/azure.go index 132d306157..d66039af6c 100644 --- a/pkg/compute/regiondrivers/azure.go +++ b/pkg/compute/regiondrivers/azure.go @@ -21,6 +21,7 @@ import ( "yunion.io/x/pkg/util/secrules" api "yunion.io/x/onecloud/pkg/apis/compute" + "yunion.io/x/onecloud/pkg/cloudcommon/validators" "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/compute/models" "yunion.io/x/onecloud/pkg/httperrors" @@ -75,3 +76,14 @@ func (self *SAzureRegionDriver) GetSecurityGroupRuleMaxPriority() int { func (self *SAzureRegionDriver) GetSecurityGroupRuleMinPriority() int { return 100 } + +func (self *SAzureRegionDriver) ValidateCreateVpcData(ctx context.Context, userCred mcclient.TokenCredential, input api.VpcCreateInput) (api.VpcCreateInput, error) { + cidrV := validators.NewIPv4PrefixValidator("cidr_block") + if err := cidrV.Validate(jsonutils.Marshal(input).(*jsonutils.JSONDict)); err != nil { + return input, err + } + if cidrV.Value.MaskLen < 8 || cidrV.Value.MaskLen > 29 { + return input, httperrors.NewInputParameterError("%s request the mask range should be between 8 and 29", self.GetProvider()) + } + return input, nil +} diff --git a/pkg/compute/regiondrivers/ctyun.go b/pkg/compute/regiondrivers/ctyun.go index 1e61c2c3a4..49fdd9e4bd 100644 --- a/pkg/compute/regiondrivers/ctyun.go +++ b/pkg/compute/regiondrivers/ctyun.go @@ -21,6 +21,7 @@ import ( "yunion.io/x/pkg/util/secrules" api "yunion.io/x/onecloud/pkg/apis/compute" + "yunion.io/x/onecloud/pkg/cloudcommon/validators" "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/compute/models" "yunion.io/x/onecloud/pkg/httperrors" @@ -75,3 +76,14 @@ func (self *SCtyunRegionDriver) ValidateCreateLoadbalancerAclData(ctx context.Co func (self *SCtyunRegionDriver) ValidateCreateLoadbalancerCertificateData(ctx context.Context, userCred mcclient.TokenCredential, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) { return nil, httperrors.NewNotImplementedError("%s does not currently support creating loadbalancer certificate", self.GetProvider()) } + +func (self *SCtyunRegionDriver) ValidateCreateVpcData(ctx context.Context, userCred mcclient.TokenCredential, input api.VpcCreateInput) (api.VpcCreateInput, error) { + cidrV := validators.NewIPv4PrefixValidator("cidr_block") + if err := cidrV.Validate(jsonutils.Marshal(input).(*jsonutils.JSONDict)); err != nil { + return input, err + } + if cidrV.Value.MaskLen < 16 || cidrV.Value.MaskLen > 29 { + return input, httperrors.NewInputParameterError("%s request the mask range should be between 16 and 29", self.GetProvider()) + } + return input, nil +} diff --git a/pkg/compute/regiondrivers/google.go b/pkg/compute/regiondrivers/google.go index 18cbcc0c0b..8c5c0349c4 100644 --- a/pkg/compute/regiondrivers/google.go +++ b/pkg/compute/regiondrivers/google.go @@ -27,6 +27,7 @@ import ( api "yunion.io/x/onecloud/pkg/apis/compute" "yunion.io/x/onecloud/pkg/cloudcommon/db" "yunion.io/x/onecloud/pkg/cloudcommon/db/taskman" + "yunion.io/x/onecloud/pkg/cloudcommon/validators" "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/compute/models" "yunion.io/x/onecloud/pkg/httperrors" @@ -269,3 +270,14 @@ func (self *SGoogleRegionDriver) RequestCreateDBInstanceBackup(ctx context.Conte }) return nil } + +func (self *SGoogleRegionDriver) ValidateCreateVpcData(ctx context.Context, userCred mcclient.TokenCredential, input api.VpcCreateInput) (api.VpcCreateInput, error) { + var cidrV = validators.NewIPv4PrefixValidator("cidr_block") + if err := cidrV.Validate(jsonutils.Marshal(input).(*jsonutils.JSONDict)); err != nil { + return input, err + } + if cidrV.Value.MaskLen < 8 || cidrV.Value.MaskLen > 29 { + return input, httperrors.NewInputParameterError("%s request the mask range should be between 8 and 29", self.GetProvider()) + } + return input, nil +} diff --git a/pkg/compute/regiondrivers/huawei.go b/pkg/compute/regiondrivers/huawei.go index 6503281ed9..b57eab9109 100644 --- a/pkg/compute/regiondrivers/huawei.go +++ b/pkg/compute/regiondrivers/huawei.go @@ -2663,3 +2663,14 @@ func (self *SHuaWeiRegionDriver) GetRdsSupportSecgroupCount() int { func (self *SHuaWeiRegionDriver) IsSupportedElasticcacheAutoRenew() bool { return false } + +func (self *SHuaWeiRegionDriver) ValidateCreateVpcData(ctx context.Context, userCred mcclient.TokenCredential, input api.VpcCreateInput) (api.VpcCreateInput, error) { + var cidrV = validators.NewIPv4PrefixValidator("cidr_block") + if err := cidrV.Validate(jsonutils.Marshal(input).(*jsonutils.JSONDict)); err != nil { + return input, err + } + if cidrV.Value.MaskLen < 16 || cidrV.Value.MaskLen > 29 { + return input, httperrors.NewInputParameterError("%s request the mask range should be between 16 and 29", self.GetProvider()) + } + return input, nil +} diff --git a/pkg/compute/regiondrivers/ucloud.go b/pkg/compute/regiondrivers/ucloud.go index 18caaefe37..674874749d 100644 --- a/pkg/compute/regiondrivers/ucloud.go +++ b/pkg/compute/regiondrivers/ucloud.go @@ -21,6 +21,7 @@ import ( "yunion.io/x/pkg/util/secrules" api "yunion.io/x/onecloud/pkg/apis/compute" + "yunion.io/x/onecloud/pkg/cloudcommon/validators" "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/compute/models" "yunion.io/x/onecloud/pkg/httperrors" @@ -71,3 +72,14 @@ func (self *SUcloudRegionDriver) ValidateCreateLoadbalancerAclData(ctx context.C func (self *SUcloudRegionDriver) ValidateCreateLoadbalancerCertificateData(ctx context.Context, userCred mcclient.TokenCredential, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) { return nil, httperrors.NewNotImplementedError("%s does not currently support creating loadbalancer certificate", self.GetProvider()) } + +func (self *SUcloudRegionDriver) ValidateCreateVpcData(ctx context.Context, userCred mcclient.TokenCredential, input api.VpcCreateInput) (api.VpcCreateInput, error) { + var cidrV = validators.NewIPv4PrefixValidator("cidr_block") + if err := cidrV.Validate(jsonutils.Marshal(input).(*jsonutils.JSONDict)); err != nil { + return input, err + } + if cidrV.Value.MaskLen < 16 || cidrV.Value.MaskLen > 29 { + return input, httperrors.NewInputParameterError("%s request the mask range should be between 16 and 29", self.GetProvider()) + } + return input, nil +}