From 463a38e91a78dc3a988118b47a31bf8a483db062 Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Mon, 10 Nov 2025 22:45:57 +0800 Subject: [PATCH] refactor: lightweight alibaba vendor packages --- go.mod | 60 +- go.sum | 107 ++- .../providers/aliyun-esa/internal/client.go | 266 ++++++++ .../providers/aliyun-esa/internal/lego.go | 4 +- .../providers/baiducloud/internal/lego.go | 13 +- .../providers/jdcloud/internal/lego.go | 2 +- .../providers/aliyun-alb/aliyun_alb.go | 28 +- .../providers/aliyun-alb/internal/client.go | 455 +++++++++++++ .../providers/aliyun-apigw/aliyun_apigw.go | 18 +- .../providers/aliyun-apigw/internal/client.go | 272 ++++++++ .../aliyun-cas-deploy/aliyun_cas_deploy.go | 14 +- .../aliyun-cas-deploy/internal/client.go | 166 +++++ .../providers/aliyun-cdn/aliyun_cdn.go | 10 +- .../providers/aliyun-cdn/internal/client.go | 106 +++ .../providers/aliyun-clb/aliyun_clb.go | 7 +- .../providers/aliyun-clb/internal/client.go | 608 ++++++++++++++++++ .../providers/aliyun-dcdn/aliyun_dcdn.go | 12 +- .../providers/aliyun-dcdn/internal/client.go | 106 +++ .../aliyun-ddospro/aliyun_ddospro.go | 16 +- .../aliyun-ddospro/internal/client.go | 94 +++ .../providers/aliyun-esa/aliyun_esa.go | 10 +- .../providers/aliyun-esa/internal/client.go | 108 ++++ .../providers/aliyun-fc/aliyun_fc.go | 15 +- .../providers/aliyun-fc/internal/client.go | 253 ++++++++ .../providers/aliyun-ga/aliyun_ga.go | 7 +- .../providers/aliyun-ga/internal/client.go | 391 +++++++++++ .../providers/aliyun-live/aliyun_live.go | 11 +- .../providers/aliyun-live/internal/client.go | 102 +++ .../providers/aliyun-nlb/aliyun_nlb.go | 16 +- .../providers/aliyun-nlb/internal/client.go | 298 +++++++++ .../providers/aliyun-vod/aliyun_vod.go | 10 +- .../providers/aliyun-vod/internal/client.go | 110 ++++ .../providers/aliyun-waf/aliyun_waf.go | 18 +- .../providers/aliyun-waf/internal/client.go | 254 ++++++++ .../baiducloud-appblb/baiducloud_appblb.go | 12 +- .../baiducloud-blb/baiducloud_blb.go | 12 +- .../providers/jdcloud-alb/jdcloud_alb.go | 2 +- .../providers/jdcloud-cdn/jdcloud_cdn.go | 2 +- .../providers/jdcloud-live/jdcloud_live.go | 2 +- .../providers/jdcloud-vod/jdcloud_vod.go | 2 +- .../providers/k8s-secret/k8s_secret.go | 15 +- .../volcengine-alb/volcengine_alb.go | 4 +- .../volcengine-cdn/volcengine_cdn.go | 4 +- .../volcengine-clb/volcengine_clb.go | 4 +- .../volcengine-dcdn/volcengine_dcdn.go | 4 +- .../providers/aliyun-cas/aliyun_cas.go | 16 +- .../providers/aliyun-cas/internal/client.go | 194 ++++++ .../providers/aliyun-slb/aliyun_slb.go | 32 +- .../providers/aliyun-slb/aliyun_slb_test.go | 77 +++ .../providers/aliyun-slb/internal/client.go | 202 ++++++ .../providers/ctcccloud-elb/ctcccloud_elb.go | 8 +- .../volcengine-cdn/volcengine_cdn.go | 28 +- .../volcengine_certcenter.go | 4 +- .../volcengine-live/volcengine_live.go | 2 +- pkg/sdk3rd/ctyun/openapi/client.go | 4 +- 55 files changed, 4328 insertions(+), 269 deletions(-) create mode 100644 pkg/core/ssl-applicator/acme-dns01/providers/aliyun-esa/internal/client.go create mode 100644 pkg/core/ssl-deployer/providers/aliyun-alb/internal/client.go create mode 100644 pkg/core/ssl-deployer/providers/aliyun-apigw/internal/client.go create mode 100644 pkg/core/ssl-deployer/providers/aliyun-cas-deploy/internal/client.go create mode 100644 pkg/core/ssl-deployer/providers/aliyun-cdn/internal/client.go create mode 100644 pkg/core/ssl-deployer/providers/aliyun-clb/internal/client.go create mode 100644 pkg/core/ssl-deployer/providers/aliyun-dcdn/internal/client.go create mode 100644 pkg/core/ssl-deployer/providers/aliyun-ddospro/internal/client.go create mode 100644 pkg/core/ssl-deployer/providers/aliyun-esa/internal/client.go create mode 100644 pkg/core/ssl-deployer/providers/aliyun-fc/internal/client.go create mode 100644 pkg/core/ssl-deployer/providers/aliyun-ga/internal/client.go create mode 100644 pkg/core/ssl-deployer/providers/aliyun-live/internal/client.go create mode 100644 pkg/core/ssl-deployer/providers/aliyun-nlb/internal/client.go create mode 100644 pkg/core/ssl-deployer/providers/aliyun-vod/internal/client.go create mode 100644 pkg/core/ssl-deployer/providers/aliyun-waf/internal/client.go create mode 100644 pkg/core/ssl-manager/providers/aliyun-cas/internal/client.go create mode 100644 pkg/core/ssl-manager/providers/aliyun-slb/aliyun_slb_test.go create mode 100644 pkg/core/ssl-manager/providers/aliyun-slb/internal/client.go diff --git a/go.mod b/go.mod index 7b7700f84..0834e0f7a 100644 --- a/go.mod +++ b/go.mod @@ -11,29 +11,36 @@ require ( github.com/G-Core/gcorelabscdn-go v1.0.35 github.com/KscSDK/ksc-sdk-go v0.14.0 github.com/akamai/AkamaiOPEN-edgegrid-golang/v11 v11.1.0 - github.com/alibabacloud-go/alb-20200616/v2 v2.2.9 - github.com/alibabacloud-go/apig-20240327/v5 v5.0.1 + github.com/alibabacloud-go/alb-20200616/v2 v2.2.10 + github.com/alibabacloud-go/apig-20240327/v5 v5.0.3 github.com/alibabacloud-go/cas-20200407/v4 v4.0.3 github.com/alibabacloud-go/cdn-20180510/v8 v8.0.2 github.com/alibabacloud-go/cloudapi-20160714/v5 v5.7.7 github.com/alibabacloud-go/darabonba-openapi/v2 v2.1.13 + github.com/alibabacloud-go/dcdn-20180115/v4 v4.0.0 github.com/alibabacloud-go/ddoscoo-20200101/v4 v4.0.4 - github.com/alibabacloud-go/esa-20240910/v2 v2.39.2 + github.com/alibabacloud-go/esa-20240910/v2 v2.40.1 github.com/alibabacloud-go/fc-20230330/v4 v4.6.3 github.com/alibabacloud-go/fc-open-20210406/v2 v2.0.12 github.com/alibabacloud-go/ga-20191120/v3 v3.1.8 github.com/alibabacloud-go/live-20161101/v2 v2.3.0 github.com/alibabacloud-go/nlb-20220430/v4 v4.1.0 + github.com/alibabacloud-go/openapi-util v0.1.1 github.com/alibabacloud-go/slb-20140515/v4 v4.0.10 github.com/alibabacloud-go/tea v1.3.13 + github.com/alibabacloud-go/tea-utils/v2 v2.0.7 github.com/alibabacloud-go/vod-20170321/v4 v4.10.0 - github.com/alibabacloud-go/waf-openapi-20211001/v6 v6.7.0 + github.com/alibabacloud-go/waf-openapi-20211001/v7 v7.0.0 github.com/aliyun/alibabacloud-oss-go-sdk-v2 v1.3.0 - github.com/aws/aws-sdk-go-v2/service/acm v1.37.10 - github.com/aws/aws-sdk-go-v2/service/cloudfront v1.55.3 + github.com/aws/aws-sdk-go-v2 v1.39.6 + github.com/aws/aws-sdk-go-v2/config v1.31.17 + github.com/aws/aws-sdk-go-v2/credentials v1.18.21 + github.com/aws/aws-sdk-go-v2/service/acm v1.37.11 + github.com/aws/aws-sdk-go-v2/service/cloudfront v1.56.0 github.com/aws/aws-sdk-go-v2/service/iam v1.49.1 github.com/baidubce/bce-sdk-go v0.9.250 github.com/byteplus-sdk/byteplus-sdk-golang v1.0.58 + github.com/domodwyer/mailyak/v3 v3.6.2 github.com/go-acme/lego/v4 v4.28.0 github.com/go-cmd/cmd v1.4.3 github.com/go-resty/resty/v2 v2.16.5 @@ -51,6 +58,8 @@ require ( github.com/povsister/scp v0.0.0-20250701154629-777cf82de5df github.com/qiniu/go-sdk/v7 v7.25.4 github.com/samber/lo v1.52.0 + github.com/spf13/cobra v1.10.1 + github.com/spf13/pflag v1.0.10 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn v1.1.47 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.1.28 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.48 @@ -69,6 +78,8 @@ require ( gitlab.ecloud.com/ecloud/ecloudsdkclouddns v1.0.1 gitlab.ecloud.com/ecloud/ecloudsdkcore v1.0.0 golang.org/x/crypto v0.43.0 + golang.org/x/sync v0.18.0 + golang.org/x/sys v0.38.0 k8s.io/api v0.34.1 k8s.io/apimachinery v0.34.1 k8s.io/client-go v0.34.1 @@ -83,11 +94,6 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.2.0 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.5.0 // indirect github.com/alibabacloud-go/alibabacloud-gateway-fc-util v0.0.7 // indirect - github.com/alibabacloud-go/openplatform-20191219/v2 v2.0.1 // indirect - github.com/alibabacloud-go/tea-fileform v1.1.1 // indirect - github.com/alibabacloud-go/tea-oss-sdk v1.1.5 // indirect - github.com/alibabacloud-go/tea-oss-utils v1.1.0 // indirect - github.com/alibabacloud-go/tea-utils/v2 v2.0.7 // indirect github.com/avast/retry-go v3.0.0+incompatible // indirect github.com/aws/aws-sdk-go v1.40.45 // indirect github.com/aws/aws-sdk-go-v2/service/route53 v1.59.1 // indirect @@ -170,32 +176,24 @@ require ( require ( github.com/BurntSushi/toml v1.5.0 // indirect github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.5 // indirect - github.com/alibabacloud-go/dcdn-20180115/v3 v3.5.0 github.com/alibabacloud-go/debug v1.0.1 // indirect github.com/alibabacloud-go/endpoint-util v1.1.1 // indirect - github.com/alibabacloud-go/openapi-util v0.1.1 // indirect - github.com/alibabacloud-go/tea-utils v1.4.5 // indirect - github.com/alibabacloud-go/tea-xml v1.1.3 // indirect github.com/aliyun/credentials-go v1.4.7 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect - github.com/aws/aws-sdk-go-v2 v1.39.5 - github.com/aws/aws-sdk-go-v2/config v1.31.15 - github.com/aws/aws-sdk-go-v2/credentials v1.18.19 - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.11 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.12 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.12 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.13 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.13 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.13 // indirect github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.2 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.11 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.29.8 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.3 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.38.9 // indirect - github.com/aws/smithy-go v1.23.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.3 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.13 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.30.1 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.5 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.39.1 // indirect + github.com/aws/smithy-go v1.23.2 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/clbanning/mxj/v2 v2.7.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/disintegration/imaging v1.6.2 // indirect - github.com/domodwyer/mailyak/v3 v3.6.2 github.com/dustin/go-humanize v1.0.1 // indirect github.com/fatih/color v1.18.0 // indirect github.com/gabriel-vasile/mimetype v1.4.10 // indirect @@ -203,7 +201,7 @@ require ( github.com/go-jose/go-jose/v4 v4.1.3 // indirect github.com/go-ozzo/ozzo-validation/v4 v4.3.0 // indirect github.com/google/go-querystring v1.1.0 // indirect - github.com/google/uuid v1.6.0 + github.com/google/uuid v1.6.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/json-iterator/go v1.1.13-0.20220915233716-71ac16282d12 // indirect @@ -217,15 +215,11 @@ require ( github.com/nrdcg/namesilo v0.5.0 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/spf13/cast v1.10.0 // indirect - github.com/spf13/cobra v1.10.1 - github.com/spf13/pflag v1.0.10 github.com/tjfoc/gmsm v1.4.1 // indirect golang.org/x/image v0.32.0 // indirect golang.org/x/mod v0.29.0 // indirect golang.org/x/net v0.46.0 // indirect golang.org/x/oauth2 v0.32.0 // indirect - golang.org/x/sync v0.17.0 - golang.org/x/sys v0.37.0 golang.org/x/term v0.36.0 // indirect golang.org/x/text v0.30.0 // indirect golang.org/x/time v0.14.0 // indirect diff --git a/go.sum b/go.sum index ec2c97a5a..3636b0aec 100644 --- a/go.sum +++ b/go.sum @@ -89,8 +89,8 @@ github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRF github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/alex-ant/gomath v0.0.0-20160516115720-89013a210a82/go.mod h1:nLnM0KdK1CmygvjpDUO6m1TjSsiQtL61juhNsvV/JVI= -github.com/alibabacloud-go/alb-20200616/v2 v2.2.9 h1:0pEYgxbkQiXOLKhkCBHPnTEl4X1Ahkoo45qMcyElm+U= -github.com/alibabacloud-go/alb-20200616/v2 v2.2.9/go.mod h1:7revp3b2AHMZq+8GhU+WMFCwqbHC2KSvEDPeAzmTdY0= +github.com/alibabacloud-go/alb-20200616/v2 v2.2.10 h1:6HQJJtav8jevxVyQliQ41LApZfnJ6B/hVtVUhLGO4eI= +github.com/alibabacloud-go/alb-20200616/v2 v2.2.10/go.mod h1:pwbMBl7ZWziOD2cRingbtJcf5q1YrmgA+/jcnsycBjM= github.com/alibabacloud-go/alibabacloud-gateway-fc-util v0.0.7 h1:RDatRb9RG39HjkevgzTeiVoDDaamoB+12GHNairp3Ag= github.com/alibabacloud-go/alibabacloud-gateway-fc-util v0.0.7/go.mod h1:H0RPHXHP/ICfEQrKzQcCqXI15jcV4zaDPCOAmh3U9O8= github.com/alibabacloud-go/alibabacloud-gateway-pop v0.0.6 h1:eIf+iGJxdU4U9ypaUfbtOWCsZSbTb8AUHvyPrxu6mAA= @@ -98,8 +98,8 @@ github.com/alibabacloud-go/alibabacloud-gateway-pop v0.0.6/go.mod h1:4EUIoxs/do2 github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4/go.mod h1:sCavSAvdzOjul4cEqeVtvlSaSScfNsTQ+46HwlTL1hc= github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.5 h1:zE8vH9C7JiZLNJJQ5OwjU9mSi4T9ef9u3BURT6LCLC8= github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.5/go.mod h1:tWnyE9AjF8J8qqLk645oUmVUnFybApTQWklQmi5tY6g= -github.com/alibabacloud-go/apig-20240327/v5 v5.0.1 h1:2Oar/WXh9JNCPdwXXkuomcUOQ5W526G1s/WUaxbsqDA= -github.com/alibabacloud-go/apig-20240327/v5 v5.0.1/go.mod h1:9M9nutBGX1LK/W1U4zOAPZrn9Bigf3ZP3ToR9Dl8Xoc= +github.com/alibabacloud-go/apig-20240327/v5 v5.0.3 h1:TkLXb8oWBTCdt29+xkkFRpBQhaxL1Rqlc8kltXB7uyo= +github.com/alibabacloud-go/apig-20240327/v5 v5.0.3/go.mod h1:9M9nutBGX1LK/W1U4zOAPZrn9Bigf3ZP3ToR9Dl8Xoc= github.com/alibabacloud-go/cas-20200407/v4 v4.0.3 h1:dGM9+DZwb1bnMgxBlI4SvRlnI7r9lr3Zi6cI0zt8uWM= github.com/alibabacloud-go/cas-20200407/v4 v4.0.3/go.mod h1:Kh6ECWAcOACsfBFHkHtKNgdtybfOaPIejX7ot7XNWIc= github.com/alibabacloud-go/cdn-20180510/v8 v8.0.2 h1:IAkEE7tlPQ+G89fNOEv6fHMpLsgOys48rd5TupbEYZI= @@ -112,11 +112,9 @@ github.com/alibabacloud-go/darabonba-encode-util v0.0.2 h1:1uJGrbsGEVqWcWxrS9MyC github.com/alibabacloud-go/darabonba-encode-util v0.0.2/go.mod h1:JiW9higWHYXm7F4PKuMgEUETNZasrDM6vqVr/Can7H8= github.com/alibabacloud-go/darabonba-map v0.0.2 h1:qvPnGB4+dJbJIxOOfawxzF3hzMnIpjmafa0qOTp6udc= github.com/alibabacloud-go/darabonba-map v0.0.2/go.mod h1:28AJaX8FOE/ym8OUFWga+MtEzBunJwQGceGQlvaPGPc= -github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.0/go.mod h1:5JHVmnHvGzR2wNdgaW1zDLQG8kOC4Uec8ubkMogW7OQ= github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.5/go.mod h1:kUe8JqFmoVU7lfBauaDD5taFaW7mBI+xVsyHutYtabg= github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.9/go.mod h1:bb+Io8Sn2RuM3/Rpme6ll86jMyFSrD1bxeV/+v61KeU= github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.10/go.mod h1:26a14FGhZVELuz2cc2AolvW4RHmIO3/HRwsdHhaIPDE= -github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.11/go.mod h1:wHxkgZT1ClZdcwEVP/pDgYK/9HucsnCfMipmJgCz4xY= github.com/alibabacloud-go/darabonba-openapi/v2 v2.1.9/go.mod h1:kgnXaV74AVjM3ZWJu1GhyXGuCtxljJ677oUfz6MyJOE= github.com/alibabacloud-go/darabonba-openapi/v2 v2.1.10/go.mod h1:kgnXaV74AVjM3ZWJu1GhyXGuCtxljJ677oUfz6MyJOE= github.com/alibabacloud-go/darabonba-openapi/v2 v2.1.11/go.mod h1:ue0+WkdPxpCB2JP3iaG4Iawayxp72kyT5uDbozQKaW8= @@ -127,8 +125,8 @@ github.com/alibabacloud-go/darabonba-signature-util v0.0.7 h1:UzCnKvsjPFzApvODDN github.com/alibabacloud-go/darabonba-signature-util v0.0.7/go.mod h1:oUzCYV2fcCH797xKdL6BDH8ADIHlzrtKVjeRtunBNTQ= github.com/alibabacloud-go/darabonba-string v1.0.2 h1:E714wms5ibdzCqGeYJ9JCFywE5nDyvIXIIQbZVFkkqo= github.com/alibabacloud-go/darabonba-string v1.0.2/go.mod h1:93cTfV3vuPhhEwGGpKKqhVW4jLe7tDpo3LUM0i0g6mA= -github.com/alibabacloud-go/dcdn-20180115/v3 v3.5.0 h1:EQmKhYju6y38kJ1ZvZROeJG2Q1Wk6hlc8KQrVhvGyaw= -github.com/alibabacloud-go/dcdn-20180115/v3 v3.5.0/go.mod h1:b9qzvr/2V1f0r1Z6xUmkLqEouKcPGy4LCC22yV+6HQo= +github.com/alibabacloud-go/dcdn-20180115/v4 v4.0.0 h1:Ad7MrfPJGfB0RX+88U0u/TNP7W06nvU+rn6YsS0TUR0= +github.com/alibabacloud-go/dcdn-20180115/v4 v4.0.0/go.mod h1:+cjW21VCRz/IQv/gdbHW6CBhR1mZzPFoXVdUp4ZCgIo= github.com/alibabacloud-go/ddoscoo-20200101/v4 v4.0.4 h1:7QCjt29gSpdF1/BXto4GJLozAshNPbR6Obo/8pXlao4= github.com/alibabacloud-go/ddoscoo-20200101/v4 v4.0.4/go.mod h1:EXd820TvsKZyYHxdkkAtPFqS5Cjp3zAmKxQ9yZ4YLCk= github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68/go.mod h1:6pb/Qy8c+lqua8cFpEy7g39NRRqOWc3rOwAy8m5Y2BY= @@ -138,8 +136,8 @@ github.com/alibabacloud-go/debug v1.0.1/go.mod h1:8gfgZCCAC3+SCzjWtY053FrOcd4/ql github.com/alibabacloud-go/endpoint-util v1.1.0/go.mod h1:O5FuCALmCKs2Ff7JFJMudHs0I5EBgecXXxZRyswlEjE= github.com/alibabacloud-go/endpoint-util v1.1.1 h1:ZkBv2/jnghxtU0p+upSU0GGzW1VL9GQdZO3mcSUTUy8= github.com/alibabacloud-go/endpoint-util v1.1.1/go.mod h1:O5FuCALmCKs2Ff7JFJMudHs0I5EBgecXXxZRyswlEjE= -github.com/alibabacloud-go/esa-20240910/v2 v2.39.2 h1:sMirucmOGBacxGdMPNYlr0XJneV+8Z18EkAyEnioIQU= -github.com/alibabacloud-go/esa-20240910/v2 v2.39.2/go.mod h1:JC3mQdUf5taJpmyaPbBqlWGnYZTKlc6iCHWo/xIslP8= +github.com/alibabacloud-go/esa-20240910/v2 v2.40.1 h1:pDaECbhFsMZIUIxz6sRnB6xET38BUD2ge5W1qWhcdzI= +github.com/alibabacloud-go/esa-20240910/v2 v2.40.1/go.mod h1:udjpsOYX8iBicJtu5YcXp5cd69rfXCap1cGAoosXxNo= github.com/alibabacloud-go/fc-20230330/v4 v4.6.3 h1:OcStT72BGdgf0pov2iUvCcnCrq0MkYdiLXWpXIgd6Kc= github.com/alibabacloud-go/fc-20230330/v4 v4.6.3/go.mod h1:OzdLxJQl4D5dsXKZQZubEZoqYL68M++hyD6n1qIsMHM= github.com/alibabacloud-go/fc-open-20210406/v2 v2.0.12 h1:A3D8Mp6qf8DfR6Dt5MpS8aDVaWfS4N85T5CvGUvgrjM= @@ -150,22 +148,16 @@ github.com/alibabacloud-go/live-20161101/v2 v2.3.0 h1:ApGoDlqh05wG8AIWUCCBZT3Mzx github.com/alibabacloud-go/live-20161101/v2 v2.3.0/go.mod h1:1BN//Z4vOkdEplf0pWcpF1GuIqaPJOwYuPCShljY+nI= github.com/alibabacloud-go/nlb-20220430/v4 v4.1.0 h1:iuoiJUMz0SUWbLxZdyp/IdbtGKuniftnV776FUwMEyU= github.com/alibabacloud-go/nlb-20220430/v4 v4.1.0/go.mod h1:OxNPeLl4eV3s2ZoMcuUoI9sSzwe03n4N9UmQH1H3SUw= -github.com/alibabacloud-go/openapi-util v0.0.11/go.mod h1:sQuElr4ywwFRlCCberQwKRFhRzIyG4QTP/P4y1CJ6Ws= github.com/alibabacloud-go/openapi-util v0.1.0/go.mod h1:sQuElr4ywwFRlCCberQwKRFhRzIyG4QTP/P4y1CJ6Ws= github.com/alibabacloud-go/openapi-util v0.1.1 h1:ujGErJjG8ncRW6XtBBMphzHTvCxn4DjrVw4m04HsS28= github.com/alibabacloud-go/openapi-util v0.1.1/go.mod h1:/UehBSE2cf1gYT43GV4E+RxTdLRzURImCYY0aRmlXpw= -github.com/alibabacloud-go/openplatform-20191219/v2 v2.0.1 h1:L0TIjr9Qh/SLVc1yPhFkcB9+9SbCNK/jPq4ZKB5zmnc= -github.com/alibabacloud-go/openplatform-20191219/v2 v2.0.1/go.mod h1:EKxBRDLcMzwl4VLF/1WJwlByZZECJawPXUvinKMsTTs= github.com/alibabacloud-go/slb-20140515/v4 v4.0.10 h1:ppAt0BUr8hPyp9aCP+fV1KTKclbr/QRqFCSjCPFVXTE= github.com/alibabacloud-go/slb-20140515/v4 v4.0.10/go.mod h1:N1z4uYIL1DcWrrsIq5r552RlAoarl2zmaPKChoG+UA0= github.com/alibabacloud-go/tea v1.1.0/go.mod h1:IkGyUSX4Ba1V+k4pCtJUc6jDpZLFph9QMy2VUPTwukg= github.com/alibabacloud-go/tea v1.1.7/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4= github.com/alibabacloud-go/tea v1.1.8/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4= -github.com/alibabacloud-go/tea v1.1.10/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4= github.com/alibabacloud-go/tea v1.1.11/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4= -github.com/alibabacloud-go/tea v1.1.12/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4= github.com/alibabacloud-go/tea v1.1.17/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A= -github.com/alibabacloud-go/tea v1.1.19/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A= github.com/alibabacloud-go/tea v1.1.20/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A= github.com/alibabacloud-go/tea v1.2.1/go.mod h1:qbzof29bM/IFhLMtJPrgTGK3eauV5J2wSyEUo4OEmnA= github.com/alibabacloud-go/tea v1.2.2/go.mod h1:CF3vOzEMAG+bR4WOql8gc2G9H3EkH3ZLAQdpmpXMgwk= @@ -174,31 +166,17 @@ github.com/alibabacloud-go/tea v1.3.11/go.mod h1:A560v/JTQ1n5zklt2BEpurJzZTI8TUT github.com/alibabacloud-go/tea v1.3.12/go.mod h1:A560v/JTQ1n5zklt2BEpurJzZTI8TUT+Psg2drWlxRg= github.com/alibabacloud-go/tea v1.3.13 h1:WhGy6LIXaMbBM6VBYcsDCz6K/TPsT1Ri2hPmmZffZ94= github.com/alibabacloud-go/tea v1.3.13/go.mod h1:A560v/JTQ1n5zklt2BEpurJzZTI8TUT+Psg2drWlxRg= -github.com/alibabacloud-go/tea-fileform v1.1.1 h1:1YG6erAP3joQ0XdCXYIotuD7zyOM6qCR49xkp5FZDeU= -github.com/alibabacloud-go/tea-fileform v1.1.1/go.mod h1:ZeCV91o4ISmxidd686f0ebdS5EDHWU+vW+TkjLhrsFE= -github.com/alibabacloud-go/tea-oss-sdk v1.1.3/go.mod h1:yUnodpR3Bf2rudLE7V/Gft5txjJF30Pk+hH77K/Eab0= -github.com/alibabacloud-go/tea-oss-sdk v1.1.5 h1:CFUFcqanvBaoGN/CyTHUZrVNtFZd1WTjem46m0HTTV0= -github.com/alibabacloud-go/tea-oss-sdk v1.1.5/go.mod h1:5fhlKMa/kWRJNgPYRt+5qSg3UidRvNbf9Z2bI8Dp5/s= -github.com/alibabacloud-go/tea-oss-utils v1.1.0 h1:y65crjjcZ2Pbb6UZtC2deuIZHDVTS3IaDWE7M9nVLRc= -github.com/alibabacloud-go/tea-oss-utils v1.1.0/go.mod h1:PFCF12e9yEKyBUIn7X1IrF/pNjvxgkHy0CgxX4+xRuY= github.com/alibabacloud-go/tea-utils v1.3.1/go.mod h1:EI/o33aBfj3hETm4RLiAxF/ThQdSngxrpF8rKUDJjPE= -github.com/alibabacloud-go/tea-utils v1.3.6/go.mod h1:EI/o33aBfj3hETm4RLiAxF/ThQdSngxrpF8rKUDJjPE= -github.com/alibabacloud-go/tea-utils v1.4.5 h1:h0/6Xd2f3bPE4XHTvkpjwxowIwRCJAJOqY6Eq8f3zfA= -github.com/alibabacloud-go/tea-utils v1.4.5/go.mod h1:KNcT0oXlZZxOXINnZBs6YvgOd5aYp9U67G+E3R8fcQw= -github.com/alibabacloud-go/tea-utils/v2 v2.0.0/go.mod h1:U5MTY10WwlquGPS34DOeomUGBB0gXbLueiq5Trwu0C4= github.com/alibabacloud-go/tea-utils/v2 v2.0.4/go.mod h1:sj1PbjPodAVTqGTA3olprfeeqqmwD0A5OQz94o9EuXQ= github.com/alibabacloud-go/tea-utils/v2 v2.0.5/go.mod h1:dL6vbUT35E4F4bFTHL845eUloqaerYBYPsdWR2/jhe4= github.com/alibabacloud-go/tea-utils/v2 v2.0.6/go.mod h1:qxn986l+q33J5VkialKMqT/TTs3E+U9MJpd001iWQ9I= github.com/alibabacloud-go/tea-utils/v2 v2.0.7 h1:WDx5qW3Xa5ZgJ1c8NfqJkF6w+AU5wB8835UdhPr6Ax0= github.com/alibabacloud-go/tea-utils/v2 v2.0.7/go.mod h1:qxn986l+q33J5VkialKMqT/TTs3E+U9MJpd001iWQ9I= -github.com/alibabacloud-go/tea-xml v1.1.1/go.mod h1:Rq08vgCcCAjHyRi/M7xlHKUykZCEtyBy9+DPF6GgEu8= -github.com/alibabacloud-go/tea-xml v1.1.2/go.mod h1:Rq08vgCcCAjHyRi/M7xlHKUykZCEtyBy9+DPF6GgEu8= -github.com/alibabacloud-go/tea-xml v1.1.3 h1:7LYnm+JbOq2B+T/B0fHC4Ies4/FofC4zHzYtqw7dgt0= github.com/alibabacloud-go/tea-xml v1.1.3/go.mod h1:Rq08vgCcCAjHyRi/M7xlHKUykZCEtyBy9+DPF6GgEu8= github.com/alibabacloud-go/vod-20170321/v4 v4.10.0 h1:e28BNu9IRhCtHI5HA+2ZRG4r9SDftAyp258q9py2tRU= github.com/alibabacloud-go/vod-20170321/v4 v4.10.0/go.mod h1:IkHD+fJL2oWvs9oxyp5Dc651AO5eptIP5PRsH0ofraA= -github.com/alibabacloud-go/waf-openapi-20211001/v6 v6.7.0 h1:PBX4pFYXV8Ey+QKJYV3G0AC7X926jTFG2zVd5gRkCL4= -github.com/alibabacloud-go/waf-openapi-20211001/v6 v6.7.0/go.mod h1:Pi1XJ9yMR6weUxPMDqVaT+mhHeeSPRdMZh2fl4VCKLs= +github.com/alibabacloud-go/waf-openapi-20211001/v7 v7.0.0 h1:aPnkOUr3x2EKzTrN3trLOpfKV8bE53bL+FmUVukudpY= +github.com/alibabacloud-go/waf-openapi-20211001/v7 v7.0.0/go.mod h1:7ZBhmAzHNEZs2sS6mn0ojKkFsMe0FSOZoHOp36Hx5jo= github.com/aliyun/alibabacloud-oss-go-sdk-v2 v1.3.0 h1:wQlqotpyjYPjJz+Noh5bRu7Snmydk8SKC5Z6u1CR20Y= github.com/aliyun/alibabacloud-oss-go-sdk-v2 v1.3.0/go.mod h1:FTzydeQVmR24FI0D6XWUOMKckjXehM/jgMn1xC+DA9M= github.com/aliyun/credentials-go v1.1.2/go.mod h1:ozcZaMR5kLM7pwtCMEpVmQ242suV6qTJya2bDq4X1Tw= @@ -206,7 +184,6 @@ github.com/aliyun/credentials-go v1.3.1/go.mod h1:8jKYhQuDawt8x2+fusqa1Y6mPxemTs github.com/aliyun/credentials-go v1.3.6/go.mod h1:1LxUuX7L5YrZUWzBrRyk0SwSdH4OmPrib8NVePL3fxM= github.com/aliyun/credentials-go v1.3.10/go.mod h1:Jm6d+xIgwJVLVWT561vy67ZRP4lPTQxMbEYRuT2Ti1U= github.com/aliyun/credentials-go v1.4.5/go.mod h1:Jm6d+xIgwJVLVWT561vy67ZRP4lPTQxMbEYRuT2Ti1U= -github.com/aliyun/credentials-go v1.4.6/go.mod h1:Jm6d+xIgwJVLVWT561vy67ZRP4lPTQxMbEYRuT2Ti1U= github.com/aliyun/credentials-go v1.4.7 h1:T17dLqEtPUFvjDRRb5giVvLh6dFT8IcNFJJb7MeyCxw= github.com/aliyun/credentials-go v1.4.7/go.mod h1:Jm6d+xIgwJVLVWT561vy67ZRP4lPTQxMbEYRuT2Ti1U= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= @@ -224,42 +201,42 @@ github.com/aws/aws-sdk-go v1.25.3/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN github.com/aws/aws-sdk-go v1.40.45 h1:QN1nsY27ssD/JmW4s83qmSb+uL6DG4GmCDzjmJB4xUI= github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= -github.com/aws/aws-sdk-go-v2 v1.39.5 h1:e/SXuia3rkFtapghJROrydtQpfQaaUgd1cUvyO1mp2w= -github.com/aws/aws-sdk-go-v2 v1.39.5/go.mod h1:yWSxrnioGUZ4WVv9TgMrNUeLV3PFESn/v+6T/Su8gnM= -github.com/aws/aws-sdk-go-v2/config v1.31.15 h1:gE3M4xuNXfC/9bG4hyowGm/35uQTi7bUKeYs5e/6uvU= -github.com/aws/aws-sdk-go-v2/config v1.31.15/go.mod h1:HvnvGJoE2I95KAIW8kkWVPJ4XhdrlvwJpV6pEzFQa8o= -github.com/aws/aws-sdk-go-v2/credentials v1.18.19 h1:Jc1zzwkSY1QbkEcLujwqRTXOdvW8ppND3jRBb/VhBQc= -github.com/aws/aws-sdk-go-v2/credentials v1.18.19/go.mod h1:DIfQ9fAk5H0pGtnqfqkbSIzky82qYnGvh06ASQXXg6A= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.11 h1:X7X4YKb+c0rkI6d4uJ5tEMxXgCZ+jZ/D6mvkno8c8Uw= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.11/go.mod h1:EqM6vPZQsZHYvC4Cai35UDg/f5NCEU+vp0WfbVqVcZc= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.12 h1:p/9flfXdoAnwJnuW9xHEAFY22R3A6skYkW19JFF9F+8= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.12/go.mod h1:ZTLHakoVCTtW8AaLGSwJ3LXqHD9uQKnOcv1TrpO6u2k= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.12 h1:2lTWFvRcnWFFLzHWmtddu5MTchc5Oj2OOey++99tPZ0= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.12/go.mod h1:hI92pK+ho8HVcWMHKHrK3Uml4pfG7wvL86FzO0LVtQQ= +github.com/aws/aws-sdk-go-v2 v1.39.6 h1:2JrPCVgWJm7bm83BDwY5z8ietmeJUbh3O2ACnn+Xsqk= +github.com/aws/aws-sdk-go-v2 v1.39.6/go.mod h1:c9pm7VwuW0UPxAEYGyTmyurVcNrbF6Rt/wixFqDhcjE= +github.com/aws/aws-sdk-go-v2/config v1.31.17 h1:QFl8lL6RgakNK86vusim14P2k8BFSxjvUkcWLDjgz9Y= +github.com/aws/aws-sdk-go-v2/config v1.31.17/go.mod h1:V8P7ILjp/Uef/aX8TjGk6OHZN6IKPM5YW6S78QnRD5c= +github.com/aws/aws-sdk-go-v2/credentials v1.18.21 h1:56HGpsgnmD+2/KpG0ikvvR8+3v3COCwaF4r+oWwOeNA= +github.com/aws/aws-sdk-go-v2/credentials v1.18.21/go.mod h1:3YELwedmQbw7cXNaII2Wywd+YY58AmLPwX4LzARgmmA= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.13 h1:T1brd5dR3/fzNFAQch/iBKeX07/ffu/cLu+q+RuzEWk= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.13/go.mod h1:Peg/GBAQ6JDt+RoBf4meB1wylmAipb7Kg2ZFakZTlwk= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.13 h1:a+8/MLcWlIxo1lF9xaGt3J/u3yOZx+CdSveSNwjhD40= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.13/go.mod h1:oGnKwIYZ4XttyU2JWxFrwvhF6YKiK/9/wmE3v3Iu9K8= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.13 h1:HBSI2kDkMdWz4ZM7FjwE7e/pWDEZ+nR95x8Ztet1ooY= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.13/go.mod h1:YE94ZoDArI7awZqJzBAZ3PDD2zSfuP7w6P2knOzIn8M= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 h1:WKuaxf++XKWlHWu9ECbMlha8WOEGm0OUEZqm4K/Gcfk= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4/go.mod h1:ZWy7j6v1vWGmPReu0iSGvRiise4YI5SkR3OHKTZ6Wuc= -github.com/aws/aws-sdk-go-v2/service/acm v1.37.10 h1:kORfSAFKQJuV+86FiEzSG4yDVPSBTPL2hcNdUHiTfjw= -github.com/aws/aws-sdk-go-v2/service/acm v1.37.10/go.mod h1:socc8VxK7qg7mAEMa192VhUkNsikgtzsWHpAGGfSbfE= -github.com/aws/aws-sdk-go-v2/service/cloudfront v1.55.3 h1:I1cy4m75ZT4A1pOdIS9gRiJ3Sp3oAQDnoSr7FdH0cWw= -github.com/aws/aws-sdk-go-v2/service/cloudfront v1.55.3/go.mod h1:af/zNle59yEZVwKlGorGjIYteuW2QkFKIli28DsM26g= +github.com/aws/aws-sdk-go-v2/service/acm v1.37.11 h1:oQgvxk0+83+EVZYsea3QysBDcrXffPG4UcnBfI2XD7M= +github.com/aws/aws-sdk-go-v2/service/acm v1.37.11/go.mod h1:v8E4cAu0qIxpS7IokQilQb60A8IODPxo82VxVtJ+Dgo= +github.com/aws/aws-sdk-go-v2/service/cloudfront v1.56.0 h1:MhbMTYraEw+I/l258s/aGqJOFdKkdcgBJr1NrydMlBw= +github.com/aws/aws-sdk-go-v2/service/cloudfront v1.56.0/go.mod h1:UtP1sSXq2FHHO7Lvn4mNplFS4x7oP4+uMIJIQ8+3JyY= github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o= github.com/aws/aws-sdk-go-v2/service/iam v1.49.1 h1:eTd/dueph9k4ZPn2s2uMmzDrBpwtRchhVxYk4ZT7SDU= github.com/aws/aws-sdk-go-v2/service/iam v1.49.1/go.mod h1:OZUVTVNvBruorgXsEUctXiCDdmho+pY+l5O1P3JtKxY= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.2 h1:xtuxji5CS0JknaXoACOunXOYOQzgfTvGAc9s2QdCJA4= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.2/go.mod h1:zxwi0DIR0rcRcgdbl7E2MSOvxDyyXGBlScvBkARFaLQ= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.11 h1:GpMf3z2KJa4RnJ0ew3Hac+hRFYLZ9DDjfgXjuW+pB54= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.11/go.mod h1:6MZP3ZI4QQsgUCFTwMZA2V0sEriNQ8k2hmoHF3qjimQ= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.3 h1:x2Ibm/Af8Fi+BH+Hsn9TXGdT+hKbDd5XOTZxTMxDk7o= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.3/go.mod h1:IW1jwyrQgMdhisceG8fQLmQIydcT/jWY21rFhzgaKwo= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.13 h1:kDqdFvMY4AtKoACfzIGD8A0+hbT41KTKF//gq7jITfM= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.13/go.mod h1:lmKuogqSU3HzQCwZ9ZtcqOc5XGMqtDK7OIc2+DxiUEg= github.com/aws/aws-sdk-go-v2/service/route53 v1.59.1 h1:KuoA/cmy/yK8n9v/d6WH36cZwGxFOrn0TmZ4lNN3MKQ= github.com/aws/aws-sdk-go-v2/service/route53 v1.59.1/go.mod h1:BymbICXBfXQHO6i+yTBhocA9a6DM0uMDQqYelqa9wzs= -github.com/aws/aws-sdk-go-v2/service/sso v1.29.8 h1:M5nimZmugcZUO9wG7iVtROxPhiqyZX6ejS1lxlDPbTU= -github.com/aws/aws-sdk-go-v2/service/sso v1.29.8/go.mod h1:mbef/pgKhtKRwrigPPs7SSSKZgytzP8PQ6P6JAAdqyM= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.3 h1:S5GuJZpYxE0lKeMHKn+BRTz6PTFpgThyJ+5mYfux7BM= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.3/go.mod h1:X4OF+BTd7HIb3L+tc4UlWHVrpgwZZIVENU15pRDVTI0= -github.com/aws/aws-sdk-go-v2/service/sts v1.38.9 h1:Ekml5vGg6sHSZLZJQJagefnVe6PmqC2oiRkBq4F7fU0= -github.com/aws/aws-sdk-go-v2/service/sts v1.38.9/go.mod h1:/e15V+o1zFHWdH3u7lpI3rVBcxszktIKuHKCY2/py+k= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.1 h1:0JPwLz1J+5lEOfy/g0SURC9cxhbQ1lIMHMa+AHZSzz0= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.1/go.mod h1:fKvyjJcz63iL/ftA6RaM8sRCtN4r4zl4tjL3qw5ec7k= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.5 h1:OWs0/j2UYR5LOGi88sD5/lhN6TDLG6SfA7CqsQO9zF0= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.5/go.mod h1:klO+ejMvYsB4QATfEOIXk8WAEwN4N0aBfJpvC+5SZBo= +github.com/aws/aws-sdk-go-v2/service/sts v1.39.1 h1:mLlUgHn02ue8whiR4BmxxGJLR2gwU6s6ZzJ5wDamBUs= +github.com/aws/aws-sdk-go-v2/service/sts v1.39.1/go.mod h1:E19xDjpzPZC7LS2knI9E6BaRFDK43Eul7vd6rSq2HWk= github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= -github.com/aws/smithy-go v1.23.1 h1:sLvcH6dfAFwGkHLZ7dGiYF7aK6mg4CgKA/iDKjLDt9M= -github.com/aws/smithy-go v1.23.1/go.mod h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0= +github.com/aws/smithy-go v1.23.2 h1:Crv0eatJUQhaManss33hS5r40CG3ZFH+21XSkqMrIUM= +github.com/aws/smithy-go v1.23.2/go.mod h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0= github.com/baidubce/bce-sdk-go v0.9.250 h1:fnvV5clsNCAP6pCauj0eNaUnoLVmjQGnco7rcMqp984= github.com/baidubce/bce-sdk-go v0.9.250/go.mod h1:zbYJMQwE4IZuyrJiFO8tO8NbtYiKTFTbwh4eIsqjVdg= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= @@ -1108,8 +1085,8 @@ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= -golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= +golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1188,8 +1165,8 @@ golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ= -golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= +golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= diff --git a/pkg/core/ssl-applicator/acme-dns01/providers/aliyun-esa/internal/client.go b/pkg/core/ssl-applicator/acme-dns01/providers/aliyun-esa/internal/client.go new file mode 100644 index 000000000..8f8b6e8aa --- /dev/null +++ b/pkg/core/ssl-applicator/acme-dns01/providers/aliyun-esa/internal/client.go @@ -0,0 +1,266 @@ +package internal + +import ( + openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" + openapiutil "github.com/alibabacloud-go/darabonba-openapi/v2/utils" + aliesa "github.com/alibabacloud-go/esa-20240910/v2/client" + "github.com/alibabacloud-go/tea/dara" +) + +// This is a partial copy of https://github.com/alibabacloud-go/esa-20240910/blob/master/client/client.go +// to lightweight the vendor packages in the built binary. +type EsaClient struct { + openapi.Client + DisableSDKError *bool +} + +func NewEsaClient(config *openapiutil.Config) (*EsaClient, error) { + client := new(EsaClient) + err := client.Init(config) + return client, err +} + +func (client *EsaClient) Init(config *openapiutil.Config) (_err error) { + _err = client.Client.Init(config) + if _err != nil { + return _err + } + _err = client.CheckConfig(config) + if _err != nil { + return _err + } + + return nil +} + +func (client *EsaClient) CreateRecordWithOptions(tmpReq *aliesa.CreateRecordRequest, runtime *dara.RuntimeOptions) (_result *aliesa.CreateRecordResponse, _err error) { + _err = tmpReq.Validate() + if _err != nil { + return _result, _err + } + + request := &aliesa.CreateRecordShrinkRequest{} + openapiutil.Convert(tmpReq, request) + if !dara.IsNil(tmpReq.AuthConf) { + request.AuthConfShrink = openapiutil.ArrayToStringWithSpecifiedStyle(tmpReq.AuthConf, dara.String("AuthConf"), dara.String("json")) + } + + if !dara.IsNil(tmpReq.Data) { + request.DataShrink = openapiutil.ArrayToStringWithSpecifiedStyle(tmpReq.Data, dara.String("Data"), dara.String("json")) + } + + query := map[string]interface{}{} + if !dara.IsNil(request.AuthConfShrink) { + query["AuthConf"] = request.AuthConfShrink + } + + if !dara.IsNil(request.BizName) { + query["BizName"] = request.BizName + } + + if !dara.IsNil(request.Comment) { + query["Comment"] = request.Comment + } + + if !dara.IsNil(request.DataShrink) { + query["Data"] = request.DataShrink + } + + if !dara.IsNil(request.HostPolicy) { + query["HostPolicy"] = request.HostPolicy + } + + if !dara.IsNil(request.Proxied) { + query["Proxied"] = request.Proxied + } + + if !dara.IsNil(request.RecordName) { + query["RecordName"] = request.RecordName + } + + if !dara.IsNil(request.SiteId) { + query["SiteId"] = request.SiteId + } + + if !dara.IsNil(request.SourceType) { + query["SourceType"] = request.SourceType + } + + if !dara.IsNil(request.Ttl) { + query["Ttl"] = request.Ttl + } + + if !dara.IsNil(request.Type) { + query["Type"] = request.Type + } + + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("CreateRecord"), + Version: dara.String("2024-09-10"), + 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 = &aliesa.CreateRecordResponse{} + _body, _err := client.CallApi(params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} + +func (client *EsaClient) CreateRecord(request *aliesa.CreateRecordRequest) (_result *aliesa.CreateRecordResponse, _err error) { + runtime := &dara.RuntimeOptions{} + _result = &aliesa.CreateRecordResponse{} + _body, _err := client.CreateRecordWithOptions(request, runtime) + if _err != nil { + return _result, _err + } + _result = _body + return _result, _err +} + +func (client *EsaClient) DeleteRecordWithOptions(request *aliesa.DeleteRecordRequest, runtime *dara.RuntimeOptions) (_result *aliesa.DeleteRecordResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + + query := map[string]interface{}{} + if !dara.IsNil(request.RecordId) { + query["RecordId"] = request.RecordId + } + + if !dara.IsNil(request.SecurityToken) { + query["SecurityToken"] = request.SecurityToken + } + + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("DeleteRecord"), + Version: dara.String("2024-09-10"), + 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 = &aliesa.DeleteRecordResponse{} + _body, _err := client.CallApi(params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} + +func (client *EsaClient) DeleteRecord(request *aliesa.DeleteRecordRequest) (_result *aliesa.DeleteRecordResponse, _err error) { + runtime := &dara.RuntimeOptions{} + _result = &aliesa.DeleteRecordResponse{} + _body, _err := client.DeleteRecordWithOptions(request, runtime) + if _err != nil { + return _result, _err + } + _result = _body + return _result, _err +} + +func (client *EsaClient) ListRecordsWithOptions(request *aliesa.ListRecordsRequest, runtime *dara.RuntimeOptions) (_result *aliesa.ListRecordsResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + + query := openapiutil.Query(dara.ToMap(request)) + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("ListRecords"), + Version: dara.String("2024-09-10"), + Protocol: dara.String("HTTPS"), + Pathname: dara.String("/"), + Method: dara.String("GET"), + AuthType: dara.String("AK"), + Style: dara.String("RPC"), + ReqBodyType: dara.String("formData"), + BodyType: dara.String("json"), + } + _result = &aliesa.ListRecordsResponse{} + _body, _err := client.CallApi(params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} + +func (client *EsaClient) ListRecords(request *aliesa.ListRecordsRequest) (_result *aliesa.ListRecordsResponse, _err error) { + runtime := &dara.RuntimeOptions{} + _result = &aliesa.ListRecordsResponse{} + _body, _err := client.ListRecordsWithOptions(request, runtime) + if _err != nil { + return _result, _err + } + _result = _body + return _result, _err +} + +func (client *EsaClient) ListSitesWithOptions(tmpReq *aliesa.ListSitesRequest, runtime *dara.RuntimeOptions) (_result *aliesa.ListSitesResponse, _err error) { + _err = tmpReq.Validate() + if _err != nil { + return _result, _err + } + + request := &aliesa.ListSitesShrinkRequest{} + openapiutil.Convert(tmpReq, request) + if !dara.IsNil(tmpReq.TagFilter) { + request.TagFilterShrink = openapiutil.ArrayToStringWithSpecifiedStyle(tmpReq.TagFilter, dara.String("TagFilter"), dara.String("json")) + } + + query := openapiutil.Query(dara.ToMap(request)) + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("ListSites"), + Version: dara.String("2024-09-10"), + Protocol: dara.String("HTTPS"), + Pathname: dara.String("/"), + Method: dara.String("GET"), + AuthType: dara.String("AK"), + Style: dara.String("RPC"), + ReqBodyType: dara.String("formData"), + BodyType: dara.String("json"), + } + _result = &aliesa.ListSitesResponse{} + _body, _err := client.CallApi(params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} + +func (client *EsaClient) ListSites(request *aliesa.ListSitesRequest) (_result *aliesa.ListSitesResponse, _err error) { + runtime := &dara.RuntimeOptions{} + _result = &aliesa.ListSitesResponse{} + _body, _err := client.ListSitesWithOptions(request, runtime) + if _err != nil { + return _result, _err + } + _result = _body + return _result, _err +} diff --git a/pkg/core/ssl-applicator/acme-dns01/providers/aliyun-esa/internal/lego.go b/pkg/core/ssl-applicator/acme-dns01/providers/aliyun-esa/internal/lego.go index 9c2dc3ec7..9068d867e 100644 --- a/pkg/core/ssl-applicator/acme-dns01/providers/aliyun-esa/internal/lego.go +++ b/pkg/core/ssl-applicator/acme-dns01/providers/aliyun-esa/internal/lego.go @@ -41,7 +41,7 @@ type Config struct { } type DNSProvider struct { - client *aliesa.Client + client *EsaClient config *Config siteIDs map[string]int64 @@ -76,7 +76,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { return nil, errors.New("alicloud-esa: the configuration of the DNS provider is nil") } - client, err := aliesa.NewClient(&aliopen.Config{ + client, err := NewEsaClient(&aliopen.Config{ AccessKeyId: tea.String(config.SecretID), AccessKeySecret: tea.String(config.SecretKey), Endpoint: tea.String(fmt.Sprintf("esa.%s.aliyuncs.com", config.RegionID)), diff --git a/pkg/core/ssl-applicator/acme-dns01/providers/baiducloud/internal/lego.go b/pkg/core/ssl-applicator/acme-dns01/providers/baiducloud/internal/lego.go index e176b6199..e86de872e 100644 --- a/pkg/core/ssl-applicator/acme-dns01/providers/baiducloud/internal/lego.go +++ b/pkg/core/ssl-applicator/acme-dns01/providers/baiducloud/internal/lego.go @@ -3,14 +3,13 @@ package internal import ( "errors" "fmt" - "strings" "time" bcedns "github.com/baidubce/bce-sdk-go/services/dns" "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/challenge/dns01" "github.com/go-acme/lego/v4/platform/config/env" - "github.com/google/uuid" + "github.com/pocketbase/pocketbase/tools/security" "github.com/samber/lo" ) @@ -172,7 +171,7 @@ func (d *DNSProvider) addOrUpdateDNSRecord(zoneName, subDomain, value string) er Value: value, Ttl: lo.ToPtr(int32(d.config.TTL)), } - err := d.client.CreateRecord(zoneName, request, d.generateClientToken()) + err := d.client.CreateRecord(zoneName, request, security.RandomString(32)) return err } else { request := &bcedns.UpdateRecordRequest{ @@ -181,7 +180,7 @@ func (d *DNSProvider) addOrUpdateDNSRecord(zoneName, subDomain, value string) er Value: value, Ttl: lo.ToPtr(int32(d.config.TTL)), } - err := d.client.UpdateRecord(zoneName, record.Id, request, d.generateClientToken()) + err := d.client.UpdateRecord(zoneName, record.Id, request, security.RandomString(32)) return err } } @@ -195,11 +194,7 @@ func (d *DNSProvider) removeDNSRecord(zoneName, subDomain string) error { if record == nil { return nil } else { - err = d.client.DeleteRecord(zoneName, record.Id, d.generateClientToken()) + err = d.client.DeleteRecord(zoneName, record.Id, security.RandomString(32)) return err } } - -func (d *DNSProvider) generateClientToken() string { - return strings.ReplaceAll(uuid.New().String(), "-", "") -} diff --git a/pkg/core/ssl-applicator/acme-dns01/providers/jdcloud/internal/lego.go b/pkg/core/ssl-applicator/acme-dns01/providers/jdcloud/internal/lego.go index 6b888aae5..d63eb3754 100644 --- a/pkg/core/ssl-applicator/acme-dns01/providers/jdcloud/internal/lego.go +++ b/pkg/core/ssl-applicator/acme-dns01/providers/jdcloud/internal/lego.go @@ -78,7 +78,7 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) { clientConfig := &client.Config clientConfig.SetTimeout(config.HTTPTimeout) client.SetConfig(clientConfig) - client.SetLogger(jdcore.NewDefaultLogger(jdcore.LogWarn)) + client.DisableLogger() return &DNSProvider{ client: client, diff --git a/pkg/core/ssl-deployer/providers/aliyun-alb/aliyun_alb.go b/pkg/core/ssl-deployer/providers/aliyun-alb/aliyun_alb.go index 44de3e7bc..65836437e 100644 --- a/pkg/core/ssl-deployer/providers/aliyun-alb/aliyun_alb.go +++ b/pkg/core/ssl-deployer/providers/aliyun-alb/aliyun_alb.go @@ -12,10 +12,12 @@ import ( alialb "github.com/alibabacloud-go/alb-20200616/v2/client" alicas "github.com/alibabacloud-go/cas-20200407/v4/client" aliopen "github.com/alibabacloud-go/darabonba-openapi/v2/client" + "github.com/alibabacloud-go/tea/dara" "github.com/alibabacloud-go/tea/tea" "github.com/samber/lo" "github.com/certimate-go/certimate/pkg/core" + "github.com/certimate-go/certimate/pkg/core/ssl-deployer/providers/aliyun-alb/internal" sslmgrsp "github.com/certimate-go/certimate/pkg/core/ssl-manager/providers/aliyun-cas" ) @@ -51,8 +53,8 @@ type SSLDeployerProvider struct { var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) type wSDKClients struct { - ALB *alialb.Client - CAS *alicas.Client + ALB *internal.AlbClient + CAS *internal.CasClient } func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { @@ -133,7 +135,7 @@ func (d *SSLDeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCer getLoadBalancerAttributeReq := &alialb.GetLoadBalancerAttributeRequest{ LoadBalancerId: tea.String(d.config.LoadbalancerId), } - getLoadBalancerAttributeResp, err := d.sdkClients.ALB.GetLoadBalancerAttribute(getLoadBalancerAttributeReq) + getLoadBalancerAttributeResp, err := d.sdkClients.ALB.GetLoadBalancerAttributeWithContext(context.TODO(), getLoadBalancerAttributeReq, &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'alb.GetLoadBalancerAttribute'", slog.Any("request", getLoadBalancerAttributeReq), slog.Any("response", getLoadBalancerAttributeResp)) if err != nil { return fmt.Errorf("failed to execute sdk request 'alb.GetLoadBalancerAttribute': %w", err) @@ -157,7 +159,7 @@ func (d *SSLDeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCer LoadBalancerIds: []*string{tea.String(d.config.LoadbalancerId)}, ListenerProtocol: tea.String("HTTPS"), } - listListenersResp, err := d.sdkClients.ALB.ListListeners(listListenersReq) + listListenersResp, err := d.sdkClients.ALB.ListListenersWithContext(context.TODO(), listListenersReq, &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'alb.ListListeners'", slog.Any("request", listListenersReq), slog.Any("response", listListenersResp)) if err != nil { return fmt.Errorf("failed to execute sdk request 'alb.ListListeners': %w", err) @@ -192,7 +194,7 @@ func (d *SSLDeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCer LoadBalancerIds: []*string{tea.String(d.config.LoadbalancerId)}, ListenerProtocol: tea.String("QUIC"), } - listListenersResp, err := d.sdkClients.ALB.ListListeners(listListenersReq) + listListenersResp, err := d.sdkClients.ALB.ListListenersWithContext(context.TODO(), listListenersReq, &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'alb.ListListeners'", slog.Any("request", listListenersReq), slog.Any("response", listListenersResp)) if err != nil { return fmt.Errorf("failed to execute sdk request 'alb.ListListeners': %w", err) @@ -256,7 +258,7 @@ func (d *SSLDeployerProvider) updateListenerCertificate(ctx context.Context, clo getListenerAttributeReq := &alialb.GetListenerAttributeRequest{ ListenerId: tea.String(cloudListenerId), } - getListenerAttributeResp, err := d.sdkClients.ALB.GetListenerAttribute(getListenerAttributeReq) + getListenerAttributeResp, err := d.sdkClients.ALB.GetListenerAttributeWithContext(context.TODO(), getListenerAttributeReq, &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'alb.GetListenerAttribute'", slog.Any("request", getListenerAttributeReq), slog.Any("response", getListenerAttributeResp)) if err != nil { return fmt.Errorf("failed to execute sdk request 'alb.GetListenerAttribute': %w", err) @@ -273,7 +275,7 @@ func (d *SSLDeployerProvider) updateListenerCertificate(ctx context.Context, clo CertificateId: tea.String(cloudCertId), }}, } - updateListenerAttributeResp, err := d.sdkClients.ALB.UpdateListenerAttribute(updateListenerAttributeReq) + updateListenerAttributeResp, err := d.sdkClients.ALB.UpdateListenerAttributeWithContext(context.TODO(), updateListenerAttributeReq, &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'alb.UpdateListenerAttribute'", slog.Any("request", updateListenerAttributeReq), slog.Any("response", updateListenerAttributeResp)) if err != nil { return fmt.Errorf("failed to execute sdk request 'alb.UpdateListenerAttribute': %w", err) @@ -299,7 +301,7 @@ func (d *SSLDeployerProvider) updateListenerCertificate(ctx context.Context, clo ListenerId: tea.String(cloudListenerId), CertificateType: tea.String("Server"), } - listListenerCertificatesResp, err := d.sdkClients.ALB.ListListenerCertificates(listListenerCertificatesReq) + listListenerCertificatesResp, err := d.sdkClients.ALB.ListListenerCertificatesWithContext(context.TODO(), listListenerCertificatesReq, &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'alb.ListListenerCertificates'", slog.Any("request", listListenerCertificatesReq), slog.Any("response", listListenerCertificatesResp)) if err != nil { return fmt.Errorf("failed to execute sdk request 'alb.ListListenerCertificates': %w", err) @@ -352,7 +354,7 @@ func (d *SSLDeployerProvider) updateListenerCertificate(ctx context.Context, clo getUserCertificateDetailReq := &alicas.GetUserCertificateDetailRequest{ CertId: tea.Int64(certificateIdAsInt64), } - getUserCertificateDetailResp, err := d.sdkClients.CAS.GetUserCertificateDetail(getUserCertificateDetailReq) + getUserCertificateDetailResp, err := d.sdkClients.CAS.GetUserCertificateDetailWithContext(context.TODO(), getUserCertificateDetailReq, &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'cas.GetUserCertificateDetail'", slog.Any("request", getUserCertificateDetailReq), slog.Any("response", getUserCertificateDetailResp)) if err != nil { if sdkerr, ok := err.(*tea.SDKError); ok { @@ -395,7 +397,7 @@ func (d *SSLDeployerProvider) updateListenerCertificate(ctx context.Context, clo }, }, } - associateAdditionalCertificatesFromListenerResp, err := d.sdkClients.ALB.AssociateAdditionalCertificatesWithListener(associateAdditionalCertificatesFromListenerReq) + associateAdditionalCertificatesFromListenerResp, err := d.sdkClients.ALB.AssociateAdditionalCertificatesWithListenerWithContext(context.TODO(), associateAdditionalCertificatesFromListenerReq, &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'alb.AssociateAdditionalCertificatesWithListener'", slog.Any("request", associateAdditionalCertificatesFromListenerReq), slog.Any("response", associateAdditionalCertificatesFromListenerResp)) if err != nil { return fmt.Errorf("failed to execute sdk request 'alb.AssociateAdditionalCertificatesWithListener': %w", err) @@ -416,7 +418,7 @@ func (d *SSLDeployerProvider) updateListenerCertificate(ctx context.Context, clo ListenerId: tea.String(cloudListenerId), Certificates: dissociateAdditionalCertificates, } - dissociateAdditionalCertificatesFromListenerResp, err := d.sdkClients.ALB.DissociateAdditionalCertificatesFromListener(dissociateAdditionalCertificatesFromListenerReq) + dissociateAdditionalCertificatesFromListenerResp, err := d.sdkClients.ALB.DissociateAdditionalCertificatesFromListenerWithContext(context.TODO(), dissociateAdditionalCertificatesFromListenerReq, &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'alb.DissociateAdditionalCertificatesFromListener'", slog.Any("request", dissociateAdditionalCertificatesFromListenerReq), slog.Any("response", dissociateAdditionalCertificatesFromListenerResp)) if err != nil { return fmt.Errorf("failed to execute sdk request 'alb.DissociateAdditionalCertificatesFromListener': %w", err) @@ -442,7 +444,7 @@ func createSDKClients(accessKeyId, accessKeySecret, region string) (*wSDKClients AccessKeySecret: tea.String(accessKeySecret), Endpoint: tea.String(albEndpoint), } - albClient, err := alialb.NewClient(albConfig) + albClient, err := internal.NewAlbClient(albConfig) if err != nil { return nil, err } @@ -460,7 +462,7 @@ func createSDKClients(accessKeyId, accessKeySecret, region string) (*wSDKClients AccessKeyId: tea.String(accessKeyId), AccessKeySecret: tea.String(accessKeySecret), } - casClient, err := alicas.NewClient(casConfig) + casClient, err := internal.NewCasClient(casConfig) if err != nil { return nil, err } diff --git a/pkg/core/ssl-deployer/providers/aliyun-alb/internal/client.go b/pkg/core/ssl-deployer/providers/aliyun-alb/internal/client.go new file mode 100644 index 000000000..57d94069e --- /dev/null +++ b/pkg/core/ssl-deployer/providers/aliyun-alb/internal/client.go @@ -0,0 +1,455 @@ +package internal + +import ( + "context" + + alialb "github.com/alibabacloud-go/alb-20200616/v2/client" + alicas "github.com/alibabacloud-go/cas-20200407/v4/client" + openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" + openapiutil "github.com/alibabacloud-go/darabonba-openapi/v2/utils" + "github.com/alibabacloud-go/tea/dara" +) + +// This is a partial copy of https://github.com/alibabacloud-go/cas-20200407/blob/master/client/client_context_func.go +// to lightweight the vendor packages in the built binary. +type CasClient struct { + openapi.Client + DisableSDKError *bool +} + +func NewCasClient(config *openapiutil.Config) (*CasClient, error) { + client := new(CasClient) + err := client.Init(config) + return client, err +} + +func (client *CasClient) Init(config *openapiutil.Config) (_err error) { + _err = client.Client.Init(config) + if _err != nil { + return _err + } + _err = client.CheckConfig(config) + if _err != nil { + return _err + } + + return nil +} + +func (client *CasClient) GetUserCertificateDetailWithContext(ctx context.Context, request *alicas.GetUserCertificateDetailRequest, runtime *dara.RuntimeOptions) (_result *alicas.GetUserCertificateDetailResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !dara.IsNil(request.CertFilter) { + query["CertFilter"] = request.CertFilter + } + + if !dara.IsNil(request.CertId) { + query["CertId"] = request.CertId + } + + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("GetUserCertificateDetail"), + Version: dara.String("2020-04-07"), + 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 = &alicas.GetUserCertificateDetailResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} + +// This is a partial copy of https://github.com/alibabacloud-go/alb-20200616/blob/master/client/client_context_func.go +// to lightweight the vendor packages in the built binary. +type AlbClient struct { + openapi.Client + DisableSDKError *bool +} + +func NewAlbClient(config *openapiutil.Config) (*AlbClient, error) { + client := new(AlbClient) + err := client.Init(config) + return client, err +} + +func (client *AlbClient) Init(config *openapiutil.Config) (_err error) { + _err = client.Client.Init(config) + if _err != nil { + return _err + } + _err = client.CheckConfig(config) + if _err != nil { + return _err + } + + return nil +} + +func (client *AlbClient) AssociateAdditionalCertificatesWithListenerWithContext(ctx context.Context, request *alialb.AssociateAdditionalCertificatesWithListenerRequest, runtime *dara.RuntimeOptions) (_result *alialb.AssociateAdditionalCertificatesWithListenerResponse, _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.ClientToken) { + query["ClientToken"] = request.ClientToken + } + + if !dara.IsNil(request.DryRun) { + query["DryRun"] = request.DryRun + } + + if !dara.IsNil(request.ListenerId) { + query["ListenerId"] = request.ListenerId + } + + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("AssociateAdditionalCertificatesWithListener"), + Version: dara.String("2020-06-16"), + 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 = &alialb.AssociateAdditionalCertificatesWithListenerResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} + +func (client *AlbClient) DissociateAdditionalCertificatesFromListenerWithContext(ctx context.Context, request *alialb.DissociateAdditionalCertificatesFromListenerRequest, runtime *dara.RuntimeOptions) (_result *alialb.DissociateAdditionalCertificatesFromListenerResponse, _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.ClientToken) { + query["ClientToken"] = request.ClientToken + } + + if !dara.IsNil(request.DryRun) { + query["DryRun"] = request.DryRun + } + + if !dara.IsNil(request.ListenerId) { + query["ListenerId"] = request.ListenerId + } + + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("DissociateAdditionalCertificatesFromListener"), + Version: dara.String("2020-06-16"), + 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 = &alialb.DissociateAdditionalCertificatesFromListenerResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} + +func (client *AlbClient) GetListenerAttributeWithContext(ctx context.Context, request *alialb.GetListenerAttributeRequest, runtime *dara.RuntimeOptions) (_result *alialb.GetListenerAttributeResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !dara.IsNil(request.ListenerId) { + query["ListenerId"] = request.ListenerId + } + + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("GetListenerAttribute"), + Version: dara.String("2020-06-16"), + 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 = &alialb.GetListenerAttributeResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} + +func (client *AlbClient) GetLoadBalancerAttributeWithContext(ctx context.Context, request *alialb.GetLoadBalancerAttributeRequest, runtime *dara.RuntimeOptions) (_result *alialb.GetLoadBalancerAttributeResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !dara.IsNil(request.LoadBalancerId) { + query["LoadBalancerId"] = request.LoadBalancerId + } + + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("GetLoadBalancerAttribute"), + Version: dara.String("2020-06-16"), + 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 = &alialb.GetLoadBalancerAttributeResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} + +func (client *AlbClient) ListListenerCertificatesWithContext(ctx context.Context, request *alialb.ListListenerCertificatesRequest, runtime *dara.RuntimeOptions) (_result *alialb.ListListenerCertificatesResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !dara.IsNil(request.CertificateIds) { + query["CertificateIds"] = request.CertificateIds + } + + if !dara.IsNil(request.CertificateType) { + query["CertificateType"] = request.CertificateType + } + + if !dara.IsNil(request.ListenerId) { + query["ListenerId"] = request.ListenerId + } + + if !dara.IsNil(request.MaxResults) { + query["MaxResults"] = request.MaxResults + } + + if !dara.IsNil(request.NextToken) { + query["NextToken"] = request.NextToken + } + + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("ListListenerCertificates"), + Version: dara.String("2020-06-16"), + 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 = &alialb.ListListenerCertificatesResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} + +func (client *AlbClient) ListListenersWithContext(ctx context.Context, request *alialb.ListListenersRequest, runtime *dara.RuntimeOptions) (_result *alialb.ListListenersResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !dara.IsNil(request.ListenerIds) { + query["ListenerIds"] = request.ListenerIds + } + + if !dara.IsNil(request.ListenerProtocol) { + query["ListenerProtocol"] = request.ListenerProtocol + } + + if !dara.IsNil(request.LoadBalancerIds) { + query["LoadBalancerIds"] = request.LoadBalancerIds + } + + if !dara.IsNil(request.MaxResults) { + query["MaxResults"] = request.MaxResults + } + + if !dara.IsNil(request.NextToken) { + query["NextToken"] = request.NextToken + } + + if !dara.IsNil(request.Tag) { + query["Tag"] = request.Tag + } + + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("ListListeners"), + Version: dara.String("2020-06-16"), + 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 = &alialb.ListListenersResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} + +func (client *AlbClient) UpdateListenerAttributeWithContext(ctx context.Context, request *alialb.UpdateListenerAttributeRequest, runtime *dara.RuntimeOptions) (_result *alialb.UpdateListenerAttributeResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !dara.IsNil(request.CaCertificates) { + query["CaCertificates"] = request.CaCertificates + } + + if !dara.IsNil(request.CaEnabled) { + query["CaEnabled"] = request.CaEnabled + } + + if !dara.IsNil(request.Certificates) { + query["Certificates"] = request.Certificates + } + + if !dara.IsNil(request.ClientToken) { + query["ClientToken"] = request.ClientToken + } + + if !dara.IsNil(request.DefaultActions) { + query["DefaultActions"] = request.DefaultActions + } + + if !dara.IsNil(request.DryRun) { + query["DryRun"] = request.DryRun + } + + if !dara.IsNil(request.GzipEnabled) { + query["GzipEnabled"] = request.GzipEnabled + } + + if !dara.IsNil(request.Http2Enabled) { + query["Http2Enabled"] = request.Http2Enabled + } + + if !dara.IsNil(request.IdleTimeout) { + query["IdleTimeout"] = request.IdleTimeout + } + + if !dara.IsNil(request.ListenerDescription) { + query["ListenerDescription"] = request.ListenerDescription + } + + if !dara.IsNil(request.ListenerId) { + query["ListenerId"] = request.ListenerId + } + + if !dara.IsNil(request.QuicConfig) { + query["QuicConfig"] = request.QuicConfig + } + + if !dara.IsNil(request.RequestTimeout) { + query["RequestTimeout"] = request.RequestTimeout + } + + if !dara.IsNil(request.SecurityPolicyId) { + query["SecurityPolicyId"] = request.SecurityPolicyId + } + + if !dara.IsNil(request.XForwardedForConfig) { + query["XForwardedForConfig"] = request.XForwardedForConfig + } + + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("UpdateListenerAttribute"), + Version: dara.String("2020-06-16"), + 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 = &alialb.UpdateListenerAttributeResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} diff --git a/pkg/core/ssl-deployer/providers/aliyun-apigw/aliyun_apigw.go b/pkg/core/ssl-deployer/providers/aliyun-apigw/aliyun_apigw.go index ac39c4424..486596bf3 100644 --- a/pkg/core/ssl-deployer/providers/aliyun-apigw/aliyun_apigw.go +++ b/pkg/core/ssl-deployer/providers/aliyun-apigw/aliyun_apigw.go @@ -11,10 +11,12 @@ import ( aliapig "github.com/alibabacloud-go/apig-20240327/v5/client" alicloudapi "github.com/alibabacloud-go/cloudapi-20160714/v5/client" aliopen "github.com/alibabacloud-go/darabonba-openapi/v2/client" + "github.com/alibabacloud-go/tea/dara" "github.com/alibabacloud-go/tea/tea" "github.com/samber/lo" "github.com/certimate-go/certimate/pkg/core" + "github.com/certimate-go/certimate/pkg/core/ssl-deployer/providers/aliyun-apigw/internal" sslmgrsp "github.com/certimate-go/certimate/pkg/core/ssl-manager/providers/aliyun-cas" ) @@ -47,8 +49,8 @@ type SSLDeployerProvider struct { } type wSDKClients struct { - CloudNativeAPIGateway *aliapig.Client - TraditionalAPIGateway *alicloudapi.Client + CloudNativeAPIGateway *internal.ApigClient + TraditionalAPIGateway *internal.CloudapiClient } var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) @@ -127,7 +129,7 @@ func (d *SSLDeployerProvider) deployToTraditional(ctx context.Context, certPEM s CertificateBody: tea.String(certPEM), CertificatePrivateKey: tea.String(privkeyPEM), } - setDomainCertificateResp, err := d.sdkClients.TraditionalAPIGateway.SetDomainCertificate(setDomainCertificateReq) + setDomainCertificateResp, err := d.sdkClients.TraditionalAPIGateway.SetDomainCertificateWithContext(context.TODO(), setDomainCertificateReq, &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'apigateway.SetDomainCertificate'", slog.Any("request", setDomainCertificateReq), slog.Any("response", setDomainCertificateResp)) if err != nil { return fmt.Errorf("failed to execute sdk request 'apigateway.SetDomainCertificate': %w", err) @@ -163,7 +165,7 @@ func (d *SSLDeployerProvider) deployToCloudNative(ctx context.Context, certPEM s PageNumber: tea.Int32(listDomainsPageNumber), PageSize: tea.Int32(listDomainsPageSize), } - listDomainsResp, err := d.sdkClients.CloudNativeAPIGateway.ListDomains(listDomainsReq) + listDomainsResp, err := d.sdkClients.CloudNativeAPIGateway.ListDomainsWithContext(context.TODO(), listDomainsReq, make(map[string]*string), &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'apig.ListDomains'", slog.Any("request", listDomainsReq), slog.Any("response", listDomainsResp)) if err != nil { return fmt.Errorf("failed to execute sdk request 'apig.ListDomains': %w", err) @@ -195,7 +197,7 @@ func (d *SSLDeployerProvider) deployToCloudNative(ctx context.Context, certPEM s // 查询域名 // REF: https://help.aliyun.com/zh/api-gateway/cloud-native-api-gateway/developer-reference/api-apig-2024-03-27-getdomain getDomainReq := &aliapig.GetDomainRequest{} - getDomainResp, err := d.sdkClients.CloudNativeAPIGateway.GetDomain(tea.String(domainId), getDomainReq) + getDomainResp, err := d.sdkClients.CloudNativeAPIGateway.GetDomainWithContext(context.TODO(), tea.String(domainId), getDomainReq, make(map[string]*string), &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'apig.GetDomain'", slog.String("domainId", domainId), slog.Any("request", getDomainReq), slog.Any("response", getDomainResp)) if err != nil { return fmt.Errorf("failed to execute sdk request 'apig.GetDomain': %w", err) @@ -221,7 +223,7 @@ func (d *SSLDeployerProvider) deployToCloudNative(ctx context.Context, certPEM s TlsCipherSuitesConfig: getDomainResp.Body.Data.TlsCipherSuitesConfig, CertIdentifier: tea.String(upres.ExtendedData["CertIdentifier"].(string)), } - updateDomainResp, err := d.sdkClients.CloudNativeAPIGateway.UpdateDomain(tea.String(domainId), updateDomainReq) + updateDomainResp, err := d.sdkClients.CloudNativeAPIGateway.UpdateDomainWithContext(context.TODO(), tea.String(domainId), updateDomainReq, make(map[string]*string), &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'apig.UpdateDomain'", slog.String("domainId", domainId), slog.Any("request", updateDomainReq), slog.Any("response", updateDomainResp)) if err != nil { return fmt.Errorf("failed to execute sdk request 'apig.UpdateDomain': %w", err) @@ -245,7 +247,7 @@ func createSDKClients(accessKeyId, accessKeySecret, region string) (*wSDKClients AccessKeySecret: tea.String(accessKeySecret), Endpoint: tea.String(cloudNativeAPIGEndpoint), } - cloudNativeAPIGClient, err := aliapig.NewClient(cloudNativeAPIGConfig) + cloudNativeAPIGClient, err := internal.NewApigClient(cloudNativeAPIGConfig) if err != nil { return nil, err } @@ -264,7 +266,7 @@ func createSDKClients(accessKeyId, accessKeySecret, region string) (*wSDKClients AccessKeySecret: tea.String(accessKeySecret), Endpoint: tea.String(traditionalAPIGEndpoint), } - traditionalAPIGClient, err := alicloudapi.NewClient(traditionalAPIGConfig) + traditionalAPIGClient, err := internal.NewCloudapiClient(traditionalAPIGConfig) if err != nil { return nil, err } diff --git a/pkg/core/ssl-deployer/providers/aliyun-apigw/internal/client.go b/pkg/core/ssl-deployer/providers/aliyun-apigw/internal/client.go new file mode 100644 index 000000000..b737a5252 --- /dev/null +++ b/pkg/core/ssl-deployer/providers/aliyun-apigw/internal/client.go @@ -0,0 +1,272 @@ +package internal + +import ( + "context" + + aliapig "github.com/alibabacloud-go/apig-20240327/v5/client" + alicloudapi "github.com/alibabacloud-go/cloudapi-20160714/v5/client" + openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" + openapiutil "github.com/alibabacloud-go/darabonba-openapi/v2/utils" + "github.com/alibabacloud-go/tea/dara" +) + +// This is a partial copy of https://github.com/alibabacloud-go/apig-20240327/blob/master/client/client_context_func.go +// to lightweight the vendor packages in the built binary. +type ApigClient struct { + openapi.Client + DisableSDKError *bool +} + +func NewApigClient(config *openapiutil.Config) (*ApigClient, error) { + client := new(ApigClient) + err := client.Init(config) + return client, err +} + +func (client *ApigClient) GetDomainWithContext(ctx context.Context, domainId *string, request *aliapig.GetDomainRequest, headers map[string]*string, runtime *dara.RuntimeOptions) (_result *aliapig.GetDomainResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !dara.IsNil(request.WithStatistics) { + query["withStatistics"] = request.WithStatistics + } + + req := &openapiutil.OpenApiRequest{ + Headers: headers, + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("GetDomain"), + Version: dara.String("2024-03-27"), + Protocol: dara.String("HTTPS"), + Pathname: dara.String("/v1/domains/" + dara.PercentEncode(dara.StringValue(domainId))), + Method: dara.String("GET"), + AuthType: dara.String("AK"), + Style: dara.String("ROA"), + ReqBodyType: dara.String("json"), + BodyType: dara.String("json"), + } + _result = &aliapig.GetDomainResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} + +func (client *ApigClient) ListDomainsWithContext(ctx context.Context, request *aliapig.ListDomainsRequest, headers map[string]*string, runtime *dara.RuntimeOptions) (_result *aliapig.ListDomainsResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !dara.IsNil(request.GatewayId) { + query["gatewayId"] = request.GatewayId + } + + if !dara.IsNil(request.GatewayType) { + query["gatewayType"] = request.GatewayType + } + + if !dara.IsNil(request.NameLike) { + query["nameLike"] = request.NameLike + } + + if !dara.IsNil(request.PageNumber) { + query["pageNumber"] = request.PageNumber + } + + if !dara.IsNil(request.PageSize) { + query["pageSize"] = request.PageSize + } + + if !dara.IsNil(request.ResourceGroupId) { + query["resourceGroupId"] = request.ResourceGroupId + } + + req := &openapiutil.OpenApiRequest{ + Headers: headers, + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("ListDomains"), + Version: dara.String("2024-03-27"), + Protocol: dara.String("HTTPS"), + Pathname: dara.String("/v1/domains"), + Method: dara.String("GET"), + AuthType: dara.String("AK"), + Style: dara.String("ROA"), + ReqBodyType: dara.String("json"), + BodyType: dara.String("json"), + } + _result = &aliapig.ListDomainsResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} + +func (client *ApigClient) UpdateDomainWithContext(ctx context.Context, domainId *string, request *aliapig.UpdateDomainRequest, headers map[string]*string, runtime *dara.RuntimeOptions) (_result *aliapig.UpdateDomainResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + body := map[string]interface{}{} + + if !dara.IsNil(request.CaCertIdentifier) { + body["caCertIdentifier"] = request.CaCertIdentifier + } + + if !dara.IsNil(request.CertIdentifier) { + body["certIdentifier"] = request.CertIdentifier + } + + if !dara.IsNil(request.ClientCACert) { + body["clientCACert"] = request.ClientCACert + } + + if !dara.IsNil(request.ForceHttps) { + body["forceHttps"] = request.ForceHttps + } + + if !dara.IsNil(request.Http2Option) { + body["http2Option"] = request.Http2Option + } + + if !dara.IsNil(request.MTLSEnabled) { + body["mTLSEnabled"] = request.MTLSEnabled + } + + if !dara.IsNil(request.Protocol) { + body["protocol"] = request.Protocol + } + + if !dara.IsNil(request.TlsCipherSuitesConfig) { + body["tlsCipherSuitesConfig"] = request.TlsCipherSuitesConfig + } + + if !dara.IsNil(request.TlsMax) { + body["tlsMax"] = request.TlsMax + } + + if !dara.IsNil(request.TlsMin) { + body["tlsMin"] = request.TlsMin + } + + req := &openapiutil.OpenApiRequest{ + Headers: headers, + Body: openapiutil.ParseToMap(body), + } + params := &openapiutil.Params{ + Action: dara.String("UpdateDomain"), + Version: dara.String("2024-03-27"), + Protocol: dara.String("HTTPS"), + Pathname: dara.String("/v1/domains/" + dara.PercentEncode(dara.StringValue(domainId))), + Method: dara.String("PUT"), + AuthType: dara.String("AK"), + Style: dara.String("ROA"), + ReqBodyType: dara.String("json"), + BodyType: dara.String("json"), + } + _result = &aliapig.UpdateDomainResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} + +// This is a partial copy of https://github.com/alibabacloud-go/cloudapi-20160714/blob/master/client/client_context_func.go +// to lightweight the vendor packages in the built binary. +type CloudapiClient struct { + openapi.Client + DisableSDKError *bool +} + +func NewCloudapiClient(config *openapiutil.Config) (*CloudapiClient, error) { + client := new(CloudapiClient) + err := client.Init(config) + return client, err +} + +func (client *CloudapiClient) SetDomainCertificateWithContext(ctx context.Context, request *alicloudapi.SetDomainCertificateRequest, runtime *dara.RuntimeOptions) (_result *alicloudapi.SetDomainCertificateResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !dara.IsNil(request.CaCertificateBody) { + query["CaCertificateBody"] = request.CaCertificateBody + } + + if !dara.IsNil(request.CertificateBody) { + query["CertificateBody"] = request.CertificateBody + } + + if !dara.IsNil(request.CertificateName) { + query["CertificateName"] = request.CertificateName + } + + if !dara.IsNil(request.CertificatePrivateKey) { + query["CertificatePrivateKey"] = request.CertificatePrivateKey + } + + if !dara.IsNil(request.ClientCertSDnPassThrough) { + query["ClientCertSDnPassThrough"] = request.ClientCertSDnPassThrough + } + + if !dara.IsNil(request.DomainName) { + query["DomainName"] = request.DomainName + } + + if !dara.IsNil(request.GroupId) { + query["GroupId"] = request.GroupId + } + + if !dara.IsNil(request.SecurityToken) { + query["SecurityToken"] = request.SecurityToken + } + + if !dara.IsNil(request.SslOcspCacheEnable) { + query["SslOcspCacheEnable"] = request.SslOcspCacheEnable + } + + if !dara.IsNil(request.SslOcspEnable) { + query["SslOcspEnable"] = request.SslOcspEnable + } + + if !dara.IsNil(request.SslVerifyDepth) { + query["SslVerifyDepth"] = request.SslVerifyDepth + } + + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("SetDomainCertificate"), + Version: dara.String("2016-07-14"), + 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 = &alicloudapi.SetDomainCertificateResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} diff --git a/pkg/core/ssl-deployer/providers/aliyun-cas-deploy/aliyun_cas_deploy.go b/pkg/core/ssl-deployer/providers/aliyun-cas-deploy/aliyun_cas_deploy.go index 169e3b710..d016af23d 100644 --- a/pkg/core/ssl-deployer/providers/aliyun-cas-deploy/aliyun_cas_deploy.go +++ b/pkg/core/ssl-deployer/providers/aliyun-cas-deploy/aliyun_cas_deploy.go @@ -10,9 +10,11 @@ import ( alicas "github.com/alibabacloud-go/cas-20200407/v4/client" aliopen "github.com/alibabacloud-go/darabonba-openapi/v2/client" + "github.com/alibabacloud-go/tea/dara" "github.com/alibabacloud-go/tea/tea" "github.com/certimate-go/certimate/pkg/core" + "github.com/certimate-go/certimate/pkg/core/ssl-deployer/providers/aliyun-cas-deploy/internal" sslmgrsp "github.com/certimate-go/certimate/pkg/core/ssl-manager/providers/aliyun-cas" ) @@ -35,7 +37,7 @@ type SSLDeployerProviderConfig struct { type SSLDeployerProvider struct { config *SSLDeployerProviderConfig logger *slog.Logger - sdkClient *alicas.Client + sdkClient *internal.CasClient sslManager core.SSLManager } @@ -100,7 +102,7 @@ func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privke ShowSize: tea.Int32(1), CurrentPage: tea.Int32(1), } - listContactResp, err := d.sdkClient.ListContact(listContactReq) + listContactResp, err := d.sdkClient.ListContactWithContext(context.TODO(), listContactReq, &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'cas.ListContact'", slog.Any("request", listContactReq), slog.Any("response", listContactResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'cas.ListContact': %w", err) @@ -120,7 +122,7 @@ func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privke ResourceIds: tea.String(strings.Join(d.config.ResourceIds, ",")), ContactIds: tea.String(strings.Join(contactIds, ",")), } - createDeploymentJobResp, err := d.sdkClient.CreateDeploymentJob(createDeploymentJobReq) + createDeploymentJobResp, err := d.sdkClient.CreateDeploymentJobWithContext(context.TODO(), createDeploymentJobReq, &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'cas.CreateDeploymentJob'", slog.Any("request", createDeploymentJobReq), slog.Any("response", createDeploymentJobResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'cas.CreateDeploymentJob': %w", err) @@ -138,7 +140,7 @@ func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privke describeDeploymentJobReq := &alicas.DescribeDeploymentJobRequest{ JobId: createDeploymentJobResp.Body.JobId, } - describeDeploymentJobResp, err := d.sdkClient.DescribeDeploymentJob(describeDeploymentJobReq) + describeDeploymentJobResp, err := d.sdkClient.DescribeDeploymentJobWithContext(context.TODO(), describeDeploymentJobReq, &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'cas.DescribeDeploymentJob'", slog.Any("request", describeDeploymentJobReq), slog.Any("response", describeDeploymentJobResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'cas.DescribeDeploymentJob': %w", err) @@ -159,7 +161,7 @@ func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privke return &core.SSLDeployResult{}, nil } -func createSDKClient(accessKeyId, accessKeySecret, region string) (*alicas.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (*internal.CasClient, error) { // 接入点一览 https://api.aliyun.com/product/cas var endpoint string switch region { @@ -175,7 +177,7 @@ func createSDKClient(accessKeyId, accessKeySecret, region string) (*alicas.Clien Endpoint: tea.String(endpoint), } - client, err := alicas.NewClient(config) + client, err := internal.NewCasClient(config) if err != nil { return nil, err } diff --git a/pkg/core/ssl-deployer/providers/aliyun-cas-deploy/internal/client.go b/pkg/core/ssl-deployer/providers/aliyun-cas-deploy/internal/client.go new file mode 100644 index 000000000..332cbbbc4 --- /dev/null +++ b/pkg/core/ssl-deployer/providers/aliyun-cas-deploy/internal/client.go @@ -0,0 +1,166 @@ +package internal + +import ( + "context" + + alicas "github.com/alibabacloud-go/cas-20200407/v4/client" + openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" + openapiutil "github.com/alibabacloud-go/darabonba-openapi/v2/utils" + "github.com/alibabacloud-go/tea/dara" +) + +// This is a partial copy of https://github.com/alibabacloud-go/cas-20200407/blob/master/client/client_context_func.go +// to lightweight the vendor packages in the built binary. +type CasClient struct { + openapi.Client + DisableSDKError *bool +} + +func NewCasClient(config *openapiutil.Config) (*CasClient, error) { + client := new(CasClient) + err := client.Init(config) + return client, err +} + +func (client *CasClient) Init(config *openapiutil.Config) (_err error) { + _err = client.Client.Init(config) + if _err != nil { + return _err + } + _err = client.CheckConfig(config) + if _err != nil { + return _err + } + + return nil +} + +func (client *CasClient) CreateDeploymentJobWithContext(ctx context.Context, request *alicas.CreateDeploymentJobRequest, runtime *dara.RuntimeOptions) (_result *alicas.CreateDeploymentJobResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !dara.IsNil(request.CertIds) { + query["CertIds"] = request.CertIds + } + + if !dara.IsNil(request.ContactIds) { + query["ContactIds"] = request.ContactIds + } + + if !dara.IsNil(request.JobType) { + query["JobType"] = request.JobType + } + + if !dara.IsNil(request.Name) { + query["Name"] = request.Name + } + + if !dara.IsNil(request.ResourceIds) { + query["ResourceIds"] = request.ResourceIds + } + + if !dara.IsNil(request.ScheduleTime) { + query["ScheduleTime"] = request.ScheduleTime + } + + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("CreateDeploymentJob"), + Version: dara.String("2020-04-07"), + 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 = &alicas.CreateDeploymentJobResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} + +func (client *CasClient) DescribeDeploymentJobWithContext(ctx context.Context, request *alicas.DescribeDeploymentJobRequest, runtime *dara.RuntimeOptions) (_result *alicas.DescribeDeploymentJobResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !dara.IsNil(request.JobId) { + query["JobId"] = request.JobId + } + + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("DescribeDeploymentJob"), + Version: dara.String("2020-04-07"), + 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 = &alicas.DescribeDeploymentJobResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} + +func (client *CasClient) ListContactWithContext(ctx context.Context, request *alicas.ListContactRequest, runtime *dara.RuntimeOptions) (_result *alicas.ListContactResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !dara.IsNil(request.CurrentPage) { + query["CurrentPage"] = request.CurrentPage + } + + if !dara.IsNil(request.Keyword) { + query["Keyword"] = request.Keyword + } + + if !dara.IsNil(request.ShowSize) { + query["ShowSize"] = request.ShowSize + } + + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("ListContact"), + Version: dara.String("2020-04-07"), + 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 = &alicas.ListContactResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} diff --git a/pkg/core/ssl-deployer/providers/aliyun-cdn/aliyun_cdn.go b/pkg/core/ssl-deployer/providers/aliyun-cdn/aliyun_cdn.go index 9e922c5db..0e9706def 100644 --- a/pkg/core/ssl-deployer/providers/aliyun-cdn/aliyun_cdn.go +++ b/pkg/core/ssl-deployer/providers/aliyun-cdn/aliyun_cdn.go @@ -10,10 +10,12 @@ import ( alicdn "github.com/alibabacloud-go/cdn-20180510/v8/client" aliopen "github.com/alibabacloud-go/darabonba-openapi/v2/client" + "github.com/alibabacloud-go/tea/dara" "github.com/alibabacloud-go/tea/tea" "github.com/samber/lo" "github.com/certimate-go/certimate/pkg/core" + "github.com/certimate-go/certimate/pkg/core/ssl-deployer/providers/aliyun-cdn/internal" sslmgrsp "github.com/certimate-go/certimate/pkg/core/ssl-manager/providers/aliyun-cas" ) @@ -33,7 +35,7 @@ type SSLDeployerProviderConfig struct { type SSLDeployerProvider struct { config *SSLDeployerProviderConfig logger *slog.Logger - sdkClient *alicdn.Client + sdkClient *internal.CdnClient sslManager core.SSLManager } @@ -105,7 +107,7 @@ func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privke Else(tea.String("ap-southeast-1")), SSLProtocol: tea.String("on"), } - setCdnDomainSSLCertificateResp, err := d.sdkClient.SetCdnDomainSSLCertificate(setCdnDomainSSLCertificateReq) + setCdnDomainSSLCertificateResp, err := d.sdkClient.SetCdnDomainSSLCertificateWithContext(context.TODO(), setCdnDomainSSLCertificateReq, &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'cdn.SetCdnDomainSSLCertificate'", slog.Any("request", setCdnDomainSSLCertificateReq), slog.Any("response", setCdnDomainSSLCertificateResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'cdn.SetCdnDomainSSLCertificate': %w", err) @@ -114,14 +116,14 @@ func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privke return &core.SSLDeployResult{}, nil } -func createSDKClient(accessKeyId, accessKeySecret string) (*alicdn.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret string) (*internal.CdnClient, error) { config := &aliopen.Config{ AccessKeyId: tea.String(accessKeyId), AccessKeySecret: tea.String(accessKeySecret), Endpoint: tea.String("cdn.aliyuncs.com"), } - client, err := alicdn.NewClient(config) + client, err := internal.NewCdnClient(config) if err != nil { return nil, err } diff --git a/pkg/core/ssl-deployer/providers/aliyun-cdn/internal/client.go b/pkg/core/ssl-deployer/providers/aliyun-cdn/internal/client.go new file mode 100644 index 000000000..070e8426d --- /dev/null +++ b/pkg/core/ssl-deployer/providers/aliyun-cdn/internal/client.go @@ -0,0 +1,106 @@ +package internal + +import ( + "context" + + alicdn "github.com/alibabacloud-go/cdn-20180510/v8/client" + openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" + openapiutil "github.com/alibabacloud-go/darabonba-openapi/v2/utils" + "github.com/alibabacloud-go/tea/dara" +) + +// This is a partial copy of https://github.com/alibabacloud-go/cdn-20180510/blob/master/client/client_context_func.go +// to lightweight the vendor packages in the built binary. +type CdnClient struct { + openapi.Client + DisableSDKError *bool +} + +func NewCdnClient(config *openapiutil.Config) (*CdnClient, error) { + client := new(CdnClient) + err := client.Init(config) + return client, err +} + +func (client *CdnClient) Init(config *openapiutil.Config) (_err error) { + _err = client.Client.Init(config) + if _err != nil { + return _err + } + _err = client.CheckConfig(config) + if _err != nil { + return _err + } + + return nil +} + +func (client *CdnClient) SetCdnDomainSSLCertificateWithContext(ctx context.Context, request *alicdn.SetCdnDomainSSLCertificateRequest, runtime *dara.RuntimeOptions) (_result *alicdn.SetCdnDomainSSLCertificateResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !dara.IsNil(request.CertId) { + query["CertId"] = request.CertId + } + + if !dara.IsNil(request.CertName) { + query["CertName"] = request.CertName + } + + if !dara.IsNil(request.CertRegion) { + query["CertRegion"] = request.CertRegion + } + + if !dara.IsNil(request.CertType) { + query["CertType"] = request.CertType + } + + if !dara.IsNil(request.DomainName) { + query["DomainName"] = request.DomainName + } + + if !dara.IsNil(request.OwnerId) { + query["OwnerId"] = request.OwnerId + } + + if !dara.IsNil(request.SSLPri) { + query["SSLPri"] = request.SSLPri + } + + if !dara.IsNil(request.SSLProtocol) { + query["SSLProtocol"] = request.SSLProtocol + } + + if !dara.IsNil(request.SSLPub) { + query["SSLPub"] = request.SSLPub + } + + if !dara.IsNil(request.SecurityToken) { + query["SecurityToken"] = request.SecurityToken + } + + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("SetCdnDomainSSLCertificate"), + Version: dara.String("2018-05-10"), + 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 = &alicdn.SetCdnDomainSSLCertificateResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} diff --git a/pkg/core/ssl-deployer/providers/aliyun-clb/aliyun_clb.go b/pkg/core/ssl-deployer/providers/aliyun-clb/aliyun_clb.go index 783b511fc..79939fbc6 100644 --- a/pkg/core/ssl-deployer/providers/aliyun-clb/aliyun_clb.go +++ b/pkg/core/ssl-deployer/providers/aliyun-clb/aliyun_clb.go @@ -11,6 +11,7 @@ import ( "github.com/alibabacloud-go/tea/tea" "github.com/certimate-go/certimate/pkg/core" + "github.com/certimate-go/certimate/pkg/core/ssl-deployer/providers/aliyun-clb/internal" sslmgrsp "github.com/certimate-go/certimate/pkg/core/ssl-manager/providers/aliyun-slb" ) @@ -39,7 +40,7 @@ type SSLDeployerProviderConfig struct { type SSLDeployerProvider struct { config *SSLDeployerProviderConfig logger *slog.Logger - sdkClient *alislb.Client + sdkClient *internal.SlbClient sslManager core.SSLManager } @@ -285,7 +286,7 @@ func (d *SSLDeployerProvider) updateListenerCertificate(ctx context.Context, clo return nil } -func createSDKClient(accessKeyId, accessKeySecret, region string) (*alislb.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (*internal.SlbClient, error) { // 接入点一览 https://api.aliyun.com/product/Slb var endpoint string switch region { @@ -305,7 +306,7 @@ func createSDKClient(accessKeyId, accessKeySecret, region string) (*alislb.Clien Endpoint: tea.String(endpoint), } - client, err := alislb.NewClient(config) + client, err := internal.NewSlbClient(config) if err != nil { return nil, err } diff --git a/pkg/core/ssl-deployer/providers/aliyun-clb/internal/client.go b/pkg/core/ssl-deployer/providers/aliyun-clb/internal/client.go new file mode 100644 index 000000000..53ac2ada5 --- /dev/null +++ b/pkg/core/ssl-deployer/providers/aliyun-clb/internal/client.go @@ -0,0 +1,608 @@ +package internal + +import ( + openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" + openapiutil "github.com/alibabacloud-go/darabonba-openapi/v2/utils" + alislb "github.com/alibabacloud-go/slb-20140515/v4/client" + util "github.com/alibabacloud-go/tea-utils/v2/service" + "github.com/alibabacloud-go/tea/tea" +) + +// This is a partial copy of https://github.com/alibabacloud-go/slb-20140515/blob/master/client/client.go +// to lightweight the vendor packages in the built binary. +type SlbClient struct { + openapi.Client +} + +func NewSlbClient(config *openapi.Config) (*SlbClient, error) { + client := new(SlbClient) + err := client.Init(config) + return client, err +} + +func (client *SlbClient) Init(config *openapi.Config) (_err error) { + _err = client.Client.Init(config) + if _err != nil { + return _err + } + _err = client.CheckConfig(config) + if _err != nil { + return _err + } + + return nil +} + +func (client *SlbClient) DescribeDomainExtensionsWithOptions(request *alislb.DescribeDomainExtensionsRequest, runtime *util.RuntimeOptions) (_result *alislb.DescribeDomainExtensionsResponse, _err error) { + _err = util.ValidateModel(request) + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !tea.BoolValue(util.IsUnset(request.DomainExtensionId)) { + query["DomainExtensionId"] = request.DomainExtensionId + } + + if !tea.BoolValue(util.IsUnset(request.ListenerPort)) { + query["ListenerPort"] = request.ListenerPort + } + + if !tea.BoolValue(util.IsUnset(request.LoadBalancerId)) { + query["LoadBalancerId"] = request.LoadBalancerId + } + + if !tea.BoolValue(util.IsUnset(request.OwnerAccount)) { + query["OwnerAccount"] = request.OwnerAccount + } + + if !tea.BoolValue(util.IsUnset(request.OwnerId)) { + query["OwnerId"] = request.OwnerId + } + + if !tea.BoolValue(util.IsUnset(request.RegionId)) { + query["RegionId"] = request.RegionId + } + + if !tea.BoolValue(util.IsUnset(request.ResourceOwnerAccount)) { + query["ResourceOwnerAccount"] = request.ResourceOwnerAccount + } + + if !tea.BoolValue(util.IsUnset(request.ResourceOwnerId)) { + query["ResourceOwnerId"] = request.ResourceOwnerId + } + + req := &openapi.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapi.Params{ + Action: tea.String("DescribeDomainExtensions"), + Version: tea.String("2014-05-15"), + Protocol: tea.String("HTTPS"), + Pathname: tea.String("/"), + Method: tea.String("POST"), + AuthType: tea.String("AK"), + Style: tea.String("RPC"), + ReqBodyType: tea.String("formData"), + BodyType: tea.String("json"), + } + _result = &alislb.DescribeDomainExtensionsResponse{} + _body, _err := client.CallApi(params, req, runtime) + if _err != nil { + return _result, _err + } + _err = tea.Convert(_body, &_result) + return _result, _err +} + +func (client *SlbClient) DescribeDomainExtensions(request *alislb.DescribeDomainExtensionsRequest) (_result *alislb.DescribeDomainExtensionsResponse, _err error) { + runtime := &util.RuntimeOptions{} + _result = &alislb.DescribeDomainExtensionsResponse{} + _body, _err := client.DescribeDomainExtensionsWithOptions(request, runtime) + if _err != nil { + return _result, _err + } + _result = _body + return _result, _err +} + +func (client *SlbClient) DescribeLoadBalancerListenersWithOptions(request *alislb.DescribeLoadBalancerListenersRequest, runtime *util.RuntimeOptions) (_result *alislb.DescribeLoadBalancerListenersResponse, _err error) { + _err = util.ValidateModel(request) + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !tea.BoolValue(util.IsUnset(request.Description)) { + query["Description"] = request.Description + } + + if !tea.BoolValue(util.IsUnset(request.ListenerPort)) { + query["ListenerPort"] = request.ListenerPort + } + + if !tea.BoolValue(util.IsUnset(request.ListenerProtocol)) { + query["ListenerProtocol"] = request.ListenerProtocol + } + + if !tea.BoolValue(util.IsUnset(request.LoadBalancerId)) { + query["LoadBalancerId"] = request.LoadBalancerId + } + + if !tea.BoolValue(util.IsUnset(request.MaxResults)) { + query["MaxResults"] = request.MaxResults + } + + if !tea.BoolValue(util.IsUnset(request.NextToken)) { + query["NextToken"] = request.NextToken + } + + if !tea.BoolValue(util.IsUnset(request.OwnerAccount)) { + query["OwnerAccount"] = request.OwnerAccount + } + + if !tea.BoolValue(util.IsUnset(request.OwnerId)) { + query["OwnerId"] = request.OwnerId + } + + if !tea.BoolValue(util.IsUnset(request.RegionId)) { + query["RegionId"] = request.RegionId + } + + if !tea.BoolValue(util.IsUnset(request.ResourceOwnerAccount)) { + query["ResourceOwnerAccount"] = request.ResourceOwnerAccount + } + + if !tea.BoolValue(util.IsUnset(request.ResourceOwnerId)) { + query["ResourceOwnerId"] = request.ResourceOwnerId + } + + if !tea.BoolValue(util.IsUnset(request.Tag)) { + query["Tag"] = request.Tag + } + + req := &openapi.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapi.Params{ + Action: tea.String("DescribeLoadBalancerListeners"), + Version: tea.String("2014-05-15"), + Protocol: tea.String("HTTPS"), + Pathname: tea.String("/"), + Method: tea.String("POST"), + AuthType: tea.String("AK"), + Style: tea.String("RPC"), + ReqBodyType: tea.String("formData"), + BodyType: tea.String("json"), + } + _result = &alislb.DescribeLoadBalancerListenersResponse{} + _body, _err := client.CallApi(params, req, runtime) + if _err != nil { + return _result, _err + } + _err = tea.Convert(_body, &_result) + return _result, _err +} + +func (client *SlbClient) DescribeLoadBalancerListeners(request *alislb.DescribeLoadBalancerListenersRequest) (_result *alislb.DescribeLoadBalancerListenersResponse, _err error) { + runtime := &util.RuntimeOptions{} + _result = &alislb.DescribeLoadBalancerListenersResponse{} + _body, _err := client.DescribeLoadBalancerListenersWithOptions(request, runtime) + if _err != nil { + return _result, _err + } + _result = _body + return _result, _err +} + +func (client *SlbClient) DescribeLoadBalancerAttributeWithOptions(request *alislb.DescribeLoadBalancerAttributeRequest, runtime *util.RuntimeOptions) (_result *alislb.DescribeLoadBalancerAttributeResponse, _err error) { + _err = util.ValidateModel(request) + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !tea.BoolValue(util.IsUnset(request.LoadBalancerId)) { + query["LoadBalancerId"] = request.LoadBalancerId + } + + if !tea.BoolValue(util.IsUnset(request.OwnerAccount)) { + query["OwnerAccount"] = request.OwnerAccount + } + + if !tea.BoolValue(util.IsUnset(request.OwnerId)) { + query["OwnerId"] = request.OwnerId + } + + if !tea.BoolValue(util.IsUnset(request.RegionId)) { + query["RegionId"] = request.RegionId + } + + if !tea.BoolValue(util.IsUnset(request.ResourceOwnerAccount)) { + query["ResourceOwnerAccount"] = request.ResourceOwnerAccount + } + + if !tea.BoolValue(util.IsUnset(request.ResourceOwnerId)) { + query["ResourceOwnerId"] = request.ResourceOwnerId + } + + req := &openapi.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapi.Params{ + Action: tea.String("DescribeLoadBalancerAttribute"), + Version: tea.String("2014-05-15"), + Protocol: tea.String("HTTPS"), + Pathname: tea.String("/"), + Method: tea.String("POST"), + AuthType: tea.String("AK"), + Style: tea.String("RPC"), + ReqBodyType: tea.String("formData"), + BodyType: tea.String("json"), + } + _result = &alislb.DescribeLoadBalancerAttributeResponse{} + _body, _err := client.CallApi(params, req, runtime) + if _err != nil { + return _result, _err + } + _err = tea.Convert(_body, &_result) + return _result, _err +} + +func (client *SlbClient) DescribeLoadBalancerAttribute(request *alislb.DescribeLoadBalancerAttributeRequest) (_result *alislb.DescribeLoadBalancerAttributeResponse, _err error) { + runtime := &util.RuntimeOptions{} + _result = &alislb.DescribeLoadBalancerAttributeResponse{} + _body, _err := client.DescribeLoadBalancerAttributeWithOptions(request, runtime) + if _err != nil { + return _result, _err + } + _result = _body + return _result, _err +} + +func (client *SlbClient) DescribeLoadBalancerHTTPSListenerAttributeWithOptions(request *alislb.DescribeLoadBalancerHTTPSListenerAttributeRequest, runtime *util.RuntimeOptions) (_result *alislb.DescribeLoadBalancerHTTPSListenerAttributeResponse, _err error) { + _err = util.ValidateModel(request) + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !tea.BoolValue(util.IsUnset(request.ListenerPort)) { + query["ListenerPort"] = request.ListenerPort + } + + if !tea.BoolValue(util.IsUnset(request.LoadBalancerId)) { + query["LoadBalancerId"] = request.LoadBalancerId + } + + if !tea.BoolValue(util.IsUnset(request.OwnerAccount)) { + query["OwnerAccount"] = request.OwnerAccount + } + + if !tea.BoolValue(util.IsUnset(request.OwnerId)) { + query["OwnerId"] = request.OwnerId + } + + if !tea.BoolValue(util.IsUnset(request.RegionId)) { + query["RegionId"] = request.RegionId + } + + if !tea.BoolValue(util.IsUnset(request.ResourceOwnerAccount)) { + query["ResourceOwnerAccount"] = request.ResourceOwnerAccount + } + + if !tea.BoolValue(util.IsUnset(request.ResourceOwnerId)) { + query["ResourceOwnerId"] = request.ResourceOwnerId + } + + req := &openapi.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapi.Params{ + Action: tea.String("DescribeLoadBalancerHTTPSListenerAttribute"), + Version: tea.String("2014-05-15"), + Protocol: tea.String("HTTPS"), + Pathname: tea.String("/"), + Method: tea.String("POST"), + AuthType: tea.String("AK"), + Style: tea.String("RPC"), + ReqBodyType: tea.String("formData"), + BodyType: tea.String("json"), + } + _result = &alislb.DescribeLoadBalancerHTTPSListenerAttributeResponse{} + _body, _err := client.CallApi(params, req, runtime) + if _err != nil { + return _result, _err + } + _err = tea.Convert(_body, &_result) + return _result, _err +} + +func (client *SlbClient) DescribeLoadBalancerHTTPSListenerAttribute(request *alislb.DescribeLoadBalancerHTTPSListenerAttributeRequest) (_result *alislb.DescribeLoadBalancerHTTPSListenerAttributeResponse, _err error) { + runtime := &util.RuntimeOptions{} + _result = &alislb.DescribeLoadBalancerHTTPSListenerAttributeResponse{} + _body, _err := client.DescribeLoadBalancerHTTPSListenerAttributeWithOptions(request, runtime) + if _err != nil { + return _result, _err + } + _result = _body + return _result, _err +} + +func (client *SlbClient) SetDomainExtensionAttributeWithOptions(request *alislb.SetDomainExtensionAttributeRequest, runtime *util.RuntimeOptions) (_result *alislb.SetDomainExtensionAttributeResponse, _err error) { + _err = util.ValidateModel(request) + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !tea.BoolValue(util.IsUnset(request.DomainExtensionId)) { + query["DomainExtensionId"] = request.DomainExtensionId + } + + if !tea.BoolValue(util.IsUnset(request.OwnerAccount)) { + query["OwnerAccount"] = request.OwnerAccount + } + + if !tea.BoolValue(util.IsUnset(request.OwnerId)) { + query["OwnerId"] = request.OwnerId + } + + if !tea.BoolValue(util.IsUnset(request.RegionId)) { + query["RegionId"] = request.RegionId + } + + if !tea.BoolValue(util.IsUnset(request.ResourceOwnerAccount)) { + query["ResourceOwnerAccount"] = request.ResourceOwnerAccount + } + + if !tea.BoolValue(util.IsUnset(request.ResourceOwnerId)) { + query["ResourceOwnerId"] = request.ResourceOwnerId + } + + if !tea.BoolValue(util.IsUnset(request.ServerCertificateId)) { + query["ServerCertificateId"] = request.ServerCertificateId + } + + req := &openapi.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapi.Params{ + Action: tea.String("SetDomainExtensionAttribute"), + Version: tea.String("2014-05-15"), + Protocol: tea.String("HTTPS"), + Pathname: tea.String("/"), + Method: tea.String("POST"), + AuthType: tea.String("AK"), + Style: tea.String("RPC"), + ReqBodyType: tea.String("formData"), + BodyType: tea.String("json"), + } + _result = &alislb.SetDomainExtensionAttributeResponse{} + _body, _err := client.CallApi(params, req, runtime) + if _err != nil { + return _result, _err + } + _err = tea.Convert(_body, &_result) + return _result, _err +} + +func (client *SlbClient) SetDomainExtensionAttribute(request *alislb.SetDomainExtensionAttributeRequest) (_result *alislb.SetDomainExtensionAttributeResponse, _err error) { + runtime := &util.RuntimeOptions{} + _result = &alislb.SetDomainExtensionAttributeResponse{} + _body, _err := client.SetDomainExtensionAttributeWithOptions(request, runtime) + if _err != nil { + return _result, _err + } + _result = _body + return _result, _err +} + +func (client *SlbClient) SetLoadBalancerHTTPSListenerAttributeWithOptions(request *alislb.SetLoadBalancerHTTPSListenerAttributeRequest, runtime *util.RuntimeOptions) (_result *alislb.SetLoadBalancerHTTPSListenerAttributeResponse, _err error) { + _err = util.ValidateModel(request) + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !tea.BoolValue(util.IsUnset(request.AclId)) { + query["AclId"] = request.AclId + } + + if !tea.BoolValue(util.IsUnset(request.AclStatus)) { + query["AclStatus"] = request.AclStatus + } + + if !tea.BoolValue(util.IsUnset(request.AclType)) { + query["AclType"] = request.AclType + } + + if !tea.BoolValue(util.IsUnset(request.Bandwidth)) { + query["Bandwidth"] = request.Bandwidth + } + + if !tea.BoolValue(util.IsUnset(request.CACertificateId)) { + query["CACertificateId"] = request.CACertificateId + } + + if !tea.BoolValue(util.IsUnset(request.Cookie)) { + query["Cookie"] = request.Cookie + } + + if !tea.BoolValue(util.IsUnset(request.CookieTimeout)) { + query["CookieTimeout"] = request.CookieTimeout + } + + if !tea.BoolValue(util.IsUnset(request.Description)) { + query["Description"] = request.Description + } + + if !tea.BoolValue(util.IsUnset(request.EnableHttp2)) { + query["EnableHttp2"] = request.EnableHttp2 + } + + if !tea.BoolValue(util.IsUnset(request.Gzip)) { + query["Gzip"] = request.Gzip + } + + if !tea.BoolValue(util.IsUnset(request.HealthCheck)) { + query["HealthCheck"] = request.HealthCheck + } + + if !tea.BoolValue(util.IsUnset(request.HealthCheckConnectPort)) { + query["HealthCheckConnectPort"] = request.HealthCheckConnectPort + } + + if !tea.BoolValue(util.IsUnset(request.HealthCheckDomain)) { + query["HealthCheckDomain"] = request.HealthCheckDomain + } + + if !tea.BoolValue(util.IsUnset(request.HealthCheckHttpCode)) { + query["HealthCheckHttpCode"] = request.HealthCheckHttpCode + } + + if !tea.BoolValue(util.IsUnset(request.HealthCheckInterval)) { + query["HealthCheckInterval"] = request.HealthCheckInterval + } + + if !tea.BoolValue(util.IsUnset(request.HealthCheckMethod)) { + query["HealthCheckMethod"] = request.HealthCheckMethod + } + + if !tea.BoolValue(util.IsUnset(request.HealthCheckTimeout)) { + query["HealthCheckTimeout"] = request.HealthCheckTimeout + } + + if !tea.BoolValue(util.IsUnset(request.HealthCheckURI)) { + query["HealthCheckURI"] = request.HealthCheckURI + } + + if !tea.BoolValue(util.IsUnset(request.HealthyThreshold)) { + query["HealthyThreshold"] = request.HealthyThreshold + } + + if !tea.BoolValue(util.IsUnset(request.IdleTimeout)) { + query["IdleTimeout"] = request.IdleTimeout + } + + if !tea.BoolValue(util.IsUnset(request.ListenerPort)) { + query["ListenerPort"] = request.ListenerPort + } + + if !tea.BoolValue(util.IsUnset(request.LoadBalancerId)) { + query["LoadBalancerId"] = request.LoadBalancerId + } + + if !tea.BoolValue(util.IsUnset(request.OwnerAccount)) { + query["OwnerAccount"] = request.OwnerAccount + } + + if !tea.BoolValue(util.IsUnset(request.OwnerId)) { + query["OwnerId"] = request.OwnerId + } + + if !tea.BoolValue(util.IsUnset(request.RegionId)) { + query["RegionId"] = request.RegionId + } + + if !tea.BoolValue(util.IsUnset(request.RequestTimeout)) { + query["RequestTimeout"] = request.RequestTimeout + } + + if !tea.BoolValue(util.IsUnset(request.ResourceOwnerAccount)) { + query["ResourceOwnerAccount"] = request.ResourceOwnerAccount + } + + if !tea.BoolValue(util.IsUnset(request.ResourceOwnerId)) { + query["ResourceOwnerId"] = request.ResourceOwnerId + } + + if !tea.BoolValue(util.IsUnset(request.Scheduler)) { + query["Scheduler"] = request.Scheduler + } + + if !tea.BoolValue(util.IsUnset(request.ServerCertificateId)) { + query["ServerCertificateId"] = request.ServerCertificateId + } + + if !tea.BoolValue(util.IsUnset(request.StickySession)) { + query["StickySession"] = request.StickySession + } + + if !tea.BoolValue(util.IsUnset(request.StickySessionType)) { + query["StickySessionType"] = request.StickySessionType + } + + if !tea.BoolValue(util.IsUnset(request.TLSCipherPolicy)) { + query["TLSCipherPolicy"] = request.TLSCipherPolicy + } + + if !tea.BoolValue(util.IsUnset(request.UnhealthyThreshold)) { + query["UnhealthyThreshold"] = request.UnhealthyThreshold + } + + if !tea.BoolValue(util.IsUnset(request.VServerGroup)) { + query["VServerGroup"] = request.VServerGroup + } + + if !tea.BoolValue(util.IsUnset(request.VServerGroupId)) { + query["VServerGroupId"] = request.VServerGroupId + } + + if !tea.BoolValue(util.IsUnset(request.XForwardedFor)) { + query["XForwardedFor"] = request.XForwardedFor + } + + if !tea.BoolValue(util.IsUnset(request.XForwardedFor_ClientSrcPort)) { + query["XForwardedFor_ClientSrcPort"] = request.XForwardedFor_ClientSrcPort + } + + if !tea.BoolValue(util.IsUnset(request.XForwardedFor_SLBID)) { + query["XForwardedFor_SLBID"] = request.XForwardedFor_SLBID + } + + if !tea.BoolValue(util.IsUnset(request.XForwardedFor_SLBIP)) { + query["XForwardedFor_SLBIP"] = request.XForwardedFor_SLBIP + } + + if !tea.BoolValue(util.IsUnset(request.XForwardedFor_SLBPORT)) { + query["XForwardedFor_SLBPORT"] = request.XForwardedFor_SLBPORT + } + + if !tea.BoolValue(util.IsUnset(request.XForwardedFor_proto)) { + query["XForwardedFor_proto"] = request.XForwardedFor_proto + } + + req := &openapi.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapi.Params{ + Action: tea.String("SetLoadBalancerHTTPSListenerAttribute"), + Version: tea.String("2014-05-15"), + Protocol: tea.String("HTTPS"), + Pathname: tea.String("/"), + Method: tea.String("POST"), + AuthType: tea.String("AK"), + Style: tea.String("RPC"), + ReqBodyType: tea.String("formData"), + BodyType: tea.String("json"), + } + _result = &alislb.SetLoadBalancerHTTPSListenerAttributeResponse{} + _body, _err := client.CallApi(params, req, runtime) + if _err != nil { + return _result, _err + } + _err = tea.Convert(_body, &_result) + return _result, _err +} + +func (client *SlbClient) SetLoadBalancerHTTPSListenerAttribute(request *alislb.SetLoadBalancerHTTPSListenerAttributeRequest) (_result *alislb.SetLoadBalancerHTTPSListenerAttributeResponse, _err error) { + runtime := &util.RuntimeOptions{} + _result = &alislb.SetLoadBalancerHTTPSListenerAttributeResponse{} + _body, _err := client.SetLoadBalancerHTTPSListenerAttributeWithOptions(request, runtime) + if _err != nil { + return _result, _err + } + _result = _body + return _result, _err +} diff --git a/pkg/core/ssl-deployer/providers/aliyun-dcdn/aliyun_dcdn.go b/pkg/core/ssl-deployer/providers/aliyun-dcdn/aliyun_dcdn.go index a599e3975..f34278488 100644 --- a/pkg/core/ssl-deployer/providers/aliyun-dcdn/aliyun_dcdn.go +++ b/pkg/core/ssl-deployer/providers/aliyun-dcdn/aliyun_dcdn.go @@ -9,11 +9,13 @@ import ( "strings" aliopen "github.com/alibabacloud-go/darabonba-openapi/v2/client" - alidcdn "github.com/alibabacloud-go/dcdn-20180115/v3/client" + alidcdn "github.com/alibabacloud-go/dcdn-20180115/v4/client" + "github.com/alibabacloud-go/tea/dara" "github.com/alibabacloud-go/tea/tea" "github.com/samber/lo" "github.com/certimate-go/certimate/pkg/core" + "github.com/certimate-go/certimate/pkg/core/ssl-deployer/providers/aliyun-dcdn/internal" sslmgrsp "github.com/certimate-go/certimate/pkg/core/ssl-manager/providers/aliyun-cas" ) @@ -33,7 +35,7 @@ type SSLDeployerProviderConfig struct { type SSLDeployerProvider struct { config *SSLDeployerProviderConfig logger *slog.Logger - sdkClient *alidcdn.Client + sdkClient *internal.DcdnClient sslManager core.SSLManager } @@ -105,7 +107,7 @@ func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privke Else(tea.String("ap-southeast-1")), SSLProtocol: tea.String("on"), } - setDcdnDomainSSLCertificateResp, err := d.sdkClient.SetDcdnDomainSSLCertificate(setDcdnDomainSSLCertificateReq) + setDcdnDomainSSLCertificateResp, err := d.sdkClient.SetDcdnDomainSSLCertificateWithContext(context.TODO(), setDcdnDomainSSLCertificateReq, &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'dcdn.SetDcdnDomainSSLCertificate'", slog.Any("request", setDcdnDomainSSLCertificateReq), slog.Any("response", setDcdnDomainSSLCertificateResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'dcdn.SetDcdnDomainSSLCertificate': %w", err) @@ -114,14 +116,14 @@ func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privke return &core.SSLDeployResult{}, nil } -func createSDKClient(accessKeyId, accessKeySecret string) (*alidcdn.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret string) (*internal.DcdnClient, error) { config := &aliopen.Config{ AccessKeyId: tea.String(accessKeyId), AccessKeySecret: tea.String(accessKeySecret), Endpoint: tea.String("dcdn.aliyuncs.com"), } - client, err := alidcdn.NewClient(config) + client, err := internal.NewDcdnClient(config) if err != nil { return nil, err } diff --git a/pkg/core/ssl-deployer/providers/aliyun-dcdn/internal/client.go b/pkg/core/ssl-deployer/providers/aliyun-dcdn/internal/client.go new file mode 100644 index 000000000..fbff22aa4 --- /dev/null +++ b/pkg/core/ssl-deployer/providers/aliyun-dcdn/internal/client.go @@ -0,0 +1,106 @@ +package internal + +import ( + "context" + + openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" + openapiutil "github.com/alibabacloud-go/darabonba-openapi/v2/utils" + alidcdn "github.com/alibabacloud-go/dcdn-20180115/v4/client" + "github.com/alibabacloud-go/tea/dara" +) + +// This is a partial copy of https://github.com/alibabacloud-go/dcdn-20180115/blob/master/client/client_context_func.go +// to lightweight the vendor packages in the built binary. +type DcdnClient struct { + openapi.Client + DisableSDKError *bool +} + +func NewDcdnClient(config *openapiutil.Config) (*DcdnClient, error) { + client := new(DcdnClient) + err := client.Init(config) + return client, err +} + +func (client *DcdnClient) Init(config *openapiutil.Config) (_err error) { + _err = client.Client.Init(config) + if _err != nil { + return _err + } + _err = client.CheckConfig(config) + if _err != nil { + return _err + } + + return nil +} + +func (client *DcdnClient) SetDcdnDomainSSLCertificateWithContext(ctx context.Context, request *alidcdn.SetDcdnDomainSSLCertificateRequest, runtime *dara.RuntimeOptions) (_result *alidcdn.SetDcdnDomainSSLCertificateResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !dara.IsNil(request.CertId) { + query["CertId"] = request.CertId + } + + if !dara.IsNil(request.CertName) { + query["CertName"] = request.CertName + } + + if !dara.IsNil(request.CertRegion) { + query["CertRegion"] = request.CertRegion + } + + if !dara.IsNil(request.CertType) { + query["CertType"] = request.CertType + } + + if !dara.IsNil(request.DomainName) { + query["DomainName"] = request.DomainName + } + + if !dara.IsNil(request.OwnerId) { + query["OwnerId"] = request.OwnerId + } + + if !dara.IsNil(request.SSLPri) { + query["SSLPri"] = request.SSLPri + } + + if !dara.IsNil(request.SSLProtocol) { + query["SSLProtocol"] = request.SSLProtocol + } + + if !dara.IsNil(request.SSLPub) { + query["SSLPub"] = request.SSLPub + } + + if !dara.IsNil(request.SecurityToken) { + query["SecurityToken"] = request.SecurityToken + } + + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("SetDcdnDomainSSLCertificate"), + Version: dara.String("2018-01-15"), + 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 = &alidcdn.SetDcdnDomainSSLCertificateResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} diff --git a/pkg/core/ssl-deployer/providers/aliyun-ddospro/aliyun_ddospro.go b/pkg/core/ssl-deployer/providers/aliyun-ddospro/aliyun_ddospro.go index 49548e3f0..4490da2cb 100644 --- a/pkg/core/ssl-deployer/providers/aliyun-ddospro/aliyun_ddospro.go +++ b/pkg/core/ssl-deployer/providers/aliyun-ddospro/aliyun_ddospro.go @@ -5,15 +5,16 @@ import ( "errors" "fmt" "log/slog" - "strconv" "strings" aliopen "github.com/alibabacloud-go/darabonba-openapi/v2/client" aliddoscoo "github.com/alibabacloud-go/ddoscoo-20200101/v4/client" + "github.com/alibabacloud-go/tea/dara" "github.com/alibabacloud-go/tea/tea" "github.com/samber/lo" "github.com/certimate-go/certimate/pkg/core" + "github.com/certimate-go/certimate/pkg/core/ssl-deployer/providers/aliyun-ddospro/internal" sslmgrsp "github.com/certimate-go/certimate/pkg/core/ssl-manager/providers/aliyun-cas" ) @@ -33,7 +34,7 @@ type SSLDeployerProviderConfig struct { type SSLDeployerProvider struct { config *SSLDeployerProviderConfig logger *slog.Logger - sdkClient *aliddoscoo.Client + sdkClient *internal.DdoscooClient sslManager core.SSLManager } @@ -94,12 +95,11 @@ func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privke // 为网站业务转发规则关联 SSL 证书 // REF: https://help.aliyun.com/zh/anti-ddos/anti-ddos-pro-and-premium/developer-reference/api-ddoscoo-2020-01-01-associatewebcert - certId, _ := strconv.ParseInt(upres.CertId, 10, 32) associateWebCertReq := &aliddoscoo.AssociateWebCertRequest{ - Domain: tea.String(d.config.Domain), - CertId: tea.Int32(int32(certId)), + Domain: tea.String(d.config.Domain), + CertIdentifier: tea.String(upres.ExtendedData["CertIdentifier"].(string)), } - associateWebCertResp, err := d.sdkClient.AssociateWebCert(associateWebCertReq) + associateWebCertResp, err := d.sdkClient.AssociateWebCertWithContext(context.TODO(), associateWebCertReq, &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'dcdn.AssociateWebCert'", slog.Any("request", associateWebCertReq), slog.Any("response", associateWebCertResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'dcdn.AssociateWebCert': %w", err) @@ -108,7 +108,7 @@ func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privke return &core.SSLDeployResult{}, nil } -func createSDKClient(accessKeyId, accessKeySecret, region string) (*aliddoscoo.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (*internal.DdoscooClient, error) { // 接入点一览 https://api.aliyun.com/product/ddoscoo var endpoint string switch region { @@ -124,7 +124,7 @@ func createSDKClient(accessKeyId, accessKeySecret, region string) (*aliddoscoo.C Endpoint: tea.String(endpoint), } - client, err := aliddoscoo.NewClient(config) + client, err := internal.NewDdoscooClient(config) if err != nil { return nil, err } diff --git a/pkg/core/ssl-deployer/providers/aliyun-ddospro/internal/client.go b/pkg/core/ssl-deployer/providers/aliyun-ddospro/internal/client.go new file mode 100644 index 000000000..837d3507b --- /dev/null +++ b/pkg/core/ssl-deployer/providers/aliyun-ddospro/internal/client.go @@ -0,0 +1,94 @@ +package internal + +import ( + "context" + + openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" + openapiutil "github.com/alibabacloud-go/darabonba-openapi/v2/utils" + aliddoscoo "github.com/alibabacloud-go/ddoscoo-20200101/v4/client" + "github.com/alibabacloud-go/tea/dara" +) + +// This is a partial copy of https://github.com/alibabacloud-go/ddoscoo-20200101/blob/master/client/client_context_func.go +// to lightweight the vendor packages in the built binary. +type DdoscooClient struct { + openapi.Client + DisableSDKError *bool +} + +func NewDdoscooClient(config *openapiutil.Config) (*DdoscooClient, error) { + client := new(DdoscooClient) + err := client.Init(config) + return client, err +} + +func (client *DdoscooClient) Init(config *openapiutil.Config) (_err error) { + _err = client.Client.Init(config) + if _err != nil { + return _err + } + _err = client.CheckConfig(config) + if _err != nil { + return _err + } + + return nil +} + +func (client *DdoscooClient) AssociateWebCertWithContext(ctx context.Context, request *aliddoscoo.AssociateWebCertRequest, runtime *dara.RuntimeOptions) (_result *aliddoscoo.AssociateWebCertResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + body := map[string]interface{}{} + + if !dara.IsNil(request.Cert) { + body["Cert"] = request.Cert + } + + if !dara.IsNil(request.CertId) { + body["CertId"] = request.CertId + } + + if !dara.IsNil(request.CertIdentifier) { + body["CertIdentifier"] = request.CertIdentifier + } + + if !dara.IsNil(request.CertName) { + body["CertName"] = request.CertName + } + + if !dara.IsNil(request.CertRegion) { + body["CertRegion"] = request.CertRegion + } + + if !dara.IsNil(request.Domain) { + body["Domain"] = request.Domain + } + + if !dara.IsNil(request.Key) { + body["Key"] = request.Key + } + + req := &openapiutil.OpenApiRequest{ + Body: openapiutil.ParseToMap(body), + } + params := &openapiutil.Params{ + Action: dara.String("AssociateWebCert"), + Version: dara.String("2020-01-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 = &aliddoscoo.AssociateWebCertResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} diff --git a/pkg/core/ssl-deployer/providers/aliyun-esa/aliyun_esa.go b/pkg/core/ssl-deployer/providers/aliyun-esa/aliyun_esa.go index ea388d391..ebcede0e6 100644 --- a/pkg/core/ssl-deployer/providers/aliyun-esa/aliyun_esa.go +++ b/pkg/core/ssl-deployer/providers/aliyun-esa/aliyun_esa.go @@ -10,10 +10,12 @@ import ( aliopen "github.com/alibabacloud-go/darabonba-openapi/v2/client" aliesa "github.com/alibabacloud-go/esa-20240910/v2/client" + "github.com/alibabacloud-go/tea/dara" "github.com/alibabacloud-go/tea/tea" "github.com/samber/lo" "github.com/certimate-go/certimate/pkg/core" + "github.com/certimate-go/certimate/pkg/core/ssl-deployer/providers/aliyun-esa/internal" sslmgrsp "github.com/certimate-go/certimate/pkg/core/ssl-manager/providers/aliyun-cas" ) @@ -33,7 +35,7 @@ type SSLDeployerProviderConfig struct { type SSLDeployerProvider struct { config *SSLDeployerProviderConfig logger *slog.Logger - sdkClient *aliesa.Client + sdkClient *internal.EsaClient sslManager core.SSLManager } @@ -101,7 +103,7 @@ func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privke CasId: tea.Int64(certId), Region: tea.String(d.config.Region), } - setCertificateResp, err := d.sdkClient.SetCertificate(setCertificateReq) + setCertificateResp, err := d.sdkClient.SetCertificateWithContext(context.TODO(), setCertificateReq, &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'esa.SetCertificate'", slog.Any("request", setCertificateReq), slog.Any("response", setCertificateResp)) if err != nil { var sdkError *tea.SDKError @@ -116,7 +118,7 @@ func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privke return &core.SSLDeployResult{}, nil } -func createSDKClient(accessKeyId, accessKeySecret, region string) (*aliesa.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (*internal.EsaClient, error) { // 接入点一览 https://api.aliyun.com/product/ESA var endpoint string switch region { @@ -132,7 +134,7 @@ func createSDKClient(accessKeyId, accessKeySecret, region string) (*aliesa.Clien Endpoint: tea.String(endpoint), } - client, err := aliesa.NewClient(config) + client, err := internal.NewEsaClient(config) if err != nil { return nil, err } diff --git a/pkg/core/ssl-deployer/providers/aliyun-esa/internal/client.go b/pkg/core/ssl-deployer/providers/aliyun-esa/internal/client.go new file mode 100644 index 000000000..d58c8a2fa --- /dev/null +++ b/pkg/core/ssl-deployer/providers/aliyun-esa/internal/client.go @@ -0,0 +1,108 @@ +package internal + +import ( + "context" + + openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" + openapiutil "github.com/alibabacloud-go/darabonba-openapi/v2/utils" + aliesa "github.com/alibabacloud-go/esa-20240910/v2/client" + "github.com/alibabacloud-go/tea/dara" +) + +// This is a partial copy of https://github.com/alibabacloud-go/esa-20240910/blob/master/client/client_context_func.go +// to lightweight the vendor packages in the built binary. +type EsaClient struct { + openapi.Client + DisableSDKError *bool +} + +func NewEsaClient(config *openapiutil.Config) (*EsaClient, error) { + client := new(EsaClient) + err := client.Init(config) + return client, err +} + +func (client *EsaClient) Init(config *openapiutil.Config) (_err error) { + _err = client.Client.Init(config) + if _err != nil { + return _err + } + _err = client.CheckConfig(config) + if _err != nil { + return _err + } + + return nil +} + +func (client *EsaClient) SetCertificateWithContext(ctx context.Context, request *aliesa.SetCertificateRequest, runtime *dara.RuntimeOptions) (_result *aliesa.SetCertificateResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !dara.IsNil(request.OwnerId) { + query["OwnerId"] = request.OwnerId + } + + if !dara.IsNil(request.SecurityToken) { + query["SecurityToken"] = request.SecurityToken + } + + body := map[string]interface{}{} + if !dara.IsNil(request.CasId) { + body["CasId"] = request.CasId + } + + if !dara.IsNil(request.Certificate) { + body["Certificate"] = request.Certificate + } + + if !dara.IsNil(request.Id) { + body["Id"] = request.Id + } + + if !dara.IsNil(request.Name) { + body["Name"] = request.Name + } + + if !dara.IsNil(request.PrivateKey) { + body["PrivateKey"] = request.PrivateKey + } + + if !dara.IsNil(request.Region) { + body["Region"] = request.Region + } + + if !dara.IsNil(request.SiteId) { + body["SiteId"] = request.SiteId + } + + if !dara.IsNil(request.Type) { + body["Type"] = request.Type + } + + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + Body: openapiutil.ParseToMap(body), + } + params := &openapiutil.Params{ + Action: dara.String("SetCertificate"), + Version: dara.String("2024-09-10"), + 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 = &aliesa.SetCertificateResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} diff --git a/pkg/core/ssl-deployer/providers/aliyun-fc/aliyun_fc.go b/pkg/core/ssl-deployer/providers/aliyun-fc/aliyun_fc.go index f21be235e..3359a7aef 100644 --- a/pkg/core/ssl-deployer/providers/aliyun-fc/aliyun_fc.go +++ b/pkg/core/ssl-deployer/providers/aliyun-fc/aliyun_fc.go @@ -10,8 +10,11 @@ import ( aliopen "github.com/alibabacloud-go/darabonba-openapi/v2/client" alifc3 "github.com/alibabacloud-go/fc-20230330/v4/client" alifc2 "github.com/alibabacloud-go/fc-open-20210406/v2/client" + "github.com/alibabacloud-go/tea/dara" "github.com/alibabacloud-go/tea/tea" + "github.com/certimate-go/certimate/pkg/core" + "github.com/certimate-go/certimate/pkg/core/ssl-deployer/providers/aliyun-fc/internal" ) type SSLDeployerProviderConfig struct { @@ -39,8 +42,8 @@ type SSLDeployerProvider struct { var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) type wSDKClients struct { - FC2 *alifc2.Client - FC3 *alifc3.Client + FC2 *internal.FcopenClient + FC3 *internal.FcClient } func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { @@ -94,7 +97,7 @@ func (d *SSLDeployerProvider) deployToFC3(ctx context.Context, certPEM string, p // 获取自定义域名 // REF: https://help.aliyun.com/zh/functioncompute/fc-3-0/developer-reference/api-fc-2023-03-30-getcustomdomain - getCustomDomainResp, err := d.sdkClients.FC3.GetCustomDomain(tea.String(d.config.Domain)) + getCustomDomainResp, err := d.sdkClients.FC3.GetCustomDomainWithContext(context.TODO(), tea.String(d.config.Domain), make(map[string]*string), &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'fc.GetCustomDomain'", slog.Any("response", getCustomDomainResp)) if err != nil { return fmt.Errorf("failed to execute sdk request 'fc.GetCustomDomain': %w", err) @@ -116,7 +119,7 @@ func (d *SSLDeployerProvider) deployToFC3(ctx context.Context, certPEM string, p if tea.StringValue(updateCustomDomainReq.Body.Protocol) == "HTTP" { updateCustomDomainReq.Body.Protocol = tea.String("HTTP,HTTPS") } - updateCustomDomainResp, err := d.sdkClients.FC3.UpdateCustomDomain(tea.String(d.config.Domain), updateCustomDomainReq) + updateCustomDomainResp, err := d.sdkClients.FC3.UpdateCustomDomainWithContext(context.TODO(), tea.String(d.config.Domain), updateCustomDomainReq, make(map[string]*string), &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'fc.UpdateCustomDomain'", slog.Any("request", updateCustomDomainReq), slog.Any("response", updateCustomDomainResp)) if err != nil { return fmt.Errorf("failed to execute sdk request 'fc.UpdateCustomDomain': %w", err) @@ -178,7 +181,7 @@ func createSDKClients(accessKeyId, accessKeySecret, region string) (*wSDKClients AccessKeySecret: tea.String(accessKeySecret), Endpoint: tea.String(fc2Endpoint), } - fc2Client, err := alifc2.NewClient(fc2Config) + fc2Client, err := internal.NewFcopenClient(fc2Config) if err != nil { return nil, err } @@ -199,7 +202,7 @@ func createSDKClients(accessKeyId, accessKeySecret, region string) (*wSDKClients AccessKeySecret: tea.String(accessKeySecret), Endpoint: tea.String(fc3Endpoint), } - fc3Client, err := alifc3.NewClient(fc3Config) + fc3Client, err := internal.NewFcClient(fc3Config) if err != nil { return nil, err } diff --git a/pkg/core/ssl-deployer/providers/aliyun-fc/internal/client.go b/pkg/core/ssl-deployer/providers/aliyun-fc/internal/client.go new file mode 100644 index 000000000..3270dc2e5 --- /dev/null +++ b/pkg/core/ssl-deployer/providers/aliyun-fc/internal/client.go @@ -0,0 +1,253 @@ +package internal + +import ( + "context" + + openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" + openapiutilv2 "github.com/alibabacloud-go/darabonba-openapi/v2/utils" + alifc "github.com/alibabacloud-go/fc-20230330/v4/client" + alifcopen "github.com/alibabacloud-go/fc-open-20210406/v2/client" + openapiutil "github.com/alibabacloud-go/openapi-util/service" + util "github.com/alibabacloud-go/tea-utils/v2/service" + "github.com/alibabacloud-go/tea/dara" + "github.com/alibabacloud-go/tea/tea" +) + +// This is a partial copy of https://github.com/alibabacloud-go/fc-20230330/blob/master/client/client_context_func.go +// to lightweight the vendor packages in the built binary. +type FcClient struct { + openapi.Client + DisableSDKError *bool +} + +func NewFcClient(config *openapiutilv2.Config) (*FcClient, error) { + client := new(FcClient) + err := client.Init(config) + return client, err +} + +func (client *FcClient) Init(config *openapiutilv2.Config) (_err error) { + _err = client.Client.Init(config) + if _err != nil { + return _err + } + _err = client.CheckConfig(config) + if _err != nil { + return _err + } + + return nil +} + +func (client *FcClient) GetCustomDomainWithContext(ctx context.Context, domainName *string, headers map[string]*string, runtime *dara.RuntimeOptions) (_result *alifc.GetCustomDomainResponse, _err error) { + req := &openapiutilv2.OpenApiRequest{ + Headers: headers, + } + params := &openapiutilv2.Params{ + Action: dara.String("GetCustomDomain"), + Version: dara.String("2023-03-30"), + Protocol: dara.String("HTTPS"), + Pathname: dara.String("/2023-03-30/custom-domains/" + dara.PercentEncode(dara.StringValue(domainName))), + Method: dara.String("GET"), + AuthType: dara.String("AK"), + Style: dara.String("ROA"), + ReqBodyType: dara.String("json"), + BodyType: dara.String("json"), + } + _result = &alifc.GetCustomDomainResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} + +func (client *FcClient) UpdateCustomDomainWithContext(ctx context.Context, domainName *string, request *alifc.UpdateCustomDomainRequest, headers map[string]*string, runtime *dara.RuntimeOptions) (_result *alifc.UpdateCustomDomainResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + + req := &openapiutilv2.OpenApiRequest{ + Headers: headers, + Body: openapiutil.ParseToMap(request.Body), + } + params := &openapiutilv2.Params{ + Action: dara.String("UpdateCustomDomain"), + Version: dara.String("2023-03-30"), + Protocol: dara.String("HTTPS"), + Pathname: dara.String("/2023-03-30/custom-domains/" + dara.PercentEncode(dara.StringValue(domainName))), + Method: dara.String("PUT"), + AuthType: dara.String("AK"), + Style: dara.String("ROA"), + ReqBodyType: dara.String("json"), + BodyType: dara.String("json"), + } + _result = &alifc.UpdateCustomDomainResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} + +// This is a partial copy of https://github.com/alibabacloud-go/fc-open-20210406/blob/master/client/client.go +// to lightweight the vendor packages in the built binary. +type FcopenClient struct { + openapi.Client +} + +func NewFcopenClient(config *openapi.Config) (*FcopenClient, error) { + client := new(FcopenClient) + err := client.Init(config) + return client, err +} + +func (client *FcopenClient) Init(config *openapi.Config) (_err error) { + _err = client.Client.Init(config) + if _err != nil { + return _err + } + _err = client.CheckConfig(config) + if _err != nil { + return _err + } + + return nil +} + +func (client *FcopenClient) GetCustomDomain(domainName *string) (_result *alifcopen.GetCustomDomainResponse, _err error) { + runtime := &util.RuntimeOptions{} + headers := &alifcopen.GetCustomDomainHeaders{} + _result = &alifcopen.GetCustomDomainResponse{} + _body, _err := client.GetCustomDomainWithOptions(domainName, headers, runtime) + if _err != nil { + return _result, _err + } + _result = _body + return _result, _err +} + +func (client *FcopenClient) GetCustomDomainWithOptions(domainName *string, headers *alifcopen.GetCustomDomainHeaders, runtime *util.RuntimeOptions) (_result *alifcopen.GetCustomDomainResponse, _err error) { + realHeaders := make(map[string]*string) + + if !tea.BoolValue(util.IsUnset(headers.CommonHeaders)) { + realHeaders = headers.CommonHeaders + } + + if !tea.BoolValue(util.IsUnset(headers.XFcAccountId)) { + realHeaders["X-Fc-Account-Id"] = util.ToJSONString(headers.XFcAccountId) + } + + if !tea.BoolValue(util.IsUnset(headers.XFcDate)) { + realHeaders["X-Fc-Date"] = util.ToJSONString(headers.XFcDate) + } + + if !tea.BoolValue(util.IsUnset(headers.XFcTraceId)) { + realHeaders["X-Fc-Trace-Id"] = util.ToJSONString(headers.XFcTraceId) + } + + req := &openapi.OpenApiRequest{ + Headers: realHeaders, + } + params := &openapi.Params{ + Action: tea.String("GetCustomDomain"), + Version: tea.String("2021-04-06"), + Protocol: tea.String("HTTPS"), + Pathname: tea.String("/2021-04-06/custom-domains/" + tea.StringValue(openapiutil.GetEncodeParam(domainName))), + Method: tea.String("GET"), + AuthType: tea.String("AK"), + Style: tea.String("ROA"), + ReqBodyType: tea.String("json"), + BodyType: tea.String("json"), + } + _result = &alifcopen.GetCustomDomainResponse{} + _body, _err := client.CallApi(params, req, runtime) + if _err != nil { + return _result, _err + } + _err = tea.Convert(_body, &_result) + return _result, _err +} + +func (client *FcopenClient) UpdateCustomDomain(domainName *string, request *alifcopen.UpdateCustomDomainRequest) (_result *alifcopen.UpdateCustomDomainResponse, _err error) { + runtime := &util.RuntimeOptions{} + headers := &alifcopen.UpdateCustomDomainHeaders{} + _result = &alifcopen.UpdateCustomDomainResponse{} + _body, _err := client.UpdateCustomDomainWithOptions(domainName, request, headers, runtime) + if _err != nil { + return _result, _err + } + _result = _body + return _result, _err +} + +func (client *FcopenClient) UpdateCustomDomainWithOptions(domainName *string, request *alifcopen.UpdateCustomDomainRequest, headers *alifcopen.UpdateCustomDomainHeaders, runtime *util.RuntimeOptions) (_result *alifcopen.UpdateCustomDomainResponse, _err error) { + _err = util.ValidateModel(request) + if _err != nil { + return _result, _err + } + body := map[string]interface{}{} + + if !tea.BoolValue(util.IsUnset(request.CertConfig)) { + body["certConfig"] = request.CertConfig + } + + if !tea.BoolValue(util.IsUnset(request.Protocol)) { + body["protocol"] = request.Protocol + } + + if !tea.BoolValue(util.IsUnset(request.RouteConfig)) { + body["routeConfig"] = request.RouteConfig + } + + if !tea.BoolValue(util.IsUnset(request.TlsConfig)) { + body["tlsConfig"] = request.TlsConfig + } + + if !tea.BoolValue(util.IsUnset(request.WafConfig)) { + body["wafConfig"] = request.WafConfig + } + + realHeaders := make(map[string]*string) + if !tea.BoolValue(util.IsUnset(headers.CommonHeaders)) { + realHeaders = headers.CommonHeaders + } + + if !tea.BoolValue(util.IsUnset(headers.XFcAccountId)) { + realHeaders["X-Fc-Account-Id"] = util.ToJSONString(headers.XFcAccountId) + } + + if !tea.BoolValue(util.IsUnset(headers.XFcDate)) { + realHeaders["X-Fc-Date"] = util.ToJSONString(headers.XFcDate) + } + + if !tea.BoolValue(util.IsUnset(headers.XFcTraceId)) { + realHeaders["X-Fc-Trace-Id"] = util.ToJSONString(headers.XFcTraceId) + } + + req := &openapi.OpenApiRequest{ + Headers: realHeaders, + Body: openapiutil.ParseToMap(body), + } + params := &openapi.Params{ + Action: tea.String("UpdateCustomDomain"), + Version: tea.String("2021-04-06"), + Protocol: tea.String("HTTPS"), + Pathname: tea.String("/2021-04-06/custom-domains/" + tea.StringValue(openapiutil.GetEncodeParam(domainName))), + Method: tea.String("PUT"), + AuthType: tea.String("AK"), + Style: tea.String("ROA"), + ReqBodyType: tea.String("json"), + BodyType: tea.String("json"), + } + _result = &alifcopen.UpdateCustomDomainResponse{} + _body, _err := client.CallApi(params, req, runtime) + if _err != nil { + return _result, _err + } + _err = tea.Convert(_body, &_result) + return _result, _err +} diff --git a/pkg/core/ssl-deployer/providers/aliyun-ga/aliyun_ga.go b/pkg/core/ssl-deployer/providers/aliyun-ga/aliyun_ga.go index 9ffa312fd..8f0f5bd19 100644 --- a/pkg/core/ssl-deployer/providers/aliyun-ga/aliyun_ga.go +++ b/pkg/core/ssl-deployer/providers/aliyun-ga/aliyun_ga.go @@ -13,6 +13,7 @@ import ( "github.com/samber/lo" "github.com/certimate-go/certimate/pkg/core" + "github.com/certimate-go/certimate/pkg/core/ssl-deployer/providers/aliyun-ga/internal" sslmgrsp "github.com/certimate-go/certimate/pkg/core/ssl-manager/providers/aliyun-cas" ) @@ -38,7 +39,7 @@ type SSLDeployerProviderConfig struct { type SSLDeployerProvider struct { config *SSLDeployerProviderConfig logger *slog.Logger - sdkClient *aliga.Client + sdkClient *internal.GaClient sslManager core.SSLManager } @@ -303,7 +304,7 @@ func (d *SSLDeployerProvider) updateListenerCertificate(ctx context.Context, clo return nil } -func createSDKClient(accessKeyId, accessKeySecret string) (*aliga.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret string) (*internal.GaClient, error) { // 接入点一览 https://api.aliyun.com/product/Ga config := &aliopen.Config{ AccessKeyId: tea.String(accessKeyId), @@ -311,7 +312,7 @@ func createSDKClient(accessKeyId, accessKeySecret string) (*aliga.Client, error) Endpoint: tea.String("ga.cn-hangzhou.aliyuncs.com"), } - client, err := aliga.NewClient(config) + client, err := internal.NewGaClient(config) if err != nil { return nil, err } diff --git a/pkg/core/ssl-deployer/providers/aliyun-ga/internal/client.go b/pkg/core/ssl-deployer/providers/aliyun-ga/internal/client.go new file mode 100644 index 000000000..c60cdf7d4 --- /dev/null +++ b/pkg/core/ssl-deployer/providers/aliyun-ga/internal/client.go @@ -0,0 +1,391 @@ +package internal + +import ( + openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" + aliga "github.com/alibabacloud-go/ga-20191120/v3/client" + openapiutil "github.com/alibabacloud-go/openapi-util/service" + util "github.com/alibabacloud-go/tea-utils/v2/service" + "github.com/alibabacloud-go/tea/tea" +) + +// This is a partial copy of https://github.com/alibabacloud-go/ga-20191120/blob/master/client/client.go +// to lightweight the vendor packages in the built binary. +type GaClient struct { + openapi.Client +} + +func NewGaClient(config *openapi.Config) (*GaClient, error) { + client := new(GaClient) + err := client.Init(config) + return client, err +} + +func (client *GaClient) Init(config *openapi.Config) (_err error) { + _err = client.Client.Init(config) + if _err != nil { + return _err + } + _err = client.CheckConfig(config) + if _err != nil { + return _err + } + + return nil +} + +func (client *GaClient) AssociateAdditionalCertificatesWithListenerWithOptions(request *aliga.AssociateAdditionalCertificatesWithListenerRequest, runtime *util.RuntimeOptions) (_result *aliga.AssociateAdditionalCertificatesWithListenerResponse, _err error) { + _err = util.ValidateModel(request) + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !tea.BoolValue(util.IsUnset(request.AcceleratorId)) { + query["AcceleratorId"] = request.AcceleratorId + } + + if !tea.BoolValue(util.IsUnset(request.Certificates)) { + query["Certificates"] = request.Certificates + } + + if !tea.BoolValue(util.IsUnset(request.ClientToken)) { + query["ClientToken"] = request.ClientToken + } + + if !tea.BoolValue(util.IsUnset(request.ListenerId)) { + query["ListenerId"] = request.ListenerId + } + + if !tea.BoolValue(util.IsUnset(request.RegionId)) { + query["RegionId"] = request.RegionId + } + + req := &openapi.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapi.Params{ + Action: tea.String("AssociateAdditionalCertificatesWithListener"), + Version: tea.String("2019-11-20"), + Protocol: tea.String("HTTPS"), + Pathname: tea.String("/"), + Method: tea.String("POST"), + AuthType: tea.String("AK"), + Style: tea.String("RPC"), + ReqBodyType: tea.String("formData"), + BodyType: tea.String("json"), + } + _result = &aliga.AssociateAdditionalCertificatesWithListenerResponse{} + _body, _err := client.CallApi(params, req, runtime) + if _err != nil { + return _result, _err + } + _err = tea.Convert(_body, &_result) + return _result, _err +} + +func (client *GaClient) AssociateAdditionalCertificatesWithListener(request *aliga.AssociateAdditionalCertificatesWithListenerRequest) (_result *aliga.AssociateAdditionalCertificatesWithListenerResponse, _err error) { + runtime := &util.RuntimeOptions{} + _result = &aliga.AssociateAdditionalCertificatesWithListenerResponse{} + _body, _err := client.AssociateAdditionalCertificatesWithListenerWithOptions(request, runtime) + if _err != nil { + return _result, _err + } + _result = _body + return _result, _err +} + +func (client *GaClient) ListListenersWithOptions(request *aliga.ListListenersRequest, runtime *util.RuntimeOptions) (_result *aliga.ListListenersResponse, _err error) { + _err = util.ValidateModel(request) + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !tea.BoolValue(util.IsUnset(request.AcceleratorId)) { + query["AcceleratorId"] = request.AcceleratorId + } + + if !tea.BoolValue(util.IsUnset(request.PageNumber)) { + query["PageNumber"] = request.PageNumber + } + + if !tea.BoolValue(util.IsUnset(request.PageSize)) { + query["PageSize"] = request.PageSize + } + + if !tea.BoolValue(util.IsUnset(request.RegionId)) { + query["RegionId"] = request.RegionId + } + + req := &openapi.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapi.Params{ + Action: tea.String("ListListeners"), + Version: tea.String("2019-11-20"), + Protocol: tea.String("HTTPS"), + Pathname: tea.String("/"), + Method: tea.String("POST"), + AuthType: tea.String("AK"), + Style: tea.String("RPC"), + ReqBodyType: tea.String("formData"), + BodyType: tea.String("json"), + } + _result = &aliga.ListListenersResponse{} + _body, _err := client.CallApi(params, req, runtime) + if _err != nil { + return _result, _err + } + _err = tea.Convert(_body, &_result) + return _result, _err +} + +func (client *GaClient) ListListeners(request *aliga.ListListenersRequest) (_result *aliga.ListListenersResponse, _err error) { + runtime := &util.RuntimeOptions{} + _result = &aliga.ListListenersResponse{} + _body, _err := client.ListListenersWithOptions(request, runtime) + if _err != nil { + return _result, _err + } + _result = _body + return _result, _err +} + +func (client *GaClient) ListListenerCertificatesWithOptions(request *aliga.ListListenerCertificatesRequest, runtime *util.RuntimeOptions) (_result *aliga.ListListenerCertificatesResponse, _err error) { + _err = util.ValidateModel(request) + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !tea.BoolValue(util.IsUnset(request.AcceleratorId)) { + query["AcceleratorId"] = request.AcceleratorId + } + + if !tea.BoolValue(util.IsUnset(request.ListenerId)) { + query["ListenerId"] = request.ListenerId + } + + if !tea.BoolValue(util.IsUnset(request.MaxResults)) { + query["MaxResults"] = request.MaxResults + } + + if !tea.BoolValue(util.IsUnset(request.NextToken)) { + query["NextToken"] = request.NextToken + } + + if !tea.BoolValue(util.IsUnset(request.RegionId)) { + query["RegionId"] = request.RegionId + } + + if !tea.BoolValue(util.IsUnset(request.Role)) { + query["Role"] = request.Role + } + + req := &openapi.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapi.Params{ + Action: tea.String("ListListenerCertificates"), + Version: tea.String("2019-11-20"), + Protocol: tea.String("HTTPS"), + Pathname: tea.String("/"), + Method: tea.String("POST"), + AuthType: tea.String("AK"), + Style: tea.String("RPC"), + ReqBodyType: tea.String("formData"), + BodyType: tea.String("json"), + } + _result = &aliga.ListListenerCertificatesResponse{} + _body, _err := client.CallApi(params, req, runtime) + if _err != nil { + return _result, _err + } + _err = tea.Convert(_body, &_result) + return _result, _err +} + +func (client *GaClient) ListListenerCertificates(request *aliga.ListListenerCertificatesRequest) (_result *aliga.ListListenerCertificatesResponse, _err error) { + runtime := &util.RuntimeOptions{} + _result = &aliga.ListListenerCertificatesResponse{} + _body, _err := client.ListListenerCertificatesWithOptions(request, runtime) + if _err != nil { + return _result, _err + } + _result = _body + return _result, _err +} + +func (client *GaClient) UpdateAdditionalCertificateWithListenerWithOptions(request *aliga.UpdateAdditionalCertificateWithListenerRequest, runtime *util.RuntimeOptions) (_result *aliga.UpdateAdditionalCertificateWithListenerResponse, _err error) { + _err = util.ValidateModel(request) + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !tea.BoolValue(util.IsUnset(request.AcceleratorId)) { + query["AcceleratorId"] = request.AcceleratorId + } + + if !tea.BoolValue(util.IsUnset(request.CertificateId)) { + query["CertificateId"] = request.CertificateId + } + + if !tea.BoolValue(util.IsUnset(request.ClientToken)) { + query["ClientToken"] = request.ClientToken + } + + if !tea.BoolValue(util.IsUnset(request.Domain)) { + query["Domain"] = request.Domain + } + + if !tea.BoolValue(util.IsUnset(request.DryRun)) { + query["DryRun"] = request.DryRun + } + + if !tea.BoolValue(util.IsUnset(request.ListenerId)) { + query["ListenerId"] = request.ListenerId + } + + if !tea.BoolValue(util.IsUnset(request.RegionId)) { + query["RegionId"] = request.RegionId + } + + req := &openapi.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapi.Params{ + Action: tea.String("UpdateAdditionalCertificateWithListener"), + Version: tea.String("2019-11-20"), + Protocol: tea.String("HTTPS"), + Pathname: tea.String("/"), + Method: tea.String("POST"), + AuthType: tea.String("AK"), + Style: tea.String("RPC"), + ReqBodyType: tea.String("formData"), + BodyType: tea.String("json"), + } + _result = &aliga.UpdateAdditionalCertificateWithListenerResponse{} + _body, _err := client.CallApi(params, req, runtime) + if _err != nil { + return _result, _err + } + _err = tea.Convert(_body, &_result) + return _result, _err +} + +func (client *GaClient) UpdateAdditionalCertificateWithListener(request *aliga.UpdateAdditionalCertificateWithListenerRequest) (_result *aliga.UpdateAdditionalCertificateWithListenerResponse, _err error) { + runtime := &util.RuntimeOptions{} + _result = &aliga.UpdateAdditionalCertificateWithListenerResponse{} + _body, _err := client.UpdateAdditionalCertificateWithListenerWithOptions(request, runtime) + if _err != nil { + return _result, _err + } + _result = _body + return _result, _err +} + +func (client *GaClient) UpdateListenerWithOptions(request *aliga.UpdateListenerRequest, runtime *util.RuntimeOptions) (_result *aliga.UpdateListenerResponse, _err error) { + _err = util.ValidateModel(request) + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !tea.BoolValue(util.IsUnset(request.BackendPorts)) { + query["BackendPorts"] = request.BackendPorts + } + + if !tea.BoolValue(util.IsUnset(request.Certificates)) { + query["Certificates"] = request.Certificates + } + + if !tea.BoolValue(util.IsUnset(request.ClientAffinity)) { + query["ClientAffinity"] = request.ClientAffinity + } + + if !tea.BoolValue(util.IsUnset(request.ClientToken)) { + query["ClientToken"] = request.ClientToken + } + + if !tea.BoolValue(util.IsUnset(request.Description)) { + query["Description"] = request.Description + } + + if !tea.BoolValue(util.IsUnset(request.HttpVersion)) { + query["HttpVersion"] = request.HttpVersion + } + + if !tea.BoolValue(util.IsUnset(request.IdleTimeout)) { + query["IdleTimeout"] = request.IdleTimeout + } + + if !tea.BoolValue(util.IsUnset(request.ListenerId)) { + query["ListenerId"] = request.ListenerId + } + + if !tea.BoolValue(util.IsUnset(request.Name)) { + query["Name"] = request.Name + } + + if !tea.BoolValue(util.IsUnset(request.PortRanges)) { + query["PortRanges"] = request.PortRanges + } + + if !tea.BoolValue(util.IsUnset(request.Protocol)) { + query["Protocol"] = request.Protocol + } + + if !tea.BoolValue(util.IsUnset(request.ProxyProtocol)) { + query["ProxyProtocol"] = request.ProxyProtocol + } + + if !tea.BoolValue(util.IsUnset(request.RegionId)) { + query["RegionId"] = request.RegionId + } + + if !tea.BoolValue(util.IsUnset(request.RequestTimeout)) { + query["RequestTimeout"] = request.RequestTimeout + } + + if !tea.BoolValue(util.IsUnset(request.SecurityPolicyId)) { + query["SecurityPolicyId"] = request.SecurityPolicyId + } + + if !tea.BoolValue(util.IsUnset(request.XForwardedForConfig)) { + query["XForwardedForConfig"] = request.XForwardedForConfig + } + + req := &openapi.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapi.Params{ + Action: tea.String("UpdateListener"), + Version: tea.String("2019-11-20"), + Protocol: tea.String("HTTPS"), + Pathname: tea.String("/"), + Method: tea.String("POST"), + AuthType: tea.String("AK"), + Style: tea.String("RPC"), + ReqBodyType: tea.String("formData"), + BodyType: tea.String("json"), + } + _result = &aliga.UpdateListenerResponse{} + _body, _err := client.CallApi(params, req, runtime) + if _err != nil { + return _result, _err + } + _err = tea.Convert(_body, &_result) + return _result, _err +} + +func (client *GaClient) UpdateListener(request *aliga.UpdateListenerRequest) (_result *aliga.UpdateListenerResponse, _err error) { + runtime := &util.RuntimeOptions{} + _result = &aliga.UpdateListenerResponse{} + _body, _err := client.UpdateListenerWithOptions(request, runtime) + if _err != nil { + return _result, _err + } + _result = _body + return _result, _err +} diff --git a/pkg/core/ssl-deployer/providers/aliyun-live/aliyun_live.go b/pkg/core/ssl-deployer/providers/aliyun-live/aliyun_live.go index 39338f646..27357ee64 100644 --- a/pkg/core/ssl-deployer/providers/aliyun-live/aliyun_live.go +++ b/pkg/core/ssl-deployer/providers/aliyun-live/aliyun_live.go @@ -10,8 +10,11 @@ import ( aliopen "github.com/alibabacloud-go/darabonba-openapi/v2/client" alilive "github.com/alibabacloud-go/live-20161101/v2/client" + "github.com/alibabacloud-go/tea/dara" "github.com/alibabacloud-go/tea/tea" + "github.com/certimate-go/certimate/pkg/core" + "github.com/certimate-go/certimate/pkg/core/ssl-deployer/providers/aliyun-live/internal" ) type SSLDeployerProviderConfig struct { @@ -30,7 +33,7 @@ type SSLDeployerProviderConfig struct { type SSLDeployerProvider struct { config *SSLDeployerProviderConfig logger *slog.Logger - sdkClient *alilive.Client + sdkClient *internal.LiveClient } var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) @@ -78,7 +81,7 @@ func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privke SSLPub: tea.String(certPEM), SSLPri: tea.String(privkeyPEM), } - setLiveDomainSSLCertificateResp, err := d.sdkClient.SetLiveDomainCertificate(setLiveDomainSSLCertificateReq) + setLiveDomainSSLCertificateResp, err := d.sdkClient.SetLiveDomainCertificateWithContext(context.TODO(), setLiveDomainSSLCertificateReq, &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'live.SetLiveDomainCertificate'", slog.Any("request", setLiveDomainSSLCertificateReq), slog.Any("response", setLiveDomainSSLCertificateResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'live.SetLiveDomainCertificate': %w", err) @@ -87,7 +90,7 @@ func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privke return &core.SSLDeployResult{}, nil } -func createSDKClient(accessKeyId, accessKeySecret, region string) (*alilive.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (*internal.LiveClient, error) { // 接入点一览 https://api.aliyun.com/product/live var endpoint string switch region { @@ -110,7 +113,7 @@ func createSDKClient(accessKeyId, accessKeySecret, region string) (*alilive.Clie Endpoint: tea.String(endpoint), } - client, err := alilive.NewClient(config) + client, err := internal.NewLiveClient(config) if err != nil { return nil, err } diff --git a/pkg/core/ssl-deployer/providers/aliyun-live/internal/client.go b/pkg/core/ssl-deployer/providers/aliyun-live/internal/client.go new file mode 100644 index 000000000..2f3d39c5b --- /dev/null +++ b/pkg/core/ssl-deployer/providers/aliyun-live/internal/client.go @@ -0,0 +1,102 @@ +package internal + +import ( + "context" + + openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" + openapiutil "github.com/alibabacloud-go/darabonba-openapi/v2/utils" + alilive "github.com/alibabacloud-go/live-20161101/v2/client" + "github.com/alibabacloud-go/tea/dara" +) + +// This is a partial copy of https://github.com/alibabacloud-go/live-20161101/blob/master/client/client_context_func.go +// to lightweight the vendor packages in the built binary. +type LiveClient struct { + openapi.Client + DisableSDKError *bool +} + +func NewLiveClient(config *openapiutil.Config) (*LiveClient, error) { + client := new(LiveClient) + err := client.Init(config) + return client, err +} + +func (client *LiveClient) Init(config *openapiutil.Config) (_err error) { + _err = client.Client.Init(config) + if _err != nil { + return _err + } + _err = client.CheckConfig(config) + if _err != nil { + return _err + } + + return nil +} + +func (client *LiveClient) SetLiveDomainCertificateWithContext(ctx context.Context, request *alilive.SetLiveDomainCertificateRequest, runtime *dara.RuntimeOptions) (_result *alilive.SetLiveDomainCertificateResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !dara.IsNil(request.CertName) { + query["CertName"] = request.CertName + } + + if !dara.IsNil(request.CertType) { + query["CertType"] = request.CertType + } + + if !dara.IsNil(request.DomainName) { + query["DomainName"] = request.DomainName + } + + if !dara.IsNil(request.ForceSet) { + query["ForceSet"] = request.ForceSet + } + + if !dara.IsNil(request.OwnerId) { + query["OwnerId"] = request.OwnerId + } + + if !dara.IsNil(request.SSLPri) { + query["SSLPri"] = request.SSLPri + } + + if !dara.IsNil(request.SSLProtocol) { + query["SSLProtocol"] = request.SSLProtocol + } + + if !dara.IsNil(request.SSLPub) { + query["SSLPub"] = request.SSLPub + } + + if !dara.IsNil(request.SecurityToken) { + query["SecurityToken"] = request.SecurityToken + } + + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("SetLiveDomainCertificate"), + Version: dara.String("2016-11-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 = &alilive.SetLiveDomainCertificateResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} diff --git a/pkg/core/ssl-deployer/providers/aliyun-nlb/aliyun_nlb.go b/pkg/core/ssl-deployer/providers/aliyun-nlb/aliyun_nlb.go index aeccdd8e5..f51f7b8ee 100644 --- a/pkg/core/ssl-deployer/providers/aliyun-nlb/aliyun_nlb.go +++ b/pkg/core/ssl-deployer/providers/aliyun-nlb/aliyun_nlb.go @@ -9,10 +9,12 @@ import ( aliopen "github.com/alibabacloud-go/darabonba-openapi/v2/client" alinlb "github.com/alibabacloud-go/nlb-20220430/v4/client" + "github.com/alibabacloud-go/tea/dara" "github.com/alibabacloud-go/tea/tea" "github.com/samber/lo" "github.com/certimate-go/certimate/pkg/core" + "github.com/certimate-go/certimate/pkg/core/ssl-deployer/providers/aliyun-nlb/internal" sslmgrsp "github.com/certimate-go/certimate/pkg/core/ssl-manager/providers/aliyun-cas" ) @@ -38,7 +40,7 @@ type SSLDeployerProviderConfig struct { type SSLDeployerProvider struct { config *SSLDeployerProviderConfig logger *slog.Logger - sdkClient *alinlb.Client + sdkClient *internal.NlbClient sslManager core.SSLManager } @@ -122,7 +124,7 @@ func (d *SSLDeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCer getLoadBalancerAttributeReq := &alinlb.GetLoadBalancerAttributeRequest{ LoadBalancerId: tea.String(d.config.LoadbalancerId), } - getLoadBalancerAttributeResp, err := d.sdkClient.GetLoadBalancerAttribute(getLoadBalancerAttributeReq) + getLoadBalancerAttributeResp, err := d.sdkClient.GetLoadBalancerAttributeWithContext(context.TODO(), getLoadBalancerAttributeReq, &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'nlb.GetLoadBalancerAttribute'", slog.Any("request", getLoadBalancerAttributeReq), slog.Any("response", getLoadBalancerAttributeResp)) if err != nil { return fmt.Errorf("failed to execute sdk request 'nlb.GetLoadBalancerAttribute': %w", err) @@ -146,7 +148,7 @@ func (d *SSLDeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCer LoadBalancerIds: []*string{tea.String(d.config.LoadbalancerId)}, ListenerProtocol: tea.String("TCPSSL"), } - listListenersResp, err := d.sdkClient.ListListeners(listListenersReq) + listListenersResp, err := d.sdkClient.ListListenersWithContext(context.TODO(), listListenersReq, &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'nlb.ListListeners'", slog.Any("request", listListenersReq), slog.Any("response", listListenersResp)) if err != nil { return fmt.Errorf("failed to execute sdk request 'nlb.ListListeners': %w", err) @@ -210,7 +212,7 @@ func (d *SSLDeployerProvider) updateListenerCertificate(ctx context.Context, clo getListenerAttributeReq := &alinlb.GetListenerAttributeRequest{ ListenerId: tea.String(cloudListenerId), } - getListenerAttributeResp, err := d.sdkClient.GetListenerAttribute(getListenerAttributeReq) + getListenerAttributeResp, err := d.sdkClient.GetListenerAttributeWithContext(context.TODO(), getListenerAttributeReq, &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'nlb.GetListenerAttribute'", slog.Any("request", getListenerAttributeReq), slog.Any("response", getListenerAttributeResp)) if err != nil { return fmt.Errorf("failed to execute sdk request 'nlb.GetListenerAttribute': %w", err) @@ -222,7 +224,7 @@ func (d *SSLDeployerProvider) updateListenerCertificate(ctx context.Context, clo ListenerId: tea.String(cloudListenerId), CertificateIds: []*string{tea.String(cloudCertId)}, } - updateListenerAttributeResp, err := d.sdkClient.UpdateListenerAttribute(updateListenerAttributeReq) + updateListenerAttributeResp, err := d.sdkClient.UpdateListenerAttributeWithContext(context.TODO(), updateListenerAttributeReq, &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'nlb.UpdateListenerAttribute'", slog.Any("request", updateListenerAttributeReq), slog.Any("response", updateListenerAttributeResp)) if err != nil { return fmt.Errorf("failed to execute sdk request 'nlb.UpdateListenerAttribute': %w", err) @@ -231,7 +233,7 @@ func (d *SSLDeployerProvider) updateListenerCertificate(ctx context.Context, clo return nil } -func createSDKClient(accessKeyId, accessKeySecret, region string) (*alinlb.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (*internal.NlbClient, error) { // 接入点一览 https://api.aliyun.com/product/Nlb var endpoint string switch region { @@ -247,7 +249,7 @@ func createSDKClient(accessKeyId, accessKeySecret, region string) (*alinlb.Clien Endpoint: tea.String(endpoint), } - client, err := alinlb.NewClient(config) + client, err := internal.NewNlbClient(config) if err != nil { return nil, err } diff --git a/pkg/core/ssl-deployer/providers/aliyun-nlb/internal/client.go b/pkg/core/ssl-deployer/providers/aliyun-nlb/internal/client.go new file mode 100644 index 000000000..02f228b10 --- /dev/null +++ b/pkg/core/ssl-deployer/providers/aliyun-nlb/internal/client.go @@ -0,0 +1,298 @@ +package internal + +import ( + "context" + + openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" + openapiutil "github.com/alibabacloud-go/darabonba-openapi/v2/utils" + alinlb "github.com/alibabacloud-go/nlb-20220430/v4/client" + "github.com/alibabacloud-go/tea/dara" +) + +// This is a partial copy of https://github.com/alibabacloud-go/nlb-20220430/blob/master/client/client_context_func.go +// to lightweight the vendor packages in the built binary. +type NlbClient struct { + openapi.Client + DisableSDKError *bool +} + +func NewNlbClient(config *openapiutil.Config) (*NlbClient, error) { + client := new(NlbClient) + err := client.Init(config) + return client, err +} + +func (client *NlbClient) Init(config *openapiutil.Config) (_err error) { + _err = client.Client.Init(config) + if _err != nil { + return _err + } + _err = client.CheckConfig(config) + if _err != nil { + return _err + } + + return nil +} + +func (client *NlbClient) GetListenerAttributeWithContext(ctx context.Context, request *alinlb.GetListenerAttributeRequest, runtime *dara.RuntimeOptions) (_result *alinlb.GetListenerAttributeResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !dara.IsNil(request.ClientToken) { + query["ClientToken"] = request.ClientToken + } + + if !dara.IsNil(request.DryRun) { + query["DryRun"] = request.DryRun + } + + if !dara.IsNil(request.ListenerId) { + query["ListenerId"] = request.ListenerId + } + + if !dara.IsNil(request.RegionId) { + query["RegionId"] = request.RegionId + } + + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("GetListenerAttribute"), + Version: dara.String("2022-04-30"), + 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 = &alinlb.GetListenerAttributeResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} + +func (client *NlbClient) GetLoadBalancerAttributeWithContext(ctx context.Context, request *alinlb.GetLoadBalancerAttributeRequest, runtime *dara.RuntimeOptions) (_result *alinlb.GetLoadBalancerAttributeResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !dara.IsNil(request.ClientToken) { + query["ClientToken"] = request.ClientToken + } + + if !dara.IsNil(request.DryRun) { + query["DryRun"] = request.DryRun + } + + if !dara.IsNil(request.LoadBalancerId) { + query["LoadBalancerId"] = request.LoadBalancerId + } + + if !dara.IsNil(request.RegionId) { + query["RegionId"] = request.RegionId + } + + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("GetLoadBalancerAttribute"), + Version: dara.String("2022-04-30"), + 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 = &alinlb.GetLoadBalancerAttributeResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} + +func (client *NlbClient) ListListenersWithContext(ctx context.Context, request *alinlb.ListListenersRequest, runtime *dara.RuntimeOptions) (_result *alinlb.ListListenersResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !dara.IsNil(request.ListenerIds) { + query["ListenerIds"] = request.ListenerIds + } + + if !dara.IsNil(request.ListenerProtocol) { + query["ListenerProtocol"] = request.ListenerProtocol + } + + if !dara.IsNil(request.LoadBalancerIds) { + query["LoadBalancerIds"] = request.LoadBalancerIds + } + + if !dara.IsNil(request.MaxResults) { + query["MaxResults"] = request.MaxResults + } + + if !dara.IsNil(request.NextToken) { + query["NextToken"] = request.NextToken + } + + if !dara.IsNil(request.RegionId) { + query["RegionId"] = request.RegionId + } + + if !dara.IsNil(request.SecSensorEnabled) { + query["SecSensorEnabled"] = request.SecSensorEnabled + } + + if !dara.IsNil(request.Tag) { + query["Tag"] = request.Tag + } + + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("ListListeners"), + Version: dara.String("2022-04-30"), + 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 = &alinlb.ListListenersResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} + +func (client *NlbClient) UpdateListenerAttributeWithContext(ctx context.Context, tmpReq *alinlb.UpdateListenerAttributeRequest, runtime *dara.RuntimeOptions) (_result *alinlb.UpdateListenerAttributeResponse, _err error) { + _err = tmpReq.Validate() + if _err != nil { + return _result, _err + } + + request := &alinlb.UpdateListenerAttributeShrinkRequest{} + openapiutil.Convert(tmpReq, request) + if !dara.IsNil(tmpReq.ProxyProtocolV2Config) { + request.ProxyProtocolV2ConfigShrink = openapiutil.ArrayToStringWithSpecifiedStyle(tmpReq.ProxyProtocolV2Config, dara.String("ProxyProtocolV2Config"), dara.String("json")) + } + + body := map[string]interface{}{} + if !dara.IsNil(request.AlpnEnabled) { + body["AlpnEnabled"] = request.AlpnEnabled + } + + if !dara.IsNil(request.AlpnPolicy) { + body["AlpnPolicy"] = request.AlpnPolicy + } + + if !dara.IsNil(request.CaCertificateIds) { + body["CaCertificateIds"] = request.CaCertificateIds + } + + if !dara.IsNil(request.CaEnabled) { + body["CaEnabled"] = request.CaEnabled + } + + if !dara.IsNil(request.CertificateIds) { + body["CertificateIds"] = request.CertificateIds + } + + if !dara.IsNil(request.ClientToken) { + body["ClientToken"] = request.ClientToken + } + + if !dara.IsNil(request.Cps) { + body["Cps"] = request.Cps + } + + if !dara.IsNil(request.DryRun) { + body["DryRun"] = request.DryRun + } + + if !dara.IsNil(request.IdleTimeout) { + body["IdleTimeout"] = request.IdleTimeout + } + + if !dara.IsNil(request.ListenerDescription) { + body["ListenerDescription"] = request.ListenerDescription + } + + if !dara.IsNil(request.ListenerId) { + body["ListenerId"] = request.ListenerId + } + + if !dara.IsNil(request.Mss) { + body["Mss"] = request.Mss + } + + if !dara.IsNil(request.ProxyProtocolEnabled) { + body["ProxyProtocolEnabled"] = request.ProxyProtocolEnabled + } + + if !dara.IsNil(request.ProxyProtocolV2ConfigShrink) { + body["ProxyProtocolV2Config"] = request.ProxyProtocolV2ConfigShrink + } + + if !dara.IsNil(request.RegionId) { + body["RegionId"] = request.RegionId + } + + if !dara.IsNil(request.SecSensorEnabled) { + body["SecSensorEnabled"] = request.SecSensorEnabled + } + + if !dara.IsNil(request.SecurityPolicyId) { + body["SecurityPolicyId"] = request.SecurityPolicyId + } + + if !dara.IsNil(request.ServerGroupId) { + body["ServerGroupId"] = request.ServerGroupId + } + + req := &openapiutil.OpenApiRequest{ + Body: openapiutil.ParseToMap(body), + } + params := &openapiutil.Params{ + Action: dara.String("UpdateListenerAttribute"), + Version: dara.String("2022-04-30"), + 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 = &alinlb.UpdateListenerAttributeResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} diff --git a/pkg/core/ssl-deployer/providers/aliyun-vod/aliyun_vod.go b/pkg/core/ssl-deployer/providers/aliyun-vod/aliyun_vod.go index 84798322a..ec5c3a595 100644 --- a/pkg/core/ssl-deployer/providers/aliyun-vod/aliyun_vod.go +++ b/pkg/core/ssl-deployer/providers/aliyun-vod/aliyun_vod.go @@ -9,11 +9,13 @@ import ( "strings" aliopen "github.com/alibabacloud-go/darabonba-openapi/v2/client" + "github.com/alibabacloud-go/tea/dara" "github.com/alibabacloud-go/tea/tea" alivod "github.com/alibabacloud-go/vod-20170321/v4/client" "github.com/samber/lo" "github.com/certimate-go/certimate/pkg/core" + "github.com/certimate-go/certimate/pkg/core/ssl-deployer/providers/aliyun-vod/internal" sslmgrsp "github.com/certimate-go/certimate/pkg/core/ssl-manager/providers/aliyun-cas" ) @@ -33,7 +35,7 @@ type SSLDeployerProviderConfig struct { type SSLDeployerProvider struct { config *SSLDeployerProviderConfig logger *slog.Logger - sdkClient *alivod.Client + sdkClient *internal.VodClient sslManager core.SSLManager } @@ -103,7 +105,7 @@ func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privke Else(tea.String("ap-southeast-1")), SSLProtocol: tea.String("on"), } - setVodDomainSSLCertificateResp, err := d.sdkClient.SetVodDomainSSLCertificate(setVodDomainSSLCertificateReq) + setVodDomainSSLCertificateResp, err := d.sdkClient.SetVodDomainSSLCertificateWithContext(context.TODO(), setVodDomainSSLCertificateReq, &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'live.SetVodDomainSSLCertificate'", slog.Any("request", setVodDomainSSLCertificateReq), slog.Any("response", setVodDomainSSLCertificateResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'live.SetVodDomainSSLCertificate': %w", err) @@ -112,7 +114,7 @@ func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privke return &core.SSLDeployResult{}, nil } -func createSDKClient(accessKeyId, accessKeySecret, region string) (*alivod.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (*internal.VodClient, error) { // 接入点一览 https://api.aliyun.com/product/vod var endpoint string switch region { @@ -128,7 +130,7 @@ func createSDKClient(accessKeyId, accessKeySecret, region string) (*alivod.Clien Endpoint: tea.String(endpoint), } - client, err := alivod.NewClient(config) + client, err := internal.NewVodClient(config) if err != nil { return nil, err } diff --git a/pkg/core/ssl-deployer/providers/aliyun-vod/internal/client.go b/pkg/core/ssl-deployer/providers/aliyun-vod/internal/client.go new file mode 100644 index 000000000..a5acc0412 --- /dev/null +++ b/pkg/core/ssl-deployer/providers/aliyun-vod/internal/client.go @@ -0,0 +1,110 @@ +package internal + +import ( + "context" + + openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" + openapiutil "github.com/alibabacloud-go/darabonba-openapi/v2/utils" + "github.com/alibabacloud-go/tea/dara" + alivod "github.com/alibabacloud-go/vod-20170321/v4/client" +) + +// This is a partial copy of https://github.com/alibabacloud-go/vod-20170321/blob/master/client/client_context_func.go +// to lightweight the vendor packages in the built binary. +type VodClient struct { + openapi.Client + DisableSDKError *bool +} + +func NewVodClient(config *openapiutil.Config) (*VodClient, error) { + client := new(VodClient) + err := client.Init(config) + return client, err +} + +func (client *VodClient) Init(config *openapiutil.Config) (_err error) { + _err = client.Client.Init(config) + if _err != nil { + return _err + } + _err = client.CheckConfig(config) + if _err != nil { + return _err + } + + return nil +} + +func (client *VodClient) SetVodDomainSSLCertificateWithContext(ctx context.Context, request *alivod.SetVodDomainSSLCertificateRequest, runtime *dara.RuntimeOptions) (_result *alivod.SetVodDomainSSLCertificateResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !dara.IsNil(request.CertId) { + query["CertId"] = request.CertId + } + + if !dara.IsNil(request.CertName) { + query["CertName"] = request.CertName + } + + if !dara.IsNil(request.CertRegion) { + query["CertRegion"] = request.CertRegion + } + + if !dara.IsNil(request.CertType) { + query["CertType"] = request.CertType + } + + if !dara.IsNil(request.DomainName) { + query["DomainName"] = request.DomainName + } + + if !dara.IsNil(request.Env) { + query["Env"] = request.Env + } + + if !dara.IsNil(request.OwnerId) { + query["OwnerId"] = request.OwnerId + } + + if !dara.IsNil(request.SSLPri) { + query["SSLPri"] = request.SSLPri + } + + if !dara.IsNil(request.SSLProtocol) { + query["SSLProtocol"] = request.SSLProtocol + } + + if !dara.IsNil(request.SSLPub) { + query["SSLPub"] = request.SSLPub + } + + if !dara.IsNil(request.SecurityToken) { + query["SecurityToken"] = request.SecurityToken + } + + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("SetVodDomainSSLCertificate"), + Version: dara.String("2017-03-21"), + 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 = &alivod.SetVodDomainSSLCertificateResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} diff --git a/pkg/core/ssl-deployer/providers/aliyun-waf/aliyun_waf.go b/pkg/core/ssl-deployer/providers/aliyun-waf/aliyun_waf.go index df9d6bac0..3d88c15eb 100644 --- a/pkg/core/ssl-deployer/providers/aliyun-waf/aliyun_waf.go +++ b/pkg/core/ssl-deployer/providers/aliyun-waf/aliyun_waf.go @@ -8,11 +8,13 @@ import ( "strings" aliopen "github.com/alibabacloud-go/darabonba-openapi/v2/client" + "github.com/alibabacloud-go/tea/dara" "github.com/alibabacloud-go/tea/tea" - aliwaf "github.com/alibabacloud-go/waf-openapi-20211001/v6/client" + aliwaf "github.com/alibabacloud-go/waf-openapi-20211001/v7/client" "github.com/samber/lo" "github.com/certimate-go/certimate/pkg/core" + "github.com/certimate-go/certimate/pkg/core/ssl-deployer/providers/aliyun-waf/internal" sslmgrsp "github.com/certimate-go/certimate/pkg/core/ssl-manager/providers/aliyun-cas" ) @@ -36,7 +38,7 @@ type SSLDeployerProviderConfig struct { type SSLDeployerProvider struct { config *SSLDeployerProviderConfig logger *slog.Logger - sdkClient *aliwaf.Client + sdkClient *internal.WafClient sslManager core.SSLManager } @@ -119,7 +121,7 @@ func (d *SSLDeployerProvider) deployToWAF3(ctx context.Context, certPEM string, InstanceId: tea.String(d.config.InstanceId), RegionId: tea.String(d.config.Region), } - describeDefaultHttpsResp, err := d.sdkClient.DescribeDefaultHttps(describeDefaultHttpsReq) + describeDefaultHttpsResp, err := d.sdkClient.DescribeDefaultHttpsWithContext(context.TODO(), describeDefaultHttpsReq, &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'waf.DescribeDefaultHttps'", slog.Any("request", describeDefaultHttpsReq), slog.Any("response", describeDefaultHttpsResp)) if err != nil { return fmt.Errorf("failed to execute sdk request 'waf.DescribeDefaultHttps': %w", err) @@ -143,7 +145,7 @@ func (d *SSLDeployerProvider) deployToWAF3(ctx context.Context, certPEM string, modifyDefaultHttpsReq.EnableTLSv3 = describeDefaultHttpsResp.Body.DefaultHttps.EnableTLSv3 } } - modifyDefaultHttpsResp, err := d.sdkClient.ModifyDefaultHttps(modifyDefaultHttpsReq) + modifyDefaultHttpsResp, err := d.sdkClient.ModifyDefaultHttpsWithContext(context.TODO(), modifyDefaultHttpsReq, &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'waf.ModifyDefaultHttps'", slog.Any("request", modifyDefaultHttpsReq), slog.Any("response", modifyDefaultHttpsResp)) if err != nil { return fmt.Errorf("failed to execute sdk request 'waf.ModifyDefaultHttps': %w", err) @@ -158,7 +160,7 @@ func (d *SSLDeployerProvider) deployToWAF3(ctx context.Context, certPEM string, RegionId: tea.String(d.config.Region), Domain: tea.String(d.config.Domain), } - describeDomainDetailResp, err := d.sdkClient.DescribeDomainDetail(describeDomainDetailReq) + describeDomainDetailResp, err := d.sdkClient.DescribeDomainDetailWithContext(context.TODO(), describeDomainDetailReq, &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'waf.DescribeDomainDetail'", slog.Any("request", describeDomainDetailReq), slog.Any("response", describeDomainDetailResp)) if err != nil { return fmt.Errorf("failed to execute sdk request 'waf.DescribeDomainDetail': %w", err) @@ -174,7 +176,7 @@ func (d *SSLDeployerProvider) deployToWAF3(ctx context.Context, certPEM string, Redirect: &aliwaf.ModifyDomainRequestRedirect{Loadbalance: tea.String("iphash")}, } modifyDomainReq = assign(modifyDomainReq, describeDomainDetailResp.Body) - modifyDomainResp, err := d.sdkClient.ModifyDomain(modifyDomainReq) + modifyDomainResp, err := d.sdkClient.ModifyDomainWithContext(context.TODO(), modifyDomainReq, &dara.RuntimeOptions{}) d.logger.Debug("sdk request 'waf.ModifyDomain'", slog.Any("request", modifyDomainReq), slog.Any("response", modifyDomainResp)) if err != nil { return fmt.Errorf("failed to execute sdk request 'waf.ModifyDomain': %w", err) @@ -184,7 +186,7 @@ func (d *SSLDeployerProvider) deployToWAF3(ctx context.Context, certPEM string, return nil } -func createSDKClient(accessKeyId, accessKeySecret, region string) (*aliwaf.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (*internal.WafClient, error) { // 接入点一览:https://api.aliyun.com/product/waf-openapi var endpoint string switch region { @@ -200,7 +202,7 @@ func createSDKClient(accessKeyId, accessKeySecret, region string) (*aliwaf.Clien Endpoint: tea.String(endpoint), } - client, err := aliwaf.NewClient(config) + client, err := internal.NewWafClient(config) if err != nil { return nil, err } diff --git a/pkg/core/ssl-deployer/providers/aliyun-waf/internal/client.go b/pkg/core/ssl-deployer/providers/aliyun-waf/internal/client.go new file mode 100644 index 000000000..7c056cd61 --- /dev/null +++ b/pkg/core/ssl-deployer/providers/aliyun-waf/internal/client.go @@ -0,0 +1,254 @@ +package internal + +import ( + "context" + + openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" + openapiutil "github.com/alibabacloud-go/darabonba-openapi/v2/utils" + "github.com/alibabacloud-go/tea/dara" + aliwaf "github.com/alibabacloud-go/waf-openapi-20211001/v7/client" +) + +// This is a partial copy of https://github.com/alibabacloud-go/waf-openapi-20211001/blob/master/client/client_context_func.go +// to lightweight the vendor packages in the built binary. +type WafClient struct { + openapi.Client + DisableSDKError *bool +} + +func NewWafClient(config *openapiutil.Config) (*WafClient, error) { + client := new(WafClient) + err := client.Init(config) + return client, err +} + +func (client *WafClient) Init(config *openapiutil.Config) (_err error) { + _err = client.Client.Init(config) + if _err != nil { + return _err + } + _err = client.CheckConfig(config) + if _err != nil { + return _err + } + + return nil +} + +func (client *WafClient) DescribeDefaultHttpsWithContext(ctx context.Context, request *aliwaf.DescribeDefaultHttpsRequest, runtime *dara.RuntimeOptions) (_result *aliwaf.DescribeDefaultHttpsResponse, _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.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("DescribeDefaultHttps"), + 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.DescribeDefaultHttpsResponse{} + _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) DescribeDomainDetailWithContext(ctx context.Context, request *aliwaf.DescribeDomainDetailRequest, runtime *dara.RuntimeOptions) (_result *aliwaf.DescribeDomainDetailResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !dara.IsNil(request.Domain) { + query["Domain"] = request.Domain + } + + if !dara.IsNil(request.DomainId) { + query["DomainId"] = request.DomainId + } + + if !dara.IsNil(request.InstanceId) { + query["InstanceId"] = request.InstanceId + } + + if !dara.IsNil(request.RegionId) { + query["RegionId"] = request.RegionId + } + + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("DescribeDomainDetail"), + 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.DescribeDomainDetailResponse{} + _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) ModifyDefaultHttpsWithContext(ctx context.Context, request *aliwaf.ModifyDefaultHttpsRequest, runtime *dara.RuntimeOptions) (_result *aliwaf.ModifyDefaultHttpsResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !dara.IsNil(request.CertId) { + query["CertId"] = request.CertId + } + + if !dara.IsNil(request.CipherSuite) { + query["CipherSuite"] = request.CipherSuite + } + + if !dara.IsNil(request.CustomCiphers) { + query["CustomCiphers"] = request.CustomCiphers + } + + if !dara.IsNil(request.EnableTLSv3) { + query["EnableTLSv3"] = request.EnableTLSv3 + } + + 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 + } + + if !dara.IsNil(request.TLSVersion) { + query["TLSVersion"] = request.TLSVersion + } + + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("ModifyDefaultHttps"), + 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.ModifyDefaultHttpsResponse{} + _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) ModifyDomainWithContext(ctx context.Context, tmpReq *aliwaf.ModifyDomainRequest, runtime *dara.RuntimeOptions) (_result *aliwaf.ModifyDomainResponse, _err error) { + _err = tmpReq.Validate() + if _err != nil { + return _result, _err + } + + request := &aliwaf.ModifyDomainShrinkRequest{} + 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.AccessType) { + query["AccessType"] = request.AccessType + } + + if !dara.IsNil(request.Domain) { + query["Domain"] = request.Domain + } + + if !dara.IsNil(request.DomainId) { + query["DomainId"] = request.DomainId + } + + if !dara.IsNil(request.InstanceId) { + 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.RegionId) { + query["RegionId"] = request.RegionId + } + + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("ModifyDomain"), + 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.ModifyDomainResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} diff --git a/pkg/core/ssl-deployer/providers/baiducloud-appblb/baiducloud_appblb.go b/pkg/core/ssl-deployer/providers/baiducloud-appblb/baiducloud_appblb.go index b03ce85d2..e95034cef 100644 --- a/pkg/core/ssl-deployer/providers/baiducloud-appblb/baiducloud_appblb.go +++ b/pkg/core/ssl-deployer/providers/baiducloud-appblb/baiducloud_appblb.go @@ -9,7 +9,7 @@ import ( "strings" bceappblb "github.com/baidubce/bce-sdk-go/services/appblb" - "github.com/google/uuid" + "github.com/pocketbase/pocketbase/tools/security" "github.com/samber/lo" "github.com/certimate-go/certimate/pkg/core" @@ -264,7 +264,7 @@ func (d *SSLDeployerProvider) updateHttpsListenerCertificate(ctx context.Context // 更新 HTTPS 监听器 // REF: https://cloud.baidu.com/doc/BLB/s/ujwvxnyux#updateapphttpslistener%E6%9B%B4%E6%96%B0https%E7%9B%91%E5%90%AC%E5%99%A8 updateAppHTTPSListenerReq := &bceappblb.UpdateAppHTTPSListenerArgs{ - ClientToken: generateClientToken(), + ClientToken: security.RandomString(32), ListenerPort: uint16(cloudHttpsListenerPort), Scheduler: describeAppHTTPSListenersResp.ListenerList[0].Scheduler, CertIds: []string{cloudCertId}, @@ -280,7 +280,7 @@ func (d *SSLDeployerProvider) updateHttpsListenerCertificate(ctx context.Context // 更新 HTTPS 监听器 // REF: https://cloud.baidu.com/doc/BLB/s/yjwvxnvl6#updatehttpslistener%E6%9B%B4%E6%96%B0https%E7%9B%91%E5%90%AC%E5%99%A8 updateAppHTTPSListenerReq := &bceappblb.UpdateAppHTTPSListenerArgs{ - ClientToken: generateClientToken(), + ClientToken: security.RandomString(32), ListenerPort: uint16(cloudHttpsListenerPort), Scheduler: describeAppHTTPSListenersResp.ListenerList[0].Scheduler, CertIds: describeAppHTTPSListenersResp.ListenerList[0].CertIds, @@ -312,7 +312,7 @@ func (d *SSLDeployerProvider) updateSslListenerCertificate(ctx context.Context, // 更新 SSL 监听器 // REF: https://cloud.baidu.com/doc/BLB/s/ujwvxnyux#updateappssllistener%E6%9B%B4%E6%96%B0ssl%E7%9B%91%E5%90%AC%E5%99%A8 updateAppSSLListenerReq := &bceappblb.UpdateAppSSLListenerArgs{ - ClientToken: generateClientToken(), + ClientToken: security.RandomString(32), ListenerPort: uint16(cloudHttpsListenerPort), CertIds: []string{cloudCertId}, } @@ -338,7 +338,3 @@ func createSDKClient(accessKeyId, secretAccessKey, region string) (*bceappblb.Cl return client, nil } - -func generateClientToken() string { - return strings.ReplaceAll(uuid.New().String(), "-", "") -} diff --git a/pkg/core/ssl-deployer/providers/baiducloud-blb/baiducloud_blb.go b/pkg/core/ssl-deployer/providers/baiducloud-blb/baiducloud_blb.go index 954ece86c..e6fd15239 100644 --- a/pkg/core/ssl-deployer/providers/baiducloud-blb/baiducloud_blb.go +++ b/pkg/core/ssl-deployer/providers/baiducloud-blb/baiducloud_blb.go @@ -9,7 +9,7 @@ import ( "strings" bceblb "github.com/baidubce/bce-sdk-go/services/blb" - "github.com/google/uuid" + "github.com/pocketbase/pocketbase/tools/security" "github.com/samber/lo" "github.com/certimate-go/certimate/pkg/core" @@ -264,7 +264,7 @@ func (d *SSLDeployerProvider) updateHttpsListenerCertificate(ctx context.Context // 更新 HTTPS 监听器 // REF: https://cloud.baidu.com/doc/BLB/s/yjwvxnvl6#updatehttpslistener%E6%9B%B4%E6%96%B0https%E7%9B%91%E5%90%AC%E5%99%A8 updateHTTPSListenerReq := &bceblb.UpdateHTTPSListenerArgs{ - ClientToken: generateClientToken(), + ClientToken: security.RandomString(32), ListenerPort: uint16(cloudHttpsListenerPort), CertIds: []string{cloudCertId}, } @@ -279,7 +279,7 @@ func (d *SSLDeployerProvider) updateHttpsListenerCertificate(ctx context.Context // 更新 HTTPS 监听器 // REF: https://cloud.baidu.com/doc/BLB/s/yjwvxnvl6#updatehttpslistener%E6%9B%B4%E6%96%B0https%E7%9B%91%E5%90%AC%E5%99%A8 updateHTTPSListenerReq := &bceblb.UpdateHTTPSListenerArgs{ - ClientToken: generateClientToken(), + ClientToken: security.RandomString(32), ListenerPort: uint16(cloudHttpsListenerPort), CertIds: describeHTTPSListenersResp.ListenerList[0].CertIds, AdditionalCertDomains: lo.Map(describeHTTPSListenersResp.ListenerList[0].AdditionalCertDomains, func(domain bceblb.AdditionalCertDomainsModel, _ int) bceblb.AdditionalCertDomainsModel { @@ -310,7 +310,7 @@ func (d *SSLDeployerProvider) updateSslListenerCertificate(ctx context.Context, // 更新 SSL 监听器 // REF: https://cloud.baidu.com/doc/BLB/s/yjwvxnvl6#updatessllistener%E6%9B%B4%E6%96%B0ssl%E7%9B%91%E5%90%AC%E5%99%A8 updateSSLListenerReq := &bceblb.UpdateSSLListenerArgs{ - ClientToken: generateClientToken(), + ClientToken: security.RandomString(32), ListenerPort: uint16(cloudHttpsListenerPort), CertIds: []string{cloudCertId}, } @@ -336,7 +336,3 @@ func createSDKClient(accessKeyId, secretAccessKey, region string) (*bceblb.Clien return client, nil } - -func generateClientToken() string { - return strings.ReplaceAll(uuid.New().String(), "-", "") -} diff --git a/pkg/core/ssl-deployer/providers/jdcloud-alb/jdcloud_alb.go b/pkg/core/ssl-deployer/providers/jdcloud-alb/jdcloud_alb.go index 81896fea6..3f641e98d 100644 --- a/pkg/core/ssl-deployer/providers/jdcloud-alb/jdcloud_alb.go +++ b/pkg/core/ssl-deployer/providers/jdcloud-alb/jdcloud_alb.go @@ -258,6 +258,6 @@ func (d *SSLDeployerProvider) updateListenerCertificate(ctx context.Context, clo func createSDKClient(accessKeyId, accessKeySecret string) (*jdlbclient.LbClient, error) { clientCredentials := jdcore.NewCredentials(accessKeyId, accessKeySecret) client := jdlbclient.NewLbClient(clientCredentials) - client.SetLogger(jdcore.NewDefaultLogger(jdcore.LogWarn)) + client.DisableLogger() return client, nil } diff --git a/pkg/core/ssl-deployer/providers/jdcloud-cdn/jdcloud_cdn.go b/pkg/core/ssl-deployer/providers/jdcloud-cdn/jdcloud_cdn.go index a552d7101..9415e9a58 100644 --- a/pkg/core/ssl-deployer/providers/jdcloud-cdn/jdcloud_cdn.go +++ b/pkg/core/ssl-deployer/providers/jdcloud-cdn/jdcloud_cdn.go @@ -111,6 +111,6 @@ func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privke func createSDKClient(accessKeyId, accessKeySecret string) (*jdcdnclient.CdnClient, error) { clientCredentials := jdcore.NewCredentials(accessKeyId, accessKeySecret) client := jdcdnclient.NewCdnClient(clientCredentials) - client.SetLogger(jdcore.NewDefaultLogger(jdcore.LogWarn)) + client.DisableLogger() return client, nil } diff --git a/pkg/core/ssl-deployer/providers/jdcloud-live/jdcloud_live.go b/pkg/core/ssl-deployer/providers/jdcloud-live/jdcloud_live.go index 19e22df0f..fb4dc7b7b 100644 --- a/pkg/core/ssl-deployer/providers/jdcloud-live/jdcloud_live.go +++ b/pkg/core/ssl-deployer/providers/jdcloud-live/jdcloud_live.go @@ -76,6 +76,6 @@ func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privke func createSDKClient(accessKeyId, accessKeySecret string) (*jdliveclient.LiveClient, error) { clientCredentials := jdcore.NewCredentials(accessKeyId, accessKeySecret) client := jdliveclient.NewLiveClient(clientCredentials) - client.SetLogger(jdcore.NewDefaultLogger(jdcore.LogWarn)) + client.DisableLogger() return client, nil } diff --git a/pkg/core/ssl-deployer/providers/jdcloud-vod/jdcloud_vod.go b/pkg/core/ssl-deployer/providers/jdcloud-vod/jdcloud_vod.go index c244492f7..c18d033bd 100644 --- a/pkg/core/ssl-deployer/providers/jdcloud-vod/jdcloud_vod.go +++ b/pkg/core/ssl-deployer/providers/jdcloud-vod/jdcloud_vod.go @@ -125,6 +125,6 @@ func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privke func createSDKClient(accessKeyId, accessKeySecret string) (*jdvodclient.VodClient, error) { clientCredentials := jdcore.NewCredentials(accessKeyId, accessKeySecret) client := jdvodclient.NewVodClient(clientCredentials) - client.SetLogger(jdcore.NewDefaultLogger(jdcore.LogWarn)) + client.DisableLogger() return client, nil } diff --git a/pkg/core/ssl-deployer/providers/k8s-secret/k8s_secret.go b/pkg/core/ssl-deployer/providers/k8s-secret/k8s_secret.go index b90db949f..0387fd8f3 100644 --- a/pkg/core/ssl-deployer/providers/k8s-secret/k8s_secret.go +++ b/pkg/core/ssl-deployer/providers/k8s-secret/k8s_secret.go @@ -8,6 +8,7 @@ import ( "strings" k8score "k8s.io/api/core/v1" + k8serrors "k8s.io/apimachinery/pkg/api/errors" k8smeta "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" @@ -87,7 +88,7 @@ func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privke // 连接 client, err := createK8sClient(d.config.KubeConfig) if err != nil { - return nil, fmt.Errorf("failed to create k8s client: %w", err) + return nil, fmt.Errorf("failed to create kubernetes client: %w", err) } var secretPayload *k8score.Secret @@ -113,6 +114,10 @@ func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privke // 获取 Secret 实例,如果不存在则创建 secretPayload, err = client.CoreV1().Secrets(d.config.Namespace).Get(context.TODO(), d.config.SecretName, k8smeta.GetOptions{}) if err != nil { + if !k8serrors.IsNotFound(err) { + return nil, fmt.Errorf("failed to get kubernetes secret: %w", err) + } + secretPayload = &k8score.Secret{ TypeMeta: k8smeta.TypeMeta{ Kind: "Secret", @@ -130,9 +135,9 @@ func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privke secretPayload.Data[d.config.SecretDataKeyForKey] = []byte(privkeyPEM) secretPayload, err = client.CoreV1().Secrets(d.config.Namespace).Create(context.TODO(), secretPayload, k8smeta.CreateOptions{}) - d.logger.Debug("k8s operate 'Secrets.Create'", slog.String("namespace", d.config.Namespace), slog.Any("secret", secretPayload)) + d.logger.Debug("kubernetes operate 'Secrets.Create'", slog.String("namespace", d.config.Namespace), slog.Any("secret", secretPayload)) if err != nil { - return nil, fmt.Errorf("failed to create k8s secret: %w", err) + return nil, fmt.Errorf("failed to create kubernetes secret: %w", err) } else { return &core.SSLDeployResult{}, nil } @@ -160,9 +165,9 @@ func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privke secretPayload.Data[d.config.SecretDataKeyForCrt] = []byte(certPEM) secretPayload.Data[d.config.SecretDataKeyForKey] = []byte(privkeyPEM) secretPayload, err = client.CoreV1().Secrets(d.config.Namespace).Update(context.TODO(), secretPayload, k8smeta.UpdateOptions{}) - d.logger.Debug("k8s operate 'Secrets.Update'", slog.String("namespace", d.config.Namespace), slog.Any("secret", secretPayload)) + d.logger.Debug("kubernetes operate 'Secrets.Update'", slog.String("namespace", d.config.Namespace), slog.Any("secret", secretPayload)) if err != nil { - return nil, fmt.Errorf("failed to update k8s secret: %w", err) + return nil, fmt.Errorf("failed to update kubernetes secret: %w", err) } return &core.SSLDeployResult{}, nil diff --git a/pkg/core/ssl-deployer/providers/volcengine-alb/volcengine_alb.go b/pkg/core/ssl-deployer/providers/volcengine-alb/volcengine_alb.go index 5394991d1..2df3c4476 100644 --- a/pkg/core/ssl-deployer/providers/volcengine-alb/volcengine_alb.go +++ b/pkg/core/ssl-deployer/providers/volcengine-alb/volcengine_alb.go @@ -38,7 +38,7 @@ type SSLDeployerProviderConfig struct { type SSLDeployerProvider struct { config *SSLDeployerProviderConfig logger *slog.Logger - sdkClient *vealb.ALB + sdkClient vealb.ALBAPI sslManager core.SSLManager } @@ -259,7 +259,7 @@ func (d *SSLDeployerProvider) updateListenerCertificate(ctx context.Context, clo return nil } -func createSDKClient(accessKeyId, accessKeySecret, region string) (*vealb.ALB, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (vealb.ALBAPI, error) { config := ve.NewConfig(). WithAkSk(accessKeyId, accessKeySecret). WithRegion(region) diff --git a/pkg/core/ssl-deployer/providers/volcengine-cdn/volcengine_cdn.go b/pkg/core/ssl-deployer/providers/volcengine-cdn/volcengine_cdn.go index d02cdfbf6..2db361cb1 100644 --- a/pkg/core/ssl-deployer/providers/volcengine-cdn/volcengine_cdn.go +++ b/pkg/core/ssl-deployer/providers/volcengine-cdn/volcengine_cdn.go @@ -31,7 +31,7 @@ type SSLDeployerProviderConfig struct { type SSLDeployerProvider struct { config *SSLDeployerProviderConfig logger *slog.Logger - sdkClient *vecdn.CDN + sdkClient vecdn.CDNAPI sslManager core.SSLManager } @@ -247,7 +247,7 @@ func (d *SSLDeployerProvider) bindCert(ctx context.Context, domain string, cloud return nil } -func createSDKClient(accessKeyId, accessKeySecret string) (*vecdn.CDN, error) { +func createSDKClient(accessKeyId, accessKeySecret string) (vecdn.CDNAPI, error) { config := ve.NewConfig(). WithAkSk(accessKeyId, accessKeySecret) diff --git a/pkg/core/ssl-deployer/providers/volcengine-clb/volcengine_clb.go b/pkg/core/ssl-deployer/providers/volcengine-clb/volcengine_clb.go index fbd054247..c77677417 100644 --- a/pkg/core/ssl-deployer/providers/volcengine-clb/volcengine_clb.go +++ b/pkg/core/ssl-deployer/providers/volcengine-clb/volcengine_clb.go @@ -34,7 +34,7 @@ type SSLDeployerProviderConfig struct { type SSLDeployerProvider struct { config *SSLDeployerProviderConfig logger *slog.Logger - sdkClient *veclb.CLB + sdkClient veclb.CLBAPI sslManager core.SSLManager } @@ -211,7 +211,7 @@ func (d *SSLDeployerProvider) updateListenerCertificate(ctx context.Context, clo return nil } -func createSDKClient(accessKeyId, accessKeySecret, region string) (*veclb.CLB, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (veclb.CLBAPI, error) { config := ve.NewConfig(). WithAkSk(accessKeyId, accessKeySecret). WithRegion(region) diff --git a/pkg/core/ssl-deployer/providers/volcengine-dcdn/volcengine_dcdn.go b/pkg/core/ssl-deployer/providers/volcengine-dcdn/volcengine_dcdn.go index 8ab5c6314..157bf94cb 100644 --- a/pkg/core/ssl-deployer/providers/volcengine-dcdn/volcengine_dcdn.go +++ b/pkg/core/ssl-deployer/providers/volcengine-dcdn/volcengine_dcdn.go @@ -29,7 +29,7 @@ type SSLDeployerProviderConfig struct { type SSLDeployerProvider struct { config *SSLDeployerProviderConfig logger *slog.Logger - sdkClient *vedcdn.DCDN + sdkClient vedcdn.DCDNAPI sslManager core.SSLManager } @@ -104,7 +104,7 @@ func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privke return &core.SSLDeployResult{}, nil } -func createSDKClient(accessKeyId, accessKeySecret, region string) (*vedcdn.DCDN, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (vedcdn.DCDNAPI, error) { if region == "" { region = "cn-beijing" // DCDN 服务默认区域:北京 } diff --git a/pkg/core/ssl-manager/providers/aliyun-cas/aliyun_cas.go b/pkg/core/ssl-manager/providers/aliyun-cas/aliyun_cas.go index 4682e4d45..7b87cdba6 100644 --- a/pkg/core/ssl-manager/providers/aliyun-cas/aliyun_cas.go +++ b/pkg/core/ssl-manager/providers/aliyun-cas/aliyun_cas.go @@ -10,10 +10,12 @@ import ( alicas "github.com/alibabacloud-go/cas-20200407/v4/client" aliopen "github.com/alibabacloud-go/darabonba-openapi/v2/client" + "github.com/alibabacloud-go/tea/dara" "github.com/alibabacloud-go/tea/tea" "github.com/samber/lo" "github.com/certimate-go/certimate/pkg/core" + "github.com/certimate-go/certimate/pkg/core/ssl-manager/providers/aliyun-cas/internal" xcert "github.com/certimate-go/certimate/pkg/utils/cert" ) @@ -31,7 +33,7 @@ type SSLManagerProviderConfig struct { type SSLManagerProvider struct { config *SSLManagerProviderConfig logger *slog.Logger - sdkClient *alicas.Client + sdkClient *internal.CasClient } var _ core.SSLManager = (*SSLManagerProvider)(nil) @@ -86,7 +88,7 @@ func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkey ShowSize: tea.Int64(listUserCertificateOrderLimit), OrderType: tea.String("CERT"), } - listUserCertificateOrderResp, err := m.sdkClient.ListUserCertificateOrder(listUserCertificateOrderReq) + listUserCertificateOrderResp, err := m.sdkClient.ListUserCertificateOrderWithContext(context.TODO(), listUserCertificateOrderReq, &dara.RuntimeOptions{}) m.logger.Debug("sdk request 'cas.ListUserCertificateOrder'", slog.Any("request", listUserCertificateOrderReq), slog.Any("response", listUserCertificateOrderResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'cas.ListUserCertificateOrder': %w", err) @@ -111,7 +113,7 @@ func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkey getUserCertificateDetailReq := &alicas.GetUserCertificateDetailRequest{ CertId: certOrder.CertificateId, } - getUserCertificateDetailResp, err := m.sdkClient.GetUserCertificateDetail(getUserCertificateDetailReq) + getUserCertificateDetailResp, err := m.sdkClient.GetUserCertificateDetailWithContext(context.TODO(), getUserCertificateDetailReq, &dara.RuntimeOptions{}) m.logger.Debug("sdk request 'cas.GetUserCertificateDetail'", slog.Any("request", getUserCertificateDetailReq), slog.Any("response", getUserCertificateDetailResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'cas.GetUserCertificateDetail': %w", err) @@ -152,7 +154,7 @@ func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkey Cert: tea.String(certPEM), Key: tea.String(privkeyPEM), } - uploadUserCertificateResp, err := m.sdkClient.UploadUserCertificate(uploadUserCertificateReq) + uploadUserCertificateResp, err := m.sdkClient.UploadUserCertificateWithContext(context.TODO(), uploadUserCertificateReq, &dara.RuntimeOptions{}) m.logger.Debug("sdk request 'cas.UploadUserCertificate'", slog.Any("request", uploadUserCertificateReq), slog.Any("response", uploadUserCertificateResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'cas.UploadUserCertificate': %w", err) @@ -164,7 +166,7 @@ func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkey CertId: uploadUserCertificateResp.Body.CertId, CertFilter: tea.Bool(true), } - getUserCertificateDetailResp, err := m.sdkClient.GetUserCertificateDetail(getUserCertificateDetailReq) + getUserCertificateDetailResp, err := m.sdkClient.GetUserCertificateDetailWithContext(context.TODO(), getUserCertificateDetailReq, &dara.RuntimeOptions{}) m.logger.Debug("sdk request 'cas.GetUserCertificateDetail'", slog.Any("request", getUserCertificateDetailReq), slog.Any("response", getUserCertificateDetailResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'cas.GetUserCertificateDetail': %w", err) @@ -180,7 +182,7 @@ func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkey }, nil } -func createSDKClient(accessKeyId, accessKeySecret, region string) (*alicas.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (*internal.CasClient, error) { // 接入点一览 https://api.aliyun.com/product/cas var endpoint string switch region { @@ -196,7 +198,7 @@ func createSDKClient(accessKeyId, accessKeySecret, region string) (*alicas.Clien AccessKeySecret: tea.String(accessKeySecret), } - client, err := alicas.NewClient(config) + client, err := internal.NewCasClient(config) if err != nil { return nil, err } diff --git a/pkg/core/ssl-manager/providers/aliyun-cas/internal/client.go b/pkg/core/ssl-manager/providers/aliyun-cas/internal/client.go new file mode 100644 index 000000000..29737b570 --- /dev/null +++ b/pkg/core/ssl-manager/providers/aliyun-cas/internal/client.go @@ -0,0 +1,194 @@ +package internal + +import ( + "context" + + alicas "github.com/alibabacloud-go/cas-20200407/v4/client" + openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" + openapiutil "github.com/alibabacloud-go/darabonba-openapi/v2/utils" + "github.com/alibabacloud-go/tea/dara" +) + +// This is a partial copy of https://github.com/alibabacloud-go/cas-20200407/blob/master/client/client_context_func.go +// to lightweight the vendor packages in the built binary. +type CasClient struct { + openapi.Client + DisableSDKError *bool +} + +func NewCasClient(config *openapiutil.Config) (*CasClient, error) { + client := new(CasClient) + err := client.Init(config) + return client, err +} + +func (client *CasClient) Init(config *openapiutil.Config) (_err error) { + _err = client.Client.Init(config) + if _err != nil { + return _err + } + _err = client.CheckConfig(config) + if _err != nil { + return _err + } + + return nil +} + +func (client *CasClient) GetUserCertificateDetailWithContext(ctx context.Context, request *alicas.GetUserCertificateDetailRequest, runtime *dara.RuntimeOptions) (_result *alicas.GetUserCertificateDetailResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !dara.IsNil(request.CertFilter) { + query["CertFilter"] = request.CertFilter + } + + if !dara.IsNil(request.CertId) { + query["CertId"] = request.CertId + } + + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("GetUserCertificateDetail"), + Version: dara.String("2020-04-07"), + 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 = &alicas.GetUserCertificateDetailResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} + +func (client *CasClient) ListUserCertificateOrderWithContext(ctx context.Context, request *alicas.ListUserCertificateOrderRequest, runtime *dara.RuntimeOptions) (_result *alicas.ListUserCertificateOrderResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !dara.IsNil(request.CurrentPage) { + query["CurrentPage"] = request.CurrentPage + } + + if !dara.IsNil(request.Keyword) { + query["Keyword"] = request.Keyword + } + + if !dara.IsNil(request.OrderType) { + query["OrderType"] = request.OrderType + } + + if !dara.IsNil(request.ResourceGroupId) { + query["ResourceGroupId"] = request.ResourceGroupId + } + + if !dara.IsNil(request.ShowSize) { + query["ShowSize"] = request.ShowSize + } + + if !dara.IsNil(request.Status) { + query["Status"] = request.Status + } + + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("ListUserCertificateOrder"), + Version: dara.String("2020-04-07"), + 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 = &alicas.ListUserCertificateOrderResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} + +func (client *CasClient) UploadUserCertificateWithContext(ctx context.Context, request *alicas.UploadUserCertificateRequest, runtime *dara.RuntimeOptions) (_result *alicas.UploadUserCertificateResponse, _err error) { + _err = request.Validate() + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !dara.IsNil(request.Cert) { + query["Cert"] = request.Cert + } + + if !dara.IsNil(request.EncryptCert) { + query["EncryptCert"] = request.EncryptCert + } + + if !dara.IsNil(request.EncryptPrivateKey) { + query["EncryptPrivateKey"] = request.EncryptPrivateKey + } + + if !dara.IsNil(request.Key) { + query["Key"] = request.Key + } + + if !dara.IsNil(request.Name) { + query["Name"] = request.Name + } + + if !dara.IsNil(request.ResourceGroupId) { + query["ResourceGroupId"] = request.ResourceGroupId + } + + if !dara.IsNil(request.SignCert) { + query["SignCert"] = request.SignCert + } + + if !dara.IsNil(request.SignPrivateKey) { + query["SignPrivateKey"] = request.SignPrivateKey + } + + if !dara.IsNil(request.Tags) { + query["Tags"] = request.Tags + } + + req := &openapiutil.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapiutil.Params{ + Action: dara.String("UploadUserCertificate"), + Version: dara.String("2020-04-07"), + 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 = &alicas.UploadUserCertificateResponse{} + _body, _err := client.CallApiWithCtx(ctx, params, req, runtime) + if _err != nil { + return _result, _err + } + _err = dara.Convert(_body, &_result) + return _result, _err +} diff --git a/pkg/core/ssl-manager/providers/aliyun-slb/aliyun_slb.go b/pkg/core/ssl-manager/providers/aliyun-slb/aliyun_slb.go index 572dd02d8..398a9fb9d 100644 --- a/pkg/core/ssl-manager/providers/aliyun-slb/aliyun_slb.go +++ b/pkg/core/ssl-manager/providers/aliyun-slb/aliyun_slb.go @@ -17,6 +17,7 @@ import ( "github.com/samber/lo" "github.com/certimate-go/certimate/pkg/core" + "github.com/certimate-go/certimate/pkg/core/ssl-manager/providers/aliyun-slb/internal" xcert "github.com/certimate-go/certimate/pkg/utils/cert" ) @@ -34,7 +35,7 @@ type SSLManagerProviderConfig struct { type SSLManagerProvider struct { config *SSLManagerProviderConfig logger *slog.Logger - sdkClient *alislb.Client + sdkClient *internal.SlbClient } var _ core.SSLManager = (*SSLManagerProvider)(nil) @@ -87,17 +88,22 @@ func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkey fingerprint := sha256.Sum256(certX509.Raw) fingerprintHex := hex.EncodeToString(fingerprint[:]) for _, serverCert := range describeServerCertificatesResp.Body.ServerCertificates.ServerCertificate { - isSameCert := tea.Int32Value(serverCert.IsAliCloudCertificate) == 0 && - strings.EqualFold(fingerprintHex, strings.ReplaceAll(tea.StringValue(serverCert.Fingerprint), ":", "")) && - strings.EqualFold(certX509.Subject.CommonName, tea.StringValue(serverCert.CommonName)) - // 如果已存在相同证书,直接返回 - if isSameCert { - m.logger.Info("ssl certificate already exists") - return &core.SSLManageUploadResult{ - CertId: *serverCert.ServerCertificateId, - CertName: *serverCert.ServerCertificateName, - }, nil + if tea.Int32Value(serverCert.IsAliCloudCertificate) != 0 { + continue } + if !strings.EqualFold(certX509.Subject.CommonName, tea.StringValue(serverCert.CommonName)) { + continue + } + if !strings.EqualFold(fingerprintHex, strings.ReplaceAll(tea.StringValue(serverCert.Fingerprint), ":", "")) { + continue + } + + // 如果已存在相同证书,直接返回 + m.logger.Info("ssl certificate already exists") + return &core.SSLManageUploadResult{ + CertId: *serverCert.ServerCertificateId, + CertName: *serverCert.ServerCertificateName, + }, nil } } @@ -131,7 +137,7 @@ func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkey }, nil } -func createSDKClient(accessKeyId, accessKeySecret, region string) (*alislb.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (*internal.SlbClient, error) { // 接入点一览 https://api.aliyun.com/product/Slb var endpoint string switch region { @@ -151,7 +157,7 @@ func createSDKClient(accessKeyId, accessKeySecret, region string) (*alislb.Clien AccessKeySecret: tea.String(accessKeySecret), } - client, err := alislb.NewClient(config) + client, err := internal.NewSlbClient(config) if err != nil { return nil, err } diff --git a/pkg/core/ssl-manager/providers/aliyun-slb/aliyun_slb_test.go b/pkg/core/ssl-manager/providers/aliyun-slb/aliyun_slb_test.go new file mode 100644 index 000000000..dd4574f38 --- /dev/null +++ b/pkg/core/ssl-manager/providers/aliyun-slb/aliyun_slb_test.go @@ -0,0 +1,77 @@ +package aliyunslb_test + +import ( + "context" + "encoding/json" + "flag" + "fmt" + "os" + "strings" + "testing" + + provider "github.com/certimate-go/certimate/pkg/core/ssl-manager/providers/aliyun-slb" +) + +var ( + fInputCertPath string + fInputKeyPath string + fAccessKeyId string + fAccessKeySecret string + fRegion string +) + +func init() { + argsPrefix := "CERTIMATE_SSLMANAGER_ALIYUNSLB_" + + flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") + flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") + flag.StringVar(&fAccessKeyId, argsPrefix+"ACCESSKEYID", "", "") + flag.StringVar(&fAccessKeySecret, argsPrefix+"ACCESSKEYSECRET", "", "") + flag.StringVar(&fRegion, argsPrefix+"REGION", "", "") +} + +/* +Shell command to run this test: + + go test -v ./aliyun_slb_test.go -args \ + --CERTIMATE_SSLMANAGER_ALIYUNSLB_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLMANAGER_ALIYUNSLB_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLMANAGER_ALIYUNSLB_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLMANAGER_ALIYUNSLB_ACCESSKEYSECRET="your-access-key-secret" \ + --CERTIMATE_SSLMANAGER_ALIYUNSLB_REGION="cn-hangzhou" +*/ +func TestDeploy(t *testing.T) { + flag.Parse() + + t.Run("Deploy", func(t *testing.T) { + t.Log(strings.Join([]string{ + "args:", + fmt.Sprintf("INPUTCERTPATH: %v", fInputCertPath), + fmt.Sprintf("INPUTKEYPATH: %v", fInputKeyPath), + fmt.Sprintf("ACCESSKEYID: %v", fAccessKeyId), + fmt.Sprintf("ACCESSKEYSECRET: %v", fAccessKeySecret), + fmt.Sprintf("REGION: %v", fRegion), + }, "\n")) + + sslmanager, err := provider.NewSSLManagerProvider(&provider.SSLManagerProviderConfig{ + AccessKeyId: fAccessKeyId, + AccessKeySecret: fAccessKeySecret, + Region: fRegion, + }) + if err != nil { + t.Errorf("err: %+v", err) + return + } + + fInputCertData, _ := os.ReadFile(fInputCertPath) + fInputKeyData, _ := os.ReadFile(fInputKeyPath) + res, err := sslmanager.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) + if err != nil { + t.Errorf("err: %+v", err) + return + } + + sres, _ := json.Marshal(res) + t.Logf("ok: %s", string(sres)) + }) +} diff --git a/pkg/core/ssl-manager/providers/aliyun-slb/internal/client.go b/pkg/core/ssl-manager/providers/aliyun-slb/internal/client.go new file mode 100644 index 000000000..39ea3c1a9 --- /dev/null +++ b/pkg/core/ssl-manager/providers/aliyun-slb/internal/client.go @@ -0,0 +1,202 @@ +package internal + +import ( + openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" + openapiutil "github.com/alibabacloud-go/darabonba-openapi/v2/utils" + alislb "github.com/alibabacloud-go/slb-20140515/v4/client" + util "github.com/alibabacloud-go/tea-utils/v2/service" + "github.com/alibabacloud-go/tea/dara" + "github.com/alibabacloud-go/tea/tea" +) + +// This is a partial copy of https://github.com/alibabacloud-go/slb-20140515/blob/master/client/client.go +// to lightweight the vendor packages in the built binary. +type SlbClient struct { + openapi.Client + DisableSDKError *bool +} + +func NewSlbClient(config *openapi.Config) (*SlbClient, error) { + client := new(SlbClient) + err := client.Init(config) + return client, err +} + +func (client *SlbClient) Init(config *openapi.Config) (_err error) { + _err = client.Client.Init(config) + if _err != nil { + return _err + } + _err = client.CheckConfig(config) + if _err != nil { + return _err + } + + return nil +} + +func (client *SlbClient) DescribeServerCertificatesWithOptions(request *alislb.DescribeServerCertificatesRequest, runtime *util.RuntimeOptions) (_result *alislb.DescribeServerCertificatesResponse, _err error) { + _err = util.ValidateModel(request) + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !dara.BoolValue(util.IsUnset(request.OwnerAccount)) { + query["OwnerAccount"] = request.OwnerAccount + } + + if !tea.BoolValue(util.IsUnset(request.OwnerId)) { + query["OwnerId"] = request.OwnerId + } + + if !tea.BoolValue(util.IsUnset(request.RegionId)) { + query["RegionId"] = request.RegionId + } + + if !tea.BoolValue(util.IsUnset(request.ResourceGroupId)) { + query["ResourceGroupId"] = request.ResourceGroupId + } + + if !tea.BoolValue(util.IsUnset(request.ResourceOwnerAccount)) { + query["ResourceOwnerAccount"] = request.ResourceOwnerAccount + } + + if !tea.BoolValue(util.IsUnset(request.ResourceOwnerId)) { + query["ResourceOwnerId"] = request.ResourceOwnerId + } + + if !tea.BoolValue(util.IsUnset(request.ServerCertificateId)) { + query["ServerCertificateId"] = request.ServerCertificateId + } + + if !tea.BoolValue(util.IsUnset(request.Tag)) { + query["Tag"] = request.Tag + } + + req := &openapi.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapi.Params{ + Action: tea.String("DescribeServerCertificates"), + Version: tea.String("2014-05-15"), + Protocol: tea.String("HTTPS"), + Pathname: tea.String("/"), + Method: tea.String("POST"), + AuthType: tea.String("AK"), + Style: tea.String("RPC"), + ReqBodyType: tea.String("formData"), + BodyType: tea.String("json"), + } + _result = &alislb.DescribeServerCertificatesResponse{} + _body, _err := client.CallApi(params, req, runtime) + if _err != nil { + return _result, _err + } + _err = tea.Convert(_body, &_result) + return _result, _err +} + +func (client *SlbClient) DescribeServerCertificates(request *alislb.DescribeServerCertificatesRequest) (_result *alislb.DescribeServerCertificatesResponse, _err error) { + runtime := &util.RuntimeOptions{} + _result = &alislb.DescribeServerCertificatesResponse{} + _body, _err := client.DescribeServerCertificatesWithOptions(request, runtime) + if _err != nil { + return _result, _err + } + _result = _body + return _result, _err +} + +func (client *SlbClient) UploadServerCertificateWithOptions(request *alislb.UploadServerCertificateRequest, runtime *util.RuntimeOptions) (_result *alislb.UploadServerCertificateResponse, _err error) { + _err = util.ValidateModel(request) + if _err != nil { + return _result, _err + } + query := map[string]interface{}{} + + if !tea.BoolValue(util.IsUnset(request.AliCloudCertificateId)) { + query["AliCloudCertificateId"] = request.AliCloudCertificateId + } + + if !tea.BoolValue(util.IsUnset(request.AliCloudCertificateName)) { + query["AliCloudCertificateName"] = request.AliCloudCertificateName + } + + if !tea.BoolValue(util.IsUnset(request.AliCloudCertificateRegionId)) { + query["AliCloudCertificateRegionId"] = request.AliCloudCertificateRegionId + } + + if !tea.BoolValue(util.IsUnset(request.OwnerAccount)) { + query["OwnerAccount"] = request.OwnerAccount + } + + if !tea.BoolValue(util.IsUnset(request.OwnerId)) { + query["OwnerId"] = request.OwnerId + } + + if !tea.BoolValue(util.IsUnset(request.PrivateKey)) { + query["PrivateKey"] = request.PrivateKey + } + + if !tea.BoolValue(util.IsUnset(request.RegionId)) { + query["RegionId"] = request.RegionId + } + + if !tea.BoolValue(util.IsUnset(request.ResourceGroupId)) { + query["ResourceGroupId"] = request.ResourceGroupId + } + + if !tea.BoolValue(util.IsUnset(request.ResourceOwnerAccount)) { + query["ResourceOwnerAccount"] = request.ResourceOwnerAccount + } + + if !tea.BoolValue(util.IsUnset(request.ResourceOwnerId)) { + query["ResourceOwnerId"] = request.ResourceOwnerId + } + + if !tea.BoolValue(util.IsUnset(request.ServerCertificate)) { + query["ServerCertificate"] = request.ServerCertificate + } + + if !tea.BoolValue(util.IsUnset(request.ServerCertificateName)) { + query["ServerCertificateName"] = request.ServerCertificateName + } + + if !tea.BoolValue(util.IsUnset(request.Tag)) { + query["Tag"] = request.Tag + } + + req := &openapi.OpenApiRequest{ + Query: openapiutil.Query(query), + } + params := &openapi.Params{ + Action: tea.String("UploadServerCertificate"), + Version: tea.String("2014-05-15"), + Protocol: tea.String("HTTPS"), + Pathname: tea.String("/"), + Method: tea.String("POST"), + AuthType: tea.String("AK"), + Style: tea.String("RPC"), + ReqBodyType: tea.String("formData"), + BodyType: tea.String("json"), + } + _result = &alislb.UploadServerCertificateResponse{} + _body, _err := client.CallApi(params, req, runtime) + if _err != nil { + return _result, _err + } + _err = tea.Convert(_body, &_result) + return _result, _err +} + +func (client *SlbClient) UploadServerCertificate(request *alislb.UploadServerCertificateRequest) (_result *alislb.UploadServerCertificateResponse, _err error) { + runtime := &util.RuntimeOptions{} + _result = &alislb.UploadServerCertificateResponse{} + _body, _err := client.UploadServerCertificateWithOptions(request, runtime) + if _err != nil { + return _result, _err + } + _result = _body + return _result, _err +} diff --git a/pkg/core/ssl-manager/providers/ctcccloud-elb/ctcccloud_elb.go b/pkg/core/ssl-manager/providers/ctcccloud-elb/ctcccloud_elb.go index 9c8dbef3d..2d974ea53 100644 --- a/pkg/core/ssl-manager/providers/ctcccloud-elb/ctcccloud_elb.go +++ b/pkg/core/ssl-manager/providers/ctcccloud-elb/ctcccloud_elb.go @@ -7,7 +7,7 @@ import ( "log/slog" "time" - "github.com/google/uuid" + "github.com/pocketbase/pocketbase/tools/security" "github.com/samber/lo" "github.com/certimate-go/certimate/pkg/core" @@ -86,7 +86,7 @@ func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkey // 创建证书 // REF: https://eop.ctyun.cn/ebp/ctapiDocument/search?sid=24&api=5685&data=88&isNormal=1&vid=82 createCertificateReq := &ctyunelb.CreateCertificateRequest{ - ClientToken: lo.ToPtr(generateClientToken()), + ClientToken: lo.ToPtr(security.RandomString(32)), RegionID: lo.ToPtr(m.config.RegionId), Name: lo.ToPtr(certName), Description: lo.ToPtr("upload from certimate"), @@ -109,7 +109,3 @@ func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkey func createSDKClient(accessKeyId, secretAccessKey string) (*ctyunelb.Client, error) { return ctyunelb.NewClient(accessKeyId, secretAccessKey) } - -func generateClientToken() string { - return uuid.New().String() -} diff --git a/pkg/core/ssl-manager/providers/volcengine-cdn/volcengine_cdn.go b/pkg/core/ssl-manager/providers/volcengine-cdn/volcengine_cdn.go index 712adff01..6340243ea 100644 --- a/pkg/core/ssl-manager/providers/volcengine-cdn/volcengine_cdn.go +++ b/pkg/core/ssl-manager/providers/volcengine-cdn/volcengine_cdn.go @@ -29,7 +29,7 @@ type SSLManagerProviderConfig struct { type SSLManagerProvider struct { config *SSLManagerProviderConfig logger *slog.Logger - sdkClient *vecdn.CDN + sdkClient vecdn.CDNAPI } var _ core.SSLManager = (*SSLManagerProvider)(nil) @@ -92,17 +92,21 @@ func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkey if listCertInfoResp.CertInfo != nil { for _, certInfo := range listCertInfoResp.CertInfo { fingerprintSha1 := sha1.Sum(certX509.Raw) - fingerprintSha256 := sha256.Sum256(certX509.Raw) - isSameCert := strings.EqualFold(hex.EncodeToString(fingerprintSha1[:]), ve.StringValue(certInfo.CertFingerprint.Sha1)) && - strings.EqualFold(hex.EncodeToString(fingerprintSha256[:]), ve.StringValue(certInfo.CertFingerprint.Sha256)) - // 如果已存在相同证书,直接返回 - if isSameCert { - m.logger.Info("ssl certificate already exists") - return &core.SSLManageUploadResult{ - CertId: ve.StringValue(certInfo.CertId), - CertName: ve.StringValue(certInfo.Desc), - }, nil + if !strings.EqualFold(hex.EncodeToString(fingerprintSha1[:]), ve.StringValue(certInfo.CertFingerprint.Sha1)) { + continue } + + fingerprintSha256 := sha256.Sum256(certX509.Raw) + if !strings.EqualFold(hex.EncodeToString(fingerprintSha256[:]), ve.StringValue(certInfo.CertFingerprint.Sha256)) { + continue + } + + // 如果已存在相同证书,直接返回 + m.logger.Info("ssl certificate already exists") + return &core.SSLManageUploadResult{ + CertId: ve.StringValue(certInfo.CertId), + CertName: ve.StringValue(certInfo.Desc), + }, nil } } @@ -138,7 +142,7 @@ func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkey }, nil } -func createSDKClient(accessKeyId, accessKeySecret string) (*vecdn.CDN, error) { +func createSDKClient(accessKeyId, accessKeySecret string) (vecdn.CDNAPI, error) { config := ve.NewConfig(). WithAkSk(accessKeyId, accessKeySecret) diff --git a/pkg/core/ssl-manager/providers/volcengine-certcenter/volcengine_certcenter.go b/pkg/core/ssl-manager/providers/volcengine-certcenter/volcengine_certcenter.go index 5cc3bd647..ca6eff0f4 100644 --- a/pkg/core/ssl-manager/providers/volcengine-certcenter/volcengine_certcenter.go +++ b/pkg/core/ssl-manager/providers/volcengine-certcenter/volcengine_certcenter.go @@ -25,7 +25,7 @@ type SSLManagerProviderConfig struct { type SSLManagerProvider struct { config *SSLManagerProviderConfig logger *slog.Logger - sdkClient *vecs.CERTIFICATESERVICE + sdkClient vecs.CERTIFICATESERVICEAPI } var _ core.SSLManager = (*SSLManagerProvider)(nil) @@ -88,7 +88,7 @@ func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkey }, nil } -func createSDKClient(accessKeyId, accessKeySecret, region string) (*vecs.CERTIFICATESERVICE, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (vecs.CERTIFICATESERVICEAPI, error) { if region == "" { region = "cn-beijing" // 证书中心默认区域:北京 } diff --git a/pkg/core/ssl-manager/providers/volcengine-live/volcengine_live.go b/pkg/core/ssl-manager/providers/volcengine-live/volcengine_live.go index 6ba85333b..3fafa0c11 100644 --- a/pkg/core/ssl-manager/providers/volcengine-live/volcengine_live.go +++ b/pkg/core/ssl-manager/providers/volcengine-live/volcengine_live.go @@ -76,8 +76,8 @@ func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkey continue } - oldCertPEM := strings.Join(describeCertDetailSecretResp.Result.SSL.Chain, "\n\n") // 如果已存在相同证书,直接返回 + oldCertPEM := strings.Join(describeCertDetailSecretResp.Result.SSL.Chain, "\n\n") if xcert.EqualCertificatesFromPEM(certPEM, oldCertPEM) { m.logger.Info("ssl certificate already exists") return &core.SSLManageUploadResult{ diff --git a/pkg/sdk3rd/ctyun/openapi/client.go b/pkg/sdk3rd/ctyun/openapi/client.go index 62a733d09..7475a565d 100644 --- a/pkg/sdk3rd/ctyun/openapi/client.go +++ b/pkg/sdk3rd/ctyun/openapi/client.go @@ -13,7 +13,7 @@ import ( "time" "github.com/go-resty/resty/v2" - "github.com/google/uuid" + "github.com/pocketbase/pocketbase/tools/security" ) type Client struct { @@ -43,7 +43,7 @@ func NewClient(endpoint, accessKeyId, secretAccessKey string) (*Client, error) { // 生成时间戳及流水号 now := time.Now() eopDate := now.Format("20060102T150405Z") - eopReqId := uuid.New().String() + eopReqId := security.RandomString(32) // 获取查询参数 queryStr := ""