diff --git a/pkg/core/deployer/providers/aliyun-waf/aliyun_waf.go b/pkg/core/deployer/providers/aliyun-waf/aliyun_waf.go index be4edda8b..72050773f 100644 --- a/pkg/core/deployer/providers/aliyun-waf/aliyun_waf.go +++ b/pkg/core/deployer/providers/aliyun-waf/aliyun_waf.go @@ -125,18 +125,16 @@ func (d *Deployer) deployToWAF3(ctx context.Context, certPEM, privkeyPEM string) d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } - certId, ok := upres.ExtendedData["CertIdentifier"].(string) - if !ok || certId == "" { - return fmt.Errorf("invalid certificate identifier in upload response") - } // 根据接入方式决定部署方式 switch d.config.ServiceType { case SERVICE_TYPE_CLOUDRESOURCE: + certId := upres.ExtendedData["CertIdentifier"].(string) if err := d.deployToWAF3WithCloudResource(ctx, certId); err != nil { return err } case SERVICE_TYPE_CNAME: + certId := upres.ExtendedData["CertIdentifier"].(string) if err := d.deployToWAF3WithCNAME(ctx, certId); err != nil { return err } @@ -149,55 +147,22 @@ func (d *Deployer) deployToWAF3(ctx context.Context, certPEM, privkeyPEM string) } func (d *Deployer) deployToWAF3WithCloudResource(ctx context.Context, cloudCertId string) error { - // 参数校验 if d.config.ResourceProduct == "" { return errors.New("config `resourceProduct` is required") } if d.config.ResourceId == "" { return errors.New("config `resourceId` is required") } - // 默认端口为 443 if d.config.ResourcePort == 0 { - d.config.ResourcePort = 443 + return errors.New("config `resourcePort` is required") } - // DescribeProductInstances - // 查询云产品实例列表,包含实例的基本信息和接入端口等信息。 - // REF: https://www.alibabacloud.com/help/zh/waf/web-application-firewall-3-0/developer-reference/api-waf-openapi-2021-10-01-describeproductinstances - var resourceInstance *aliwaf.DescribeProductInstancesResponseBodyProductInstances - var resourceInstancePort *aliwaf.DescribeProductInstancesResponseBodyProductInstancesAccessPortAndProtocols - describeProductInstancesReq := &aliwaf.DescribeProductInstancesRequest{ - ResourceManagerResourceGroupId: lo.EmptyableToPtr(d.config.ResourceGroupId), - RegionId: tea.String(d.config.Region), - InstanceId: tea.String(d.config.InstanceId), - ResourceProduct: tea.String(d.config.ResourceProduct), - ResourceInstanceId: tea.String(d.config.ResourceId), - } - describeProductInstancesResp, err := d.sdkClient.DescribeProductInstancesWithContext(ctx, describeProductInstancesReq, &dara.RuntimeOptions{}) - d.logger.Debug("sdk request 'waf.DescribeProductInstances'", slog.Any("request", describeProductInstancesReq), slog.Any("response", describeProductInstancesResp)) - if err != nil { - return fmt.Errorf("failed to execute sdk request 'waf.DescribeProductInstances': %w", err) - } else if len(describeProductInstancesResp.Body.ProductInstances) == 0 { - return fmt.Errorf("could not find waf '%s' cloud resource '%s %s'", d.config.InstanceId, d.config.ResourceProduct, d.config.ResourceId) - } else { - resourceInstance = describeProductInstancesResp.Body.ProductInstances[0] - - resourceInstancePort, _ = lo.Find(resourceInstance.AccessPortAndProtocols, func(p *aliwaf.DescribeProductInstancesResponseBodyProductInstancesAccessPortAndProtocols) bool { - return tea.Int32Value(p.Port) == d.config.ResourcePort - }) - if resourceInstancePort == nil { - return fmt.Errorf("could not find waf '%s' cloud resource '%s %s:%d'", d.config.InstanceId, d.config.ResourceProduct, d.config.ResourceId, d.config.ResourcePort) - } - } - - // DescribeResourceInstanceCerts - // 查询云产品实例已同步的证书列表。 - // 这个接口返回的证书列表里包含了所有已同步的证书信息,包括证书 ID、证书公共名称、过期时间等信息。 - // 但是不会区分哪些是默认证书,哪些是扩展证书。 - // 而且此接口可能会返回当前 WAF 下所有的证书,而不只是指定的的云实例使用的证书。 + // 查询云产品实例已同步的证书列表 // REF: https://www.alibabacloud.com/help/zh/waf/web-application-firewall-3-0/developer-reference/api-waf-openapi-2021-10-01-describeresourceinstancecerts - var resourceInstanceCertificates = make([]*aliwaf.DescribeResourceInstanceCertsResponseBodyCerts, 0) - + // + // 注意文档中描述为分页查询,但实际调用不支持分页 + // https://github.com/certimate-go/certimate/issues/1122 + var wafResourceInstanceCertificates []*aliwaf.DescribeResourceInstanceCertsResponseBodyCerts describeResourceInstanceCertsReq := &aliwaf.DescribeResourceInstanceCertsRequest{ RegionId: tea.String(d.config.Region), ResourceManagerResourceGroupId: lo.EmptyableToPtr(d.config.ResourceGroupId), @@ -208,126 +173,123 @@ func (d *Deployer) deployToWAF3WithCloudResource(ctx context.Context, cloudCertI d.logger.Debug("sdk request 'waf.DescribeResourceInstanceCerts'", slog.Any("request", describeResourceInstanceCertsReq), slog.Any("response", describeResourceInstanceCertsResp)) if err != nil { return fmt.Errorf("failed to execute sdk request 'waf.DescribeResourceInstanceCerts': %w", err) + } else { + wafResourceInstanceCertificates = describeResourceInstanceCertsResp.Body.Certs } - if describeResourceInstanceCertsResp.Body == nil { - return fmt.Errorf("describe waf %s cloud resource instance certificates response body is empty", d.config.InstanceId) - } - - resourceInstanceCertificates = describeResourceInstanceCertsResp.Body.Certs - if len(resourceInstanceCertificates) == 0 { - return fmt.Errorf("describe waf %s cloud resource instance certificates response certs list is empty", d.config.InstanceId) - } - - // DescribeCloudResourceAccessPortDetails - // 获取云产品实例的接入端口详情,包含证书列表、实例 ID 等信息。 + // 获取云产品实例的接入端口详情 // REF: https://www.alibabacloud.com/help/zh/waf/web-application-firewall-3-0/developer-reference/api-waf-openapi-2021-10-01-describecloudresourceaccessportdetails - var cloudResourceAccessPortDetailsCertificates = make([]*aliwaf.DescribeCloudResourceAccessPortDetailsResponseBodyAccessPortDetailsCertificates, 0) + var wafCloudResourceCloudAccessPort *aliwaf.DescribeCloudResourceAccessPortDetailsResponseBodyAccessPortDetails + var wafCloudResourceCertificates []*aliwaf.DescribeCloudResourceAccessPortDetailsResponseBodyAccessPortDetailsCertificates describeCloudResourceAccessPortDetailsRequest := &aliwaf.DescribeCloudResourceAccessPortDetailsRequest{ - RegionId: tea.String(d.config.Region), - InstanceId: tea.String(d.config.InstanceId), - ResourceInstanceId: tea.String(d.config.ResourceId), - Port: tea.String(fmt.Sprintf("%d", d.config.ResourcePort)), + RegionId: tea.String(d.config.Region), + ResourceManagerResourceGroupId: lo.EmptyableToPtr(d.config.ResourceGroupId), + InstanceId: tea.String(d.config.InstanceId), + ResourceInstanceId: tea.String(d.config.ResourceId), + Port: tea.String(fmt.Sprintf("%d", d.config.ResourcePort)), } describeCloudResourceAccessPortDetailsResponse, err := d.sdkClient.DescribeCloudResourceAccessPortDetailsWithContext(ctx, describeCloudResourceAccessPortDetailsRequest, &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'waf.DescribeCloudResourceAccessPortDetails'", slog.Any("request", describeCloudResourceAccessPortDetailsRequest), slog.Any("response", describeCloudResourceAccessPortDetailsResponse)) if err != nil { return fmt.Errorf("failed to execute sdk request 'waf.DescribeCloudResourceAccessPortDetails': %w", err) - } - - if describeCloudResourceAccessPortDetailsResponse.Body.AccessPortDetails == nil { + } else if len(describeCloudResourceAccessPortDetailsResponse.Body.AccessPortDetails) == 0 { return fmt.Errorf("could not get access port details of waf '%s' cloud resource '%s %s:%d'", d.config.InstanceId, d.config.ResourceProduct, d.config.ResourceId, d.config.ResourcePort) + } else { + wafCloudResourceCloudAccessPort = describeCloudResourceAccessPortDetailsResponse.Body.AccessPortDetails[0] + wafCloudResourceCertificates = wafCloudResourceCloudAccessPort.Certificates + if len(wafCloudResourceCertificates) == 0 { + return fmt.Errorf("could not get access port certificates of waf '%s' cloud resource '%s %s:%d'", d.config.InstanceId, d.config.ResourceProduct, d.config.ResourceId, d.config.ResourcePort) + } } - cloudResourceAccessPortDetailsCertificates = describeCloudResourceAccessPortDetailsResponse.Body.AccessPortDetails[0].Certificates - // 至少应该存在一张默认证书 - if len(cloudResourceAccessPortDetailsCertificates) == 0 { - return fmt.Errorf("could not get certificates of waf '%s' cloud resource '%s %s:%d'", d.config.InstanceId, d.config.ResourceProduct, d.config.ResourceId, d.config.ResourcePort) - } - - // 获取由 WAF 自动生成的 CloudResourceId,后续更新证书配置时需要用到 - cloudResourceId := describeCloudResourceAccessPortDetailsResponse.Body.AccessPortDetails[0].CloudResourceId - if cloudResourceId == nil || tea.StringValue(cloudResourceId) == "" { - return fmt.Errorf("could not get cloud resource id of waf '%s' cloud resource '%s %s:%d'", d.config.InstanceId, d.config.ResourceProduct, d.config.ResourceId, d.config.ResourcePort) - } - - // ModifyCloudResourceCert - // 更新证书配置 - // REF: https://www.alibabacloud.com/help/zh/waf/web-application-firewall-3-0/developer-reference/api-waf-openapi-2021-10-01-modifycloudresourcecert + // 生成请求参数 modifyCloudResourceCertReq := &aliwaf.ModifyCloudResourceCertRequest{ RegionId: tea.String(d.config.Region), InstanceId: tea.String(d.config.InstanceId), - CloudResourceId: cloudResourceId, + CloudResourceId: wafCloudResourceCloudAccessPort.CloudResourceId, } - if d.config.Domain == "" { - // 没有指定扩展域名,只需替换默认证书 + // 未指定扩展域名,只需替换默认证书 const certAppliedTypeDefault = "default" - // 从已有列表里找出默认证书 ID,替换为新的证书 ID,其他的扩展证书保持不变(如果有) - modifyCloudResourceCertReq.Certificates = lo.Map(cloudResourceAccessPortDetailsCertificates, func(c *aliwaf.DescribeCloudResourceAccessPortDetailsResponseBodyAccessPortDetailsCertificates, _ int) *aliwaf.ModifyCloudResourceCertRequestCertificates { - appliedType := tea.StringValue(c.AppliedType) - certId := tea.StringValue(c.CertificateId) - if appliedType == certAppliedTypeDefault { - certId = cloudCertId + // 已部署过,直接跳过更新 + for _, certItem := range wafCloudResourceCertificates { + if tea.StringValue(certItem.AppliedType) == certAppliedTypeDefault && + tea.StringValue(certItem.CertificateId) == cloudCertId { + return nil } + } + + // 移除原默认证书,添加新默认证书 + modifyCloudResourceCertReq.Certificates = lo.Map(wafCloudResourceCertificates, func(c *aliwaf.DescribeCloudResourceAccessPortDetailsResponseBodyAccessPortDetailsCertificates, _ int) *aliwaf.ModifyCloudResourceCertRequestCertificates { + certId := tea.StringValue(c.CertificateId) + certType := tea.StringValue(c.AppliedType) + return &aliwaf.ModifyCloudResourceCertRequestCertificates{ CertificateId: tea.String(certId), - AppliedType: tea.String(appliedType), + AppliedType: tea.String(certType), } }) + modifyCloudResourceCertReq.Certificates = lo.Filter(modifyCloudResourceCertReq.Certificates, func(c *aliwaf.ModifyCloudResourceCertRequestCertificates, _ int) bool { + certType := tea.StringValue(c.AppliedType) + if certType == certAppliedTypeDefault { + return false + } + + return true + }) + modifyCloudResourceCertReq.Certificates = append(modifyCloudResourceCertReq.Certificates, &aliwaf.ModifyCloudResourceCertRequestCertificates{ + CertificateId: tea.String(cloudCertId), + AppliedType: tea.String(certAppliedTypeDefault), + }) } else { - // 指定了扩展域名,如果已有就替换,没有就新增扩展证书 + // 指定扩展域名,替换或新增扩展证书 const certAppliedTypeExtension = "extension" - // 先拿到当前实例已有的扩展证书的列表 - // 构建新的证书列表,保留默认证书,处理扩展证书的替换或保留 - var found bool - newCertificates := make([]*aliwaf.ModifyCloudResourceCertRequestCertificates, 0, len(cloudResourceAccessPortDetailsCertificates)+1) - for _, c := range cloudResourceAccessPortDetailsCertificates { - applied := tea.StringValue(c.AppliedType) + // 已部署过,直接跳过更新 + for _, certItem := range wafCloudResourceCertificates { + if tea.StringValue(certItem.AppliedType) == certAppliedTypeExtension && + tea.StringValue(certItem.CertificateId) == cloudCertId { + return nil + } + } + + // 移除同 CommonName 的原扩展证书,添加新扩展证书 + modifyCloudResourceCertReq.Certificates = lo.Map(wafCloudResourceCertificates, func(c *aliwaf.DescribeCloudResourceAccessPortDetailsResponseBodyAccessPortDetailsCertificates, _ int) *aliwaf.ModifyCloudResourceCertRequestCertificates { certId := tea.StringValue(c.CertificateId) + certType := tea.StringValue(c.AppliedType) + + return &aliwaf.ModifyCloudResourceCertRequestCertificates{ + CertificateId: tea.String(certId), + AppliedType: tea.String(certType), + } + }) + modifyCloudResourceCertReq.Certificates = lo.Filter(modifyCloudResourceCertReq.Certificates, func(c *aliwaf.ModifyCloudResourceCertRequestCertificates, _ int) bool { + certId := tea.StringValue(c.CertificateId) + certType := tea.StringValue(c.AppliedType) + if certType == certAppliedTypeExtension { + if certId == cloudCertId { + return false + } - if applied == certAppliedTypeExtension { - // 从已同步的云产品实例全部证书列表里找到对应的证书,获取 CommonName var certCommonName string - for _, rc := range resourceInstanceCertificates { - if tea.StringValue(rc.CertIdentifier) == certId { - certCommonName = tea.StringValue(rc.CommonName) + for _, r := range wafResourceInstanceCertificates { + if tea.StringValue(r.CertIdentifier) == certId { + certCommonName = tea.StringValue(r.CommonName) break } } if certCommonName == d.config.Domain { - // 找到和目标域名匹配的扩展证书,替换为新证书 ID - newCertificates = append(newCertificates, &aliwaf.ModifyCloudResourceCertRequestCertificates{ - CertificateId: tea.String(cloudCertId), - AppliedType: tea.String(certAppliedTypeExtension), - }) - found = true - } else { - // 保留原来的扩展证书 - newCertificates = append(newCertificates, &aliwaf.ModifyCloudResourceCertRequestCertificates{ - CertificateId: c.CertificateId, - AppliedType: c.AppliedType, - }) + return false } - } else { - // 默认证书保持不变 - newCertificates = append(newCertificates, &aliwaf.ModifyCloudResourceCertRequestCertificates{ - CertificateId: c.CertificateId, - AppliedType: c.AppliedType, - }) } - } - if !found { - // 如果没有找到要替换的扩展证书,追加一个扩展证书 - newCertificates = append(newCertificates, &aliwaf.ModifyCloudResourceCertRequestCertificates{ - CertificateId: tea.String(cloudCertId), - AppliedType: tea.String(certAppliedTypeExtension), - }) - } - modifyCloudResourceCertReq.Certificates = newCertificates + return true + }) + modifyCloudResourceCertReq.Certificates = append(modifyCloudResourceCertReq.Certificates, &aliwaf.ModifyCloudResourceCertRequestCertificates{ + CertificateId: tea.String(cloudCertId), + AppliedType: tea.String(certAppliedTypeExtension), + }) } // 过滤掉不存在或已过期的证书,防止接口报错 @@ -336,7 +298,7 @@ func (d *Deployer) deployToWAF3WithCloudResource(ctx context.Context, cloudCertI return true } - resourceInstanceCert, _ := lo.Find(resourceInstanceCertificates, func(r *aliwaf.DescribeResourceInstanceCertsResponseBodyCerts) bool { + resourceInstanceCert, _ := lo.Find(wafResourceInstanceCertificates, func(r *aliwaf.DescribeResourceInstanceCertsResponseBodyCerts) bool { cId := tea.StringValue(c.CertificateId) rId := tea.StringValue(r.CertIdentifier) return cId == rId || strings.Split(cId, "-")[0] == strings.Split(rId, "-")[0] @@ -349,24 +311,14 @@ func (d *Deployer) deployToWAF3WithCloudResource(ctx context.Context, cloudCertI return false }) - // 最后检查待更新的列表里是否存在默认证书,没有则退出,否则接口会报错 - var hasDefaultCert bool - for _, c := range modifyCloudResourceCertReq.Certificates { - if tea.StringValue(c.AppliedType) == "default" { - hasDefaultCert = true - break - } - } - if !hasDefaultCert { - return fmt.Errorf("could not find valid default certificate to apply for waf '%s' cloud resource '%s %s:%d'", d.config.InstanceId, d.config.ResourceProduct, d.config.ResourceId, d.config.ResourcePort) - } - - // 执行更新请求 + // 修改云产品接入的证书 + // REF: https://www.alibabacloud.com/help/zh/waf/web-application-firewall-3-0/developer-reference/api-waf-openapi-2021-10-01-modifycloudresourcecert modifyCloudResourceCertResp, err := d.sdkClient.ModifyCloudResourceCertWithContext(ctx, modifyCloudResourceCertReq, &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'waf.ModifyCloudResourceCert'", slog.Any("request", modifyCloudResourceCertReq), slog.Any("response", modifyCloudResourceCertResp)) if err != nil { return fmt.Errorf("failed to execute sdk request 'waf.ModifyCloudResourceCert': %w", err) } + return nil } diff --git a/pkg/core/deployer/providers/aliyun-waf/internal/client.go b/pkg/core/deployer/providers/aliyun-waf/internal/client.go index 3103b4f79..bf89384d4 100644 --- a/pkg/core/deployer/providers/aliyun-waf/internal/client.go +++ b/pkg/core/deployer/providers/aliyun-waf/internal/client.go @@ -35,6 +35,71 @@ func (client *WafClient) Init(config *openapiutil.Config) (_err error) { return nil } +func (client *WafClient) DescribeCloudResourceAccessPortDetailsWithContext(ctx context.Context, request *aliwaf.DescribeCloudResourceAccessPortDetailsRequest, runtime *dara.RuntimeOptions) (_result *aliwaf.DescribeCloudResourceAccessPortDetailsResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + if !dara.IsNil(request.InstanceId) { + query["InstanceId"] = request.InstanceId + } + + if !dara.IsNil(request.PageNumber) { + query["PageNumber"] = request.PageNumber + } + + if !dara.IsNil(request.PageSize) { + query["PageSize"] = request.PageSize + } + + if !dara.IsNil(request.Port) { + query["Port"] = request.Port + } + + if !dara.IsNil(request.Protocol) { + query["Protocol"] = request.Protocol + } + + if !dara.IsNil(request.RegionId) { + query["RegionId"] = request.RegionId + } + + if !dara.IsNil(request.ResourceInstanceId) { + query["ResourceInstanceId"] = request.ResourceInstanceId + } + + if !dara.IsNil(request.ResourceManagerResourceGroupId) { + query["ResourceManagerResourceGroupId"] = request.ResourceManagerResourceGroupId + } + + if !dara.IsNil(request.ResourceProduct) { + query["ResourceProduct"] = request.ResourceProduct + } + + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("DescribeCloudResourceAccessPortDetails"), + Version: dara.String("2021-10-01"), + Protocol: dara.String("HTTPS"), + Pathname: dara.String("/"), + Method: dara.String("POST"), + AuthType: dara.String("AK"), + Style: dara.String("RPC"), + ReqBodyType: dara.String("formData"), + BodyType: dara.String("json"), + } + _result = &aliwaf.DescribeCloudResourceAccessPortDetailsResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} + func (client *WafClient) DescribeDefaultHttpsWithContext(ctx context.Context, request *aliwaf.DescribeDefaultHttpsRequest, runtime *dara.RuntimeOptions) (_result *aliwaf.DescribeDefaultHttpsResponse, _err error) { _err = request.Validate() if _err != nil { @@ -123,92 +188,6 @@ func (client *WafClient) DescribeDomainDetailWithContext(ctx context.Context, re return _result, _err } -func (client *WafClient) DescribeProductInstancesWithContext(ctx context.Context, request *aliwaf.DescribeProductInstancesRequest, runtime *dara.RuntimeOptions) (_result *aliwaf.DescribeProductInstancesResponse, _err error) { - _err = request.Validate() - if _err != nil { - return _result, _err - } - query := map[string]interface{}{} - - if !dara.IsNil(request.InstanceId) { - query["InstanceId"] = request.InstanceId - } - - if !dara.IsNil(request.OwnerUserId) { - query["OwnerUserId"] = request.OwnerUserId - } - - if !dara.IsNil(request.PageNumber) { - query["PageNumber"] = request.PageNumber - } - - if !dara.IsNil(request.PageSize) { - query["PageSize"] = request.PageSize - } - - if !dara.IsNil(request.RegionId) { - query["RegionId"] = request.RegionId - } - - if !dara.IsNil(request.ResourceInstanceAccessStatus) { - query["ResourceInstanceAccessStatus"] = request.ResourceInstanceAccessStatus - } - - if !dara.IsNil(request.ResourceInstanceId) { - query["ResourceInstanceId"] = request.ResourceInstanceId - } - - if !dara.IsNil(request.ResourceInstanceIp) { - query["ResourceInstanceIp"] = request.ResourceInstanceIp - } - - if !dara.IsNil(request.ResourceInstanceName) { - query["ResourceInstanceName"] = request.ResourceInstanceName - } - - if !dara.IsNil(request.ResourceIp) { - query["ResourceIp"] = request.ResourceIp - } - - if !dara.IsNil(request.ResourceManagerResourceGroupId) { - query["ResourceManagerResourceGroupId"] = request.ResourceManagerResourceGroupId - } - - if !dara.IsNil(request.ResourceName) { - query["ResourceName"] = request.ResourceName - } - - if !dara.IsNil(request.ResourceProduct) { - query["ResourceProduct"] = request.ResourceProduct - } - - if !dara.IsNil(request.ResourceRegionId) { - query["ResourceRegionId"] = request.ResourceRegionId - } - - req := &openapiutil.OpenApiRequest{ - Query: openapiutil.Query(query), - } - params := &openapiutil.Params{ - Action: dara.String("DescribeProductInstances"), - Version: dara.String("2021-10-01"), - Protocol: dara.String("HTTPS"), - Pathname: dara.String("/"), - Method: dara.String("POST"), - AuthType: dara.String("AK"), - Style: dara.String("RPC"), - ReqBodyType: dara.String("formData"), - BodyType: dara.String("json"), - } - _result = &aliwaf.DescribeProductInstancesResponse{} - _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) - if _err != nil { - return _result, _err - } - _err = dara.Convert(_body, &_result) - return _result, _err -} - func (client *WafClient) DescribeResourceInstanceCertsWithContext(ctx context.Context, request *aliwaf.DescribeResourceInstanceCertsRequest, runtime *dara.RuntimeOptions) (_result *aliwaf.DescribeResourceInstanceCertsResponse, _err error) { _err = request.Validate() if _err != nil { @@ -263,24 +242,15 @@ func (client *WafClient) DescribeResourceInstanceCertsWithContext(ctx context.Co return _result, _err } -func (client *WafClient) ModifyCloudResourceWithContext(ctx context.Context, tmpReq *aliwaf.ModifyCloudResourceRequest, runtime *dara.RuntimeOptions) (_result *aliwaf.ModifyCloudResourceResponse, _err error) { - _err = tmpReq.Validate() +func (client *WafClient) ModifyCloudResourceCertWithContext(ctx context.Context, request *aliwaf.ModifyCloudResourceCertRequest, runtime *dara.RuntimeOptions) (_result *aliwaf.ModifyCloudResourceCertResponse, _err error) { + _err = request.Validate() if _err != nil { return _result, _err } - - request := &aliwaf.ModifyCloudResourceShrinkRequest{} - openapiutil.Convert(tmpReq, request) - - if !dara.IsNil(tmpReq.Listen) { - request.ListenShrink = openapiutil.ArrayToStringWithSpecifiedStyle(tmpReq.Listen, dara.String("Listen"), dara.String("json")) - } - - if !dara.IsNil(tmpReq.Redirect) { - request.RedirectShrink = openapiutil.ArrayToStringWithSpecifiedStyle(tmpReq.Redirect, dara.String("Redirect"), dara.String("json")) - } - query := map[string]interface{}{} + if !dara.IsNil(request.Certificates) { + query["Certificates"] = request.Certificates + } if !dara.IsNil(request.CloudResourceId) { query["CloudResourceId"] = request.CloudResourceId @@ -290,27 +260,27 @@ func (client *WafClient) ModifyCloudResourceWithContext(ctx context.Context, tmp query["InstanceId"] = request.InstanceId } - if !dara.IsNil(request.ListenShrink) { - query["Listen"] = request.ListenShrink - } - - if !dara.IsNil(request.RedirectShrink) { - query["Redirect"] = request.RedirectShrink + if !dara.IsNil(request.Port) { + query["Port"] = request.Port } if !dara.IsNil(request.RegionId) { query["RegionId"] = request.RegionId } - if !dara.IsNil(request.ResourceManagerResourceGroupId) { - query["ResourceManagerResourceGroupId"] = request.ResourceManagerResourceGroupId + if !dara.IsNil(request.ResourceInstanceId) { + query["ResourceInstanceId"] = request.ResourceInstanceId + } + + if !dara.IsNil(request.ResourceProduct) { + query["ResourceProduct"] = request.ResourceProduct } req := &openapiutil.OpenApiRequest{ Query: openapiutil.Query(query), } params := &openapiutil.Params{ - Action: dara.String("ModifyCloudResource"), + Action: dara.String("ModifyCloudResourceCert"), Version: dara.String("2021-10-01"), Protocol: dara.String("HTTPS"), Pathname: dara.String("/"), @@ -320,7 +290,7 @@ func (client *WafClient) ModifyCloudResourceWithContext(ctx context.Context, tmp ReqBodyType: dara.String("formData"), BodyType: dara.String("json"), } - _result = &aliwaf.ModifyCloudResourceResponse{} + _result = &aliwaf.ModifyCloudResourceCertResponse{} _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) if _err != nil { return _result, _err @@ -458,178 +428,3 @@ func (client *WafClient) ModifyDomainWithContext(ctx context.Context, tmpReq *al _err = dara.Convert(_body, &_result) return _result, _err } - -func (client *WafClient) CreateCertsWithContext(ctx context.Context, request *aliwaf.CreateCertsRequest, runtime *dara.RuntimeOptions) (_result *aliwaf.CreateCertsResponse, _err error) { - _err = request.Validate() - if _err != nil { - return _result, _err - } - query := map[string]interface{}{} - if !dara.IsNil(request.CertContent) { - query["CertContent"] = request.CertContent - } - - if !dara.IsNil(request.CertKey) { - query["CertKey"] = request.CertKey - } - - if !dara.IsNil(request.CertName) { - query["CertName"] = request.CertName - } - - if !dara.IsNil(request.InstanceId) { - query["InstanceId"] = request.InstanceId - } - - if !dara.IsNil(request.RegionId) { - query["RegionId"] = request.RegionId - } - - if !dara.IsNil(request.ResourceManagerResourceGroupId) { - query["ResourceManagerResourceGroupId"] = request.ResourceManagerResourceGroupId - } - - req := &openapiutil.OpenApiRequest{ - Query: openapiutil.Query(query), - } - params := &openapiutil.Params{ - Action: dara.String("CreateCerts"), - Version: dara.String("2021-10-01"), - Protocol: dara.String("HTTPS"), - Pathname: dara.String("/"), - Method: dara.String("POST"), - AuthType: dara.String("AK"), - Style: dara.String("RPC"), - ReqBodyType: dara.String("formData"), - BodyType: dara.String("json"), - } - _result = &aliwaf.CreateCertsResponse{} - _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) - if _err != nil { - return _result, _err - } - _err = dara.Convert(_body, &_result) - return _result, _err -} - -func (client *WafClient) DescribeCloudResourceAccessPortDetailsWithContext(ctx context.Context, request *aliwaf.DescribeCloudResourceAccessPortDetailsRequest, runtime *dara.RuntimeOptions) (_result *aliwaf.DescribeCloudResourceAccessPortDetailsResponse, _err error) { - _err = request.Validate() - if _err != nil { - return _result, _err - } - query := map[string]interface{}{} - if !dara.IsNil(request.InstanceId) { - query["InstanceId"] = request.InstanceId - } - - if !dara.IsNil(request.PageNumber) { - query["PageNumber"] = request.PageNumber - } - - if !dara.IsNil(request.PageSize) { - query["PageSize"] = request.PageSize - } - - if !dara.IsNil(request.Port) { - query["Port"] = request.Port - } - - if !dara.IsNil(request.Protocol) { - query["Protocol"] = request.Protocol - } - - if !dara.IsNil(request.RegionId) { - query["RegionId"] = request.RegionId - } - - if !dara.IsNil(request.ResourceInstanceId) { - query["ResourceInstanceId"] = request.ResourceInstanceId - } - - if !dara.IsNil(request.ResourceManagerResourceGroupId) { - query["ResourceManagerResourceGroupId"] = request.ResourceManagerResourceGroupId - } - - if !dara.IsNil(request.ResourceProduct) { - query["ResourceProduct"] = request.ResourceProduct - } - - req := &openapiutil.OpenApiRequest{ - Query: openapiutil.Query(query), - } - params := &openapiutil.Params{ - Action: dara.String("DescribeCloudResourceAccessPortDetails"), - Version: dara.String("2021-10-01"), - Protocol: dara.String("HTTPS"), - Pathname: dara.String("/"), - Method: dara.String("POST"), - AuthType: dara.String("AK"), - Style: dara.String("RPC"), - ReqBodyType: dara.String("formData"), - BodyType: dara.String("json"), - } - _result = &aliwaf.DescribeCloudResourceAccessPortDetailsResponse{} - _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) - if _err != nil { - return _result, _err - } - _err = dara.Convert(_body, &_result) - return _result, _err -} - -func (client *WafClient) ModifyCloudResourceCertWithContext(ctx context.Context, request *aliwaf.ModifyCloudResourceCertRequest, runtime *dara.RuntimeOptions) (_result *aliwaf.ModifyCloudResourceCertResponse, _err error) { - _err = request.Validate() - if _err != nil { - return _result, _err - } - query := map[string]interface{}{} - if !dara.IsNil(request.Certificates) { - query["Certificates"] = request.Certificates - } - - if !dara.IsNil(request.CloudResourceId) { - query["CloudResourceId"] = request.CloudResourceId - } - - if !dara.IsNil(request.InstanceId) { - query["InstanceId"] = request.InstanceId - } - - if !dara.IsNil(request.Port) { - query["Port"] = request.Port - } - - if !dara.IsNil(request.RegionId) { - query["RegionId"] = request.RegionId - } - - if !dara.IsNil(request.ResourceInstanceId) { - query["ResourceInstanceId"] = request.ResourceInstanceId - } - - if !dara.IsNil(request.ResourceProduct) { - query["ResourceProduct"] = request.ResourceProduct - } - - req := &openapiutil.OpenApiRequest{ - Query: openapiutil.Query(query), - } - params := &openapiutil.Params{ - Action: dara.String("ModifyCloudResourceCert"), - Version: dara.String("2021-10-01"), - Protocol: dara.String("HTTPS"), - Pathname: dara.String("/"), - Method: dara.String("POST"), - AuthType: dara.String("AK"), - Style: dara.String("RPC"), - ReqBodyType: dara.String("formData"), - BodyType: dara.String("json"), - } - _result = &aliwaf.ModifyCloudResourceCertResponse{} - _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) - if _err != nil { - return _result, _err - } - _err = dara.Convert(_body, &_result) - return _result, _err -}