From 30840bbba5f2e17ce6f18db2180ebc51f0ef6993 Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Tue, 17 Jun 2025 14:01:34 +0800 Subject: [PATCH] refactor: modify directory structure --- internal/applicant/providers.go | 76 ++-- internal/deployer/deployer.go | 10 +- internal/deployer/providers.go | 384 +++++++++--------- internal/notify/notifier.go | 10 +- internal/notify/notify.go | 6 +- internal/notify/providers.go | 22 +- internal/notify/providers_deprecated.go | 28 +- internal/pkg/core/deployer/deployer.go | 29 -- .../providers/aliyun-cas/aliyun_cas.go | 74 ---- .../deployer/providers/aws-iam/aws_iam.go | 75 ---- .../baiducloud-cert/baiducloud_cert.go | 67 --- .../providers/ctcccloud-cms/ctcccloud_cms.go | 67 --- .../huaweicloud-scm/huaweicloud_scm.go | 71 ---- .../tencentcloud-ssl/tencentcloud_ssl.go | 68 ---- .../volcengine_certcenter.go | 71 ---- internal/pkg/core/notifier/notifier.go | 28 -- .../pkg/core/notifier/providers/bark/bark.go | 20 +- .../core/notifier/providers/bark/bark_test.go | 2 +- .../providers/dingtalkbot/dingtalkbot.go | 20 +- .../providers/dingtalkbot/dingtalkbot_test.go | 2 +- .../providers/discordbot/discordbot.go | 20 +- .../providers/discordbot/discordbot_test.go | 2 +- .../core/notifier/providers/email/email.go | 20 +- .../notifier/providers/email/email_test.go | 2 +- .../core/notifier/providers/gotify/gotify.go | 20 +- .../notifier/providers/gotify/gotify_test.go | 2 +- .../notifier/providers/larkbot/larkbot.go | 20 +- .../providers/larkbot/larkbot_test.go | 2 +- .../providers/mattermost/mattermost.go | 20 +- .../providers/mattermost/mattermost_test.go | 2 +- .../notifier/providers/pushover/pushover.go | 20 +- .../providers/pushover/pushover_test.go | 2 +- .../notifier/providers/pushplus/pushplus.go | 20 +- .../providers/pushplus/pushplus_test.go | 2 +- .../providers/serverchan/serverchan.go | 20 +- .../providers/serverchan/serverchan_test.go | 2 +- .../notifier/providers/slackbot/slackbot.go | 20 +- .../providers/slackbot/slackbot_test.go | 2 +- .../providers/telegrambot/telegrambot.go | 20 +- .../providers/telegrambot/telegrambot_test.go | 2 +- .../notifier/providers/webhook/webhook.go | 20 +- .../providers/webhook/webhook_test.go | 2 +- .../notifier/providers/wecombot/wecombot.go | 20 +- .../providers/wecombot/wecombot_test.go | 2 +- .../providers}/acmehttpreq/acmehttpreq.go | 8 +- .../providers}/aliyun-esa/aliyun_esa.go | 10 +- .../providers}/aliyun-esa/internal/lego.go | 0 .../acme-dns01/providers}/aliyun/aliyun.go | 8 +- .../providers}/aws-route53/aws-route53.go | 8 +- .../providers}/azure-dns/azure-dns.go | 7 +- .../providers}/baiducloud/baiducloud.go | 10 +- .../providers}/baiducloud/internal/lego.go | 0 .../acme-dns01/providers}/bunny/bunny.go | 8 +- .../providers}/cloudflare/cloudflare.go | 8 +- .../acme-dns01/providers}/cloudns/cloudns.go | 8 +- .../providers}/cmcccloud/cmcccloud.go | 10 +- .../providers}/cmcccloud/internal/lego.go | 0 .../providers}/constellix/constellix.go | 8 +- .../providers}/ctcccloud/ctcccloud.go | 10 +- .../providers}/ctcccloud/internal/lego.go | 0 .../acme-dns01/providers}/desec/desec.go | 8 +- .../providers}/digitalocean/digitalocean.go | 8 +- .../acme-dns01/providers}/dnsla/dnsla.go | 10 +- .../providers}/dnsla/internal/lego.go | 0 .../acme-dns01/providers}/duckdns/duckdns.go | 8 +- .../acme-dns01/providers}/dynv6/dnsla.go | 10 +- .../providers}/dynv6/internal/lego.go | 0 .../acme-dns01/providers}/gcore/gcore.go | 8 +- .../acme-dns01/providers}/gname/gname.go | 10 +- .../providers}/gname/internal/lego.go | 0 .../acme-dns01/providers}/godaddy/godaddy.go | 8 +- .../acme-dns01/providers}/hetzner/hetzner.go | 8 +- .../providers}/huaweicloud/huaweicloud.go | 8 +- .../providers}/jdcloud/internal/lego.go | 0 .../acme-dns01/providers}/jdcloud/jdcloud.go | 10 +- .../providers}/namecheap/namecheap.go | 8 +- .../providers}/namedotcom/namedotcom.go | 8 +- .../providers}/namesilo/namesilo.go | 8 +- .../acme-dns01/providers}/netcup/netcup.go | 8 +- .../acme-dns01/providers}/netlify/netlify.go | 8 +- .../acme-dns01/providers}/ns1/ns1.go | 8 +- .../acme-dns01/providers}/porkbun/porkbun.go | 8 +- .../providers}/powerdns/powerdns.go | 8 +- .../acme-dns01/providers}/rainyun/rainyun.go | 8 +- .../tencentcloud-eo/internal/lego.go | 0 .../tencentcloud-eo/tencentcloud_eo.go | 10 +- .../providers}/tencentcloud/tencentcloud.go | 8 +- .../providers}/ucloud-udnr/internal/lego.go | 0 .../providers}/ucloud-udnr/ucloud_udnr.go | 7 +- .../acme-dns01/providers}/vercel/vercel.go | 8 +- .../providers}/volcengine/volcengine.go | 8 +- .../acme-dns01/providers}/westcn/westcn.go | 8 +- .../1panel-console/1panel_console.go | 30 +- .../1panel-console/1panel_console_test.go | 16 +- .../providers/1panel-site/1panel_site.go | 61 ++- .../providers/1panel-site/1panel_site_test.go | 18 +- .../providers/1panel-site/consts.go | 0 .../providers/aliyun-alb/aliyun_alb.go | 73 ++-- .../providers/aliyun-alb/aliyun_alb_test.go | 24 +- .../providers/aliyun-alb/consts.go | 0 .../providers/aliyun-apigw/aliyun_apigw.go | 68 ++-- .../aliyun-apigw/aliyun_apigw_test.go | 24 +- .../providers/aliyun-apigw/consts.go | 0 .../aliyun-cas-deploy/aliyun_cas_deploy.go | 63 ++- .../providers/aliyun-cas/aliyun_cas.go | 74 ++++ .../providers/aliyun-cdn/aliyun_cdn.go | 31 +- .../providers/aliyun-cdn/aliyun_cdn_test.go | 16 +- .../providers/aliyun-clb/aliyun_clb.go | 69 ++-- .../providers/aliyun-clb/aliyun_clb_test.go | 24 +- .../providers/aliyun-clb/consts.go | 0 .../providers/aliyun-dcdn/aliyun_dcdn.go | 35 +- .../providers/aliyun-dcdn/aliyun_dcdn_test.go | 16 +- .../providers/aliyun-ddos/aliyun_ddos.go | 63 ++- .../providers/aliyun-ddos/aliyun_ddos_test.go | 18 +- .../providers/aliyun-esa/aliyun_esa.go | 63 ++- .../providers/aliyun-esa/aliyun_esa_test.go | 18 +- .../providers/aliyun-fc/aliyun_fc.go | 49 ++- .../providers/aliyun-fc/aliyun_fc_test.go | 18 +- .../providers/aliyun-ga/aliyun_ga.go | 73 ++-- .../providers/aliyun-ga/aliyun_ga_test.go | 22 +- .../providers/aliyun-ga/consts.go | 0 .../providers/aliyun-live/aliyun_live.go | 35 +- .../providers/aliyun-live/aliyun_live_test.go | 18 +- .../providers/aliyun-nlb/aliyun_nlb.go | 69 ++-- .../providers/aliyun-nlb/aliyun_nlb_test.go | 22 +- .../providers/aliyun-nlb/consts.go | 0 .../providers/aliyun-oss/aliyun_oss.go | 30 +- .../providers/aliyun-oss/aliyun_oss_test.go | 20 +- .../providers/aliyun-vod/aliyun_vod.go | 35 +- .../providers/aliyun-vod/aliyun_vod_test.go | 18 +- .../providers/aliyun-waf/aliyun_waf.go | 65 ++- .../providers/aliyun-waf/aliyun_waf_test.go | 18 +- .../providers/apisix/apisix.go | 31 +- .../providers/apisix/apisix_test.go | 16 +- .../providers/apisix/consts.go | 0 .../providers/aws-acm/aws_acm.go | 58 +-- .../aws-cloudfront/aws_cloudfront.go | 65 ++- .../aws-cloudfront/aws_cloudfront_test.go | 18 +- .../ssl-deployer/providers/aws-iam/aws_iam.go | 75 ++++ .../azure-keyvault/azure_keyvault.go | 59 ++- .../baiducloud-appblb/baiducloud_appblb.go | 64 ++- .../baiducloud_appblb_test.go} | 24 +- .../providers/baiducloud-appblb/consts.go | 0 .../baiducloud-blb/baiducloud_blb.go | 64 ++- .../baiducloud-blb/baiducloud_blb_test.go} | 24 +- .../providers/baiducloud-blb/consts.go | 0 .../baiducloud-cdn/baiducloud_cdn.go | 35 +- .../baiducloud-cdn/baiducloud_cdn_test.go | 16 +- .../baiducloud-cert/baiducloud_cert.go | 66 +++ .../providers/baishan-cdn/baishan_cdn.go | 29 +- .../providers/baishan-cdn/baishan_cdn_test.go | 14 +- .../baotapanel-console/baotapanel_console.go | 30 +- .../baotapanel_console_test.go | 14 +- .../baotapanel-site/baotapanel_site.go | 29 +- .../baotapanel-site/baotapanel_site_test.go | 18 +- .../baotawaf-console/baotawaf_console.go | 30 +- .../baotawaf-console/baotawaf_console_test.go | 14 +- .../providers/baotawaf-site/baotawaf_site.go | 29 +- .../baotawaf-site/baotawaf_site_test.go | 18 +- .../providers/bunny-cdn/bunny_cdn.go | 33 +- .../providers/bunny-cdn/bunny_cdn_test.go | 16 +- .../providers/byteplus-cdn/byteplus_cdn.go | 51 ++- .../byteplus-cdn/byteplus_cdn_test.go | 16 +- .../providers/cachefly/cachefly.go | 30 +- .../providers/cachefly/cachefly_test.go | 12 +- .../providers/cdnfly/cdnfly.go | 33 +- .../providers/cdnfly/cdnfly_test.go | 18 +- .../providers/cdnfly/consts.go | 0 .../providers/ctcccloud-ao/ctcccloud_ao.go | 54 ++- .../ctcccloud-ao/ctcccloud_ao_test.go | 16 +- .../providers/ctcccloud-cdn/ctcccloud_cdn.go | 54 ++- .../ctcccloud-cdn/ctcccloud_cdn_test.go | 16 +- .../providers/ctcccloud-cms/ctcccloud_cms.go | 66 +++ .../ctcccloud-cms/ctcccloud_cms_test.go | 14 +- .../providers/ctcccloud-elb/consts.go | 0 .../providers/ctcccloud-elb/ctcccloud_elb.go | 60 ++- .../ctcccloud-elb/ctcccloud_elb_test.go | 22 +- .../ctcccloud-icdn/ctcccloud_icdn.go | 54 ++- .../ctcccloud-icdn/ctcccloud_icdn_test.go | 16 +- .../ctcccloud-lvdn/ctcccloud_lvdn.go | 54 ++- .../ctcccloud-lvdn/ctcccloud_lvdn_test.go | 16 +- .../providers/dogecloud-cdn/dogecloud_cdn.go | 58 +-- .../dogecloud-cdn/dogecloud_cdn_test.go | 16 +- .../edgio-applications/edgio_applications.go | 30 +- .../edgio_applications_test.go | 16 +- .../providers/flexcdn/consts.go | 0 .../providers/flexcdn/flexcdn.go | 31 +- .../providers/flexcdn/flexcdn_test.go | 18 +- .../providers/gcore-cdn/gcore_cdn.go | 61 ++- .../providers/gcore-cdn/gcore_cdn_test.go | 14 +- .../providers/goedge/consts.go | 0 .../providers/goedge/goedge.go | 31 +- .../providers/goedge/goedge_test.go | 18 +- .../huaweicloud-cdn/huaweicloud_cdn.go | 62 +-- .../huaweicloud-cdn/huaweicloud_cdn_test.go | 18 +- .../providers/huaweicloud-elb/consts.go | 0 .../huaweicloud-elb/huaweicloud_elb.go | 69 ++-- .../huaweicloud-elb/huaweicloud_elb_test.go | 26 +- .../huaweicloud-scm/huaweicloud_scm.go | 71 ++++ .../providers/huaweicloud-waf/consts.go | 0 .../huaweicloud-waf/huaweicloud_waf.go | 71 ++-- .../huaweicloud-waf/huaweicloud_waf_test.go | 20 +- .../providers/jdcloud-alb/consts.go | 0 .../providers/jdcloud-alb/jdcloud_alb.go | 63 ++- .../providers/jdcloud-alb/jdcloud_alb_test.go | 22 +- .../providers/jdcloud-cdn/jdcloud_cdn.go | 62 +-- .../providers/jdcloud-cdn/jdcloud_cdn_test.go | 16 +- .../providers/jdcloud-live/jdcloud_live.go | 35 +- .../jdcloud-live/jdcloud_live_test.go | 16 +- .../providers/jdcloud-vod/jdcloud_vod.go | 30 +- .../providers/jdcloud-vod/jdcloud_vod_test.go | 16 +- .../providers/k8s-secret/k8s_secret.go | 25 +- .../providers/k8s-secret/k8s_secret_test.go | 18 +- .../providers/lecdn/consts.go | 0 .../providers/lecdn/lecdn.go | 31 +- .../providers/lecdn/lecdn_test.go | 18 +- .../providers/local/defines.go | 0 .../providers/local/local.go | 24 +- .../providers/local/local_test.go | 32 +- .../providers/netlify-site/netlify_site.go | 29 +- .../netlify-site/netlify_site_test.go | 14 +- .../providers/proxmoxve/proxmoxve.go | 29 +- .../providers/proxmoxve/proxmoxve_test.go | 18 +- .../providers/qiniu-cdn/qiniu_cdn.go | 56 +-- .../providers/qiniu-cdn/qiniu_cdn_test.go | 16 +- .../providers/qiniu-pili/qiniu_pili.go | 56 +-- .../providers/qiniu-pili/qiniu_pili_test.go | 18 +- .../providers/rainyun-rcdn/rainyun_rcdn.go | 62 +-- .../rainyun-rcdn/rainyun_rcdn_test.go | 16 +- .../ratpanel-console/ratpanel_console.go | 30 +- .../ratpanel-console/ratpanel_console_test.go | 16 +- .../providers/ratpanel-site/ratpanel_site.go | 29 +- .../ratpanel-site/ratpanel_site_test.go | 18 +- .../providers/safeline/consts.go | 0 .../providers/safeline/safeline.go | 33 +- .../providers/safeline/safeline_test.go | 16 +- .../providers/ssh/defines.go | 0 .../providers/ssh/ssh.go | 24 +- .../providers/ssh/ssh_test.go | 22 +- .../tencentcloud-cdn/tencentcloud_cdn.go | 71 ++-- .../tencentcloud-cdn/tencentcloud_cdn_test.go | 16 +- .../providers/tencentcloud-clb/consts.go | 0 .../tencentcloud-clb/tencentcloud_clb.go | 73 ++-- .../tencentcloud-clb/tencentcloud_clb_test.go | 28 +- .../tencentcloud-cos/tencentcloud_cos.go | 57 ++- .../tencentcloud-cos/tencentcloud_cos_test.go | 20 +- .../tencentcloud-css/tencentcloud_css.go | 62 +-- .../tencentcloud-css/tencentcloud_css_test.go | 16 +- .../tencentcloud-ecdn/tencentcloud_ecdn.go | 67 +-- .../tencentcloud_ecdn_test.go | 16 +- .../tencentcloud-eo/tencentcloud_eo.go | 64 +-- .../tencentcloud-eo/tencentcloud_eo_test.go | 18 +- .../providers/tencentcloud-gaap/consts.go | 0 .../tencentcloud-gaap/tencentcloud_gaap.go | 61 ++- .../tencentcloud_gaap_test.go | 18 +- .../tencentcloud-scf/tencentcloud_scf.go | 62 +-- .../tencentcloud-scf/tencentcloud_scf_test.go | 18 +- .../tencentcloud_ssl_deploy.go | 57 ++- .../tencentcloud-ssl/tencentcloud_ssl.go | 68 ++++ .../tencentcloud-vod/tencentcloud_vod.go | 62 +-- .../tencentcloud-vod/tencentcloud_vod_test.go | 18 +- .../tencentcloud-waf/tencentcloud_waf.go | 57 ++- .../tencentcloud-waf/tencentcloud_waf_test.go | 22 +- .../providers/ucloud-ucdn/ucloud_ucdn.go | 61 +-- .../providers/ucloud-ucdn/ucloud_ucdn_test.go | 16 +- .../providers/ucloud-us3/ucloud_us3.go | 65 +-- .../providers/ucloud-us3/ucloud_us3_test.go | 20 +- .../unicloud-webhost/unicloud_webhost.go | 29 +- .../unicloud-webhost/unicloud_webhost_test.go | 20 +- .../providers/upyun-cdn/upyun_cdn.go | 62 +-- .../providers/upyun-cdn/upyun_cdn_test.go | 16 +- .../providers/volcengine-alb/consts.go | 0 .../volcengine-alb/volcengine_alb.go | 63 ++- .../volcengine-alb/volcengine_alb_test.go | 18 +- .../volcengine-cdn/volcengine_cdn.go | 55 +-- .../volcengine-cdn/volcengine_cdn_test.go | 16 +- .../volcengine_certcenter.go | 71 ++++ .../providers/volcengine-clb/consts.go | 0 .../volcengine-clb/volcengine_clb.go | 63 ++- .../volcengine-clb/volcengine_clb_test.go | 18 +- .../volcengine-dcdn/volcengine_dcdn.go | 62 +-- .../volcengine-dcdn/volcengine_dcdn_test.go | 16 +- .../volcengine-imagex/volcengine_imagex.go | 57 ++- .../volcengine_imagex_test.go | 20 +- .../volcengine-live/volcengine_live.go | 55 +-- .../volcengine-live/volcengine_live_test.go | 16 +- .../volcengine-tos/volcengine_tos.go | 57 ++- .../volcengine-tos/volcengine_tos_test.go | 20 +- .../providers/wangsu-cdn/wangsu_cdn.go | 59 +-- .../providers/wangsu-cdn/wangsu_cdn_test.go | 16 +- .../providers/wangsu-cdnpro/wangsu_cdnpro.go | 29 +- .../wangsu-cdnpro/wangsu_cdnpro_test.go | 24 +- .../wangsu-certificate/wangsu_certificate.go | 55 ++- .../wangsu_certificate_test.go | 16 +- .../providers/webhook/webhook.go | 24 +- .../providers/webhook/webhook_test.go | 16 +- .../providers/1panel-ssl/1panel_ssl.go | 56 +-- .../providers/1panel-ssl/1panel_ssl_test.go | 18 +- .../providers/aliyun-cas/aliyun_cas.go | 58 +-- .../providers/aliyun-slb/aliyun_slb.go | 60 ++- .../providers/aws-acm/aws_acm.go | 48 +-- .../providers/aws-iam/aws_iam.go | 58 +-- .../azure-keyvault/azure_keyvault.go | 48 +-- .../azure-keyvault/azure_keyvault_test.go | 22 +- .../baiducloud-cert/baiducloud_cert.go | 50 +-- .../baiducloud-cert/baiducloud_cert_test.go | 16 +- .../providers/byteplus-cdn/byteplus_cdn.go | 46 +-- .../providers/ctcccloud-ao/ctcccloud_ao.go | 50 +-- .../ctcccloud-ao/ctcccloud_ao_test.go | 16 +- .../providers/ctcccloud-cdn/ctcccloud_cdn.go | 50 +-- .../ctcccloud-cdn/ctcccloud_cdn_test.go | 16 +- .../providers/ctcccloud-cms/ctcccloud_cms.go | 53 ++- .../ctcccloud-cms/ctcccloud_cms_test.go | 16 +- .../providers/ctcccloud-elb/ctcccloud_elb.go | 50 +-- .../ctcccloud-elb/ctcccloud_elb_test.go | 18 +- .../ctcccloud-icdn/ctcccloud_icdn.go | 50 +-- .../ctcccloud-icdn/ctcccloud_icdn_test.go | 16 +- .../ctcccloud-lvdn/ctcccloud_lvdn.go | 50 +-- .../ctcccloud-lvdn/ctcccloud_lvdn_test.go | 16 +- .../providers/dogecloud/dogecloud.go | 79 ++++ .../providers/gcore-cdn/gcore_cdn.go | 49 +-- .../huaweicloud-elb/huaweicloud_elb.go | 58 ++- .../huaweicloud-scm/huaweicloud_scm.go | 60 ++- .../huaweicloud-waf/huaweicloud_waf.go | 62 ++- .../providers/jdcloud-ssl/jdcloud_ssl.go | 46 +-- .../providers/jdcloud-ssl/jdcloud_ssl_test.go | 16 +- .../providers/qiniu-sslcert/qiniu_sslcert.go | 43 +- .../rainyun-sslcenter/rainyun_sslcenter.go | 51 ++- .../rainyun_sslcenter_test.go | 14 +- .../tencentcloud-ssl/tencentcloud_ssl.go | 39 +- .../providers/ucloud-ussl/ucloud_ussl.go | 75 ++-- .../providers/ucloud-ussl/ucloud_ussl_test.go | 16 +- .../providers/upyun-ssl/upyun_ssl.go | 72 ++++ .../providers/upyun-ssl/upyun_ssl_test.go | 16 +- .../volcengine-cdn/volcengine_cdn.go | 46 +-- .../volcengine_certcenter.go | 49 ++- .../volcengine_certcenter_test.go | 16 +- .../volcengine-live/volcengine_live.go | 50 ++- .../wangsu-certificate/wangsu_certificate.go | 53 ++- .../wangsu_certificate_test.go | 16 +- internal/pkg/core/ssl_applicator.go | 7 + internal/pkg/core/ssl_manager.go | 8 +- .../uploader/providers/dogecloud/dogecloud.go | 81 ---- .../uploader/providers/upyun-ssl/upyun_ssl.go | 72 ---- internal/pkg/core/uploader/uploader.go | 32 -- .../workflow/node-processor/deploy_node.go | 3 +- 346 files changed, 5051 insertions(+), 5086 deletions(-) delete mode 100644 internal/pkg/core/deployer/deployer.go delete mode 100644 internal/pkg/core/deployer/providers/aliyun-cas/aliyun_cas.go delete mode 100644 internal/pkg/core/deployer/providers/aws-iam/aws_iam.go delete mode 100644 internal/pkg/core/deployer/providers/baiducloud-cert/baiducloud_cert.go delete mode 100644 internal/pkg/core/deployer/providers/ctcccloud-cms/ctcccloud_cms.go delete mode 100644 internal/pkg/core/deployer/providers/huaweicloud-scm/huaweicloud_scm.go delete mode 100644 internal/pkg/core/deployer/providers/tencentcloud-ssl/tencentcloud_ssl.go delete mode 100644 internal/pkg/core/deployer/providers/volcengine-certcenter/volcengine_certcenter.go delete mode 100644 internal/pkg/core/notifier/notifier.go rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/acmehttpreq/acmehttpreq.go (79%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/aliyun-esa/aliyun_esa.go (72%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/aliyun-esa/internal/lego.go (100%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/aliyun/aliyun.go (78%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/aws-route53/aws-route53.go (81%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/azure-dns/azure-dns.go (84%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/baiducloud/baiducloud.go (70%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/baiducloud/internal/lego.go (100%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/bunny/bunny.go (75%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/cloudflare/cloudflare.go (78%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/cloudns/cloudns.go (78%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/cmcccloud/cmcccloud.go (70%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/cmcccloud/internal/lego.go (100%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/constellix/constellix.go (78%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/ctcccloud/ctcccloud.go (70%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/ctcccloud/internal/lego.go (100%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/desec/desec.go (75%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/digitalocean/digitalocean.go (76%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/dnsla/dnsla.go (69%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/dnsla/internal/lego.go (100%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/duckdns/duckdns.go (72%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/dynv6/dnsla.go (67%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/dynv6/internal/lego.go (100%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/gcore/gcore.go (75%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/gname/gname.go (69%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/gname/internal/lego.go (100%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/godaddy/godaddy.go (78%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/hetzner/hetzner.go (76%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/huaweicloud/huaweicloud.go (82%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/jdcloud/internal/lego.go (100%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/jdcloud/jdcloud.go (76%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/namecheap/namecheap.go (78%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/namedotcom/namedotcom.go (78%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/namesilo/namesilo.go (76%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/netcup/netcup.go (79%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/netlify/netlify.go (76%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/ns1/ns1.go (75%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/porkbun/porkbun.go (78%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/powerdns/powerdns.go (83%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/rainyun/rainyun.go (75%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/tencentcloud-eo/internal/lego.go (100%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/tencentcloud-eo/tencentcloud_eo.go (71%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/tencentcloud/tencentcloud.go (78%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/ucloud-udnr/internal/lego.go (100%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/ucloud-udnr/ucloud_udnr.go (77%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/vercel/vercel.go (78%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/volcengine/volcengine.go (78%) rename internal/pkg/core/{applicator/acme-dns01/lego-providers => ssl-applicator/acme-dns01/providers}/westcn/westcn.go (78%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/1panel-console/1panel_console.go (77%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/1panel-console/1panel_console_test.go (72%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/1panel-site/1panel_site.go (82%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/1panel-site/1panel_site_test.go (72%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/1panel-site/consts.go (100%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-alb/aliyun_alb.go (88%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-alb/aliyun_alb_test.go (77%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-alb/consts.go (100%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-apigw/aliyun_apigw.go (80%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-apigw/aliyun_apigw_test.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-apigw/consts.go (100%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-cas-deploy/aliyun_cas_deploy.go (75%) create mode 100644 internal/pkg/core/ssl-deployer/providers/aliyun-cas/aliyun_cas.go rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-cdn/aliyun_cdn.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-cdn/aliyun_cdn_test.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-clb/aliyun_clb.go (83%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-clb/aliyun_clb_test.go (77%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-clb/consts.go (100%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-dcdn/aliyun_dcdn.go (70%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-dcdn/aliyun_dcdn_test.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-ddos/aliyun_ddos.go (62%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-ddos/aliyun_ddos_test.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-esa/aliyun_esa.go (61%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-esa/aliyun_esa_test.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-fc/aliyun_fc.go (80%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-fc/aliyun_fc_test.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-ga/aliyun_ga.go (83%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-ga/aliyun_ga_test.go (77%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-ga/consts.go (100%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-live/aliyun_live.go (73%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-live/aliyun_live_test.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-nlb/aliyun_nlb.go (77%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-nlb/aliyun_nlb_test.go (77%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-nlb/consts.go (100%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-oss/aliyun_oss.go (73%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-oss/aliyun_oss_test.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-vod/aliyun_vod.go (70%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-vod/aliyun_vod_test.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-waf/aliyun_waf.go (86%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aliyun-waf/aliyun_waf_test.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/apisix/apisix.go (72%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/apisix/apisix_test.go (73%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/apisix/consts.go (100%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aws-acm/aws_acm.go (64%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aws-cloudfront/aws_cloudfront.go (73%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/aws-cloudfront/aws_cloudfront_test.go (70%) create mode 100644 internal/pkg/core/ssl-deployer/providers/aws-iam/aws_iam.go rename internal/pkg/core/{deployer => ssl-deployer}/providers/azure-keyvault/azure_keyvault.go (76%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/baiducloud-appblb/baiducloud_appblb.go (82%) rename internal/pkg/core/{deployer/providers/baiducloud-blb/baiducloud_blb_test.go => ssl-deployer/providers/baiducloud-appblb/baiducloud_appblb_test.go} (67%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/baiducloud-appblb/consts.go (100%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/baiducloud-blb/baiducloud_blb.go (82%) rename internal/pkg/core/{deployer/providers/baiducloud-appblb/baiducloud_appblb_test.go => ssl-deployer/providers/baiducloud-blb/baiducloud_blb_test.go} (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/baiducloud-blb/consts.go (100%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/baiducloud-cdn/baiducloud_cdn.go (59%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/baiducloud-cdn/baiducloud_cdn_test.go (70%) create mode 100644 internal/pkg/core/ssl-deployer/providers/baiducloud-cert/baiducloud_cert.go rename internal/pkg/core/{deployer => ssl-deployer}/providers/baishan-cdn/baishan_cdn.go (84%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/baishan-cdn/baishan_cdn_test.go (70%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/baotapanel-console/baotapanel_console.go (69%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/baotapanel-console/baotapanel_console_test.go (70%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/baotapanel-site/baotapanel_site.go (79%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/baotapanel-site/baotapanel_site_test.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/baotawaf-console/baotawaf_console.go (63%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/baotawaf-console/baotawaf_console_test.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/baotawaf-site/baotawaf_site.go (79%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/baotawaf-site/baotawaf_site_test.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/bunny-cdn/bunny_cdn.go (59%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/bunny-cdn/bunny_cdn_test.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/byteplus-cdn/byteplus_cdn.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/byteplus-cdn/byteplus_cdn_test.go (70%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/cachefly/cachefly.go (59%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/cachefly/cachefly_test.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/cdnfly/cdnfly.go (82%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/cdnfly/cdnfly_test.go (73%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/cdnfly/consts.go (100%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/ctcccloud-ao/ctcccloud_ao.go (64%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/ctcccloud-ao/ctcccloud_ao_test.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/ctcccloud-cdn/ctcccloud_cdn.go (62%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/ctcccloud-cdn/ctcccloud_cdn_test.go (70%) create mode 100644 internal/pkg/core/ssl-deployer/providers/ctcccloud-cms/ctcccloud_cms.go rename internal/pkg/core/{deployer => ssl-deployer}/providers/ctcccloud-cms/ctcccloud_cms_test.go (70%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/ctcccloud-elb/consts.go (100%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/ctcccloud-elb/ctcccloud_elb.go (72%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/ctcccloud-elb/ctcccloud_elb_test.go (76%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/ctcccloud-icdn/ctcccloud_icdn.go (62%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/ctcccloud-icdn/ctcccloud_icdn_test.go (70%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/ctcccloud-lvdn/ctcccloud_lvdn.go (63%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/ctcccloud-lvdn/ctcccloud_lvdn_test.go (70%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/dogecloud-cdn/dogecloud_cdn.go (51%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/dogecloud-cdn/dogecloud_cdn_test.go (70%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/edgio-applications/edgio_applications.go (66%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/edgio-applications/edgio_applications_test.go (69%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/flexcdn/consts.go (100%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/flexcdn/flexcdn.go (76%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/flexcdn/flexcdn_test.go (73%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/gcore-cdn/gcore_cdn.go (76%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/gcore-cdn/gcore_cdn_test.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/goedge/consts.go (100%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/goedge/goedge.go (76%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/goedge/goedge_test.go (73%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/huaweicloud-cdn/huaweicloud_cdn.go (78%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/huaweicloud-cdn/huaweicloud_cdn_test.go (70%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/huaweicloud-elb/consts.go (100%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/huaweicloud-elb/huaweicloud_elb.go (85%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/huaweicloud-elb/huaweicloud_elb_test.go (78%) create mode 100644 internal/pkg/core/ssl-deployer/providers/huaweicloud-scm/huaweicloud_scm.go rename internal/pkg/core/{deployer => ssl-deployer}/providers/huaweicloud-waf/consts.go (100%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/huaweicloud-waf/huaweicloud_waf.go (84%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/huaweicloud-waf/huaweicloud_waf_test.go (70%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/jdcloud-alb/consts.go (100%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/jdcloud-alb/jdcloud_alb.go (81%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/jdcloud-alb/jdcloud_alb_test.go (76%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/jdcloud-cdn/jdcloud_cdn.go (61%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/jdcloud-cdn/jdcloud_cdn_test.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/jdcloud-live/jdcloud_live.go (64%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/jdcloud-live/jdcloud_live_test.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/jdcloud-vod/jdcloud_vod.go (79%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/jdcloud-vod/jdcloud_vod_test.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/k8s-secret/k8s_secret.go (87%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/k8s-secret/k8s_secret_test.go (73%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/lecdn/consts.go (100%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/lecdn/lecdn.go (81%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/lecdn/lecdn_test.go (76%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/local/defines.go (100%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/local/local.go (89%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/local/local_test.go (80%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/netlify-site/netlify_site.go (67%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/netlify-site/netlify_site_test.go (70%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/proxmoxve/proxmoxve.go (75%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/proxmoxve/proxmoxve_test.go (72%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/qiniu-cdn/qiniu_cdn.go (66%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/qiniu-cdn/qiniu_cdn_test.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/qiniu-pili/qiniu_pili.go (51%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/qiniu-pili/qiniu_pili_test.go (70%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/rainyun-rcdn/rainyun_rcdn.go (50%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/rainyun-rcdn/rainyun_rcdn_test.go (70%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/ratpanel-console/ratpanel_console.go (64%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/ratpanel-console/ratpanel_console_test.go (70%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/ratpanel-site/ratpanel_site.go (67%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/ratpanel-site/ratpanel_site_test.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/safeline/consts.go (100%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/safeline/safeline.go (67%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/safeline/safeline_test.go (73%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/ssh/defines.go (100%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/ssh/ssh.go (95%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/ssh/ssh_test.go (73%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/tencentcloud-cdn/tencentcloud_cdn.go (80%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/tencentcloud-cdn/tencentcloud_cdn_test.go (69%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/tencentcloud-clb/consts.go (100%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/tencentcloud-clb/tencentcloud_clb.go (85%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/tencentcloud-clb/tencentcloud_clb_test.go (82%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/tencentcloud-cos/tencentcloud_cos.go (76%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/tencentcloud-cos/tencentcloud_cos_test.go (69%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/tencentcloud-css/tencentcloud_css.go (57%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/tencentcloud-css/tencentcloud_css_test.go (69%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/tencentcloud-ecdn/tencentcloud_ecdn.go (78%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/tencentcloud-ecdn/tencentcloud_ecdn_test.go (69%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/tencentcloud-eo/tencentcloud_eo.go (61%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/tencentcloud-eo/tencentcloud_eo_test.go (69%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/tencentcloud-gaap/consts.go (100%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/tencentcloud-gaap/tencentcloud_gaap.go (69%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/tencentcloud-gaap/tencentcloud_gaap_test.go (70%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/tencentcloud-scf/tencentcloud_scf.go (62%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/tencentcloud-scf/tencentcloud_scf_test.go (69%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/tencentcloud-ssl-deploy/tencentcloud_ssl_deploy.go (76%) create mode 100644 internal/pkg/core/ssl-deployer/providers/tencentcloud-ssl/tencentcloud_ssl.go rename internal/pkg/core/{deployer => ssl-deployer}/providers/tencentcloud-vod/tencentcloud_vod.go (58%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/tencentcloud-vod/tencentcloud_vod_test.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/tencentcloud-waf/tencentcloud_waf.go (70%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/tencentcloud-waf/tencentcloud_waf_test.go (69%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/ucloud-ucdn/ucloud_ucdn.go (69%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/ucloud-ucdn/ucloud_ucdn_test.go (70%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/ucloud-us3/ucloud_us3.go (58%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/ucloud-us3/ucloud_us3_test.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/unicloud-webhost/unicloud_webhost.go (68%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/unicloud-webhost/unicloud_webhost_test.go (70%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/upyun-cdn/upyun_cdn.go (65%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/upyun-cdn/upyun_cdn_test.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/volcengine-alb/consts.go (100%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/volcengine-alb/volcengine_alb.go (81%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/volcengine-alb/volcengine_alb_test.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/volcengine-cdn/volcengine_cdn.go (70%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/volcengine-cdn/volcengine_cdn_test.go (70%) create mode 100644 internal/pkg/core/ssl-deployer/providers/volcengine-certcenter/volcengine_certcenter.go rename internal/pkg/core/{deployer => ssl-deployer}/providers/volcengine-clb/consts.go (100%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/volcengine-clb/volcengine_clb.go (75%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/volcengine-clb/volcengine_clb_test.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/volcengine-dcdn/volcengine_dcdn.go (58%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/volcengine-dcdn/volcengine_dcdn_test.go (70%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/volcengine-imagex/volcengine_imagex.go (72%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/volcengine-imagex/volcengine_imagex_test.go (69%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/volcengine-live/volcengine_live.go (72%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/volcengine-live/volcengine_live_test.go (70%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/volcengine-tos/volcengine_tos.go (60%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/volcengine-tos/volcengine_tos_test.go (70%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/wangsu-cdn/wangsu_cdn.go (56%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/wangsu-cdn/wangsu_cdn_test.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/wangsu-cdnpro/wangsu_cdnpro.go (91%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/wangsu-cdnpro/wangsu_cdnpro_test.go (71%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/wangsu-certificate/wangsu_certificate.go (58%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/wangsu-certificate/wangsu_certificate_test.go (69%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/webhook/webhook.go (89%) rename internal/pkg/core/{deployer => ssl-deployer}/providers/webhook/webhook_test.go (71%) rename internal/pkg/core/{uploader => ssl-manager}/providers/1panel-ssl/1panel_ssl.go (76%) rename internal/pkg/core/{uploader => ssl-manager}/providers/1panel-ssl/1panel_ssl_test.go (67%) rename internal/pkg/core/{uploader => ssl-manager}/providers/aliyun-cas/aliyun_cas.go (77%) rename internal/pkg/core/{uploader => ssl-manager}/providers/aliyun-slb/aliyun_slb.go (71%) rename internal/pkg/core/{uploader => ssl-manager}/providers/aws-acm/aws_acm.go (75%) rename internal/pkg/core/{uploader => ssl-manager}/providers/aws-iam/aws_iam.go (74%) rename internal/pkg/core/{uploader => ssl-manager}/providers/azure-keyvault/azure_keyvault.go (80%) rename internal/pkg/core/{uploader => ssl-manager}/providers/azure-keyvault/azure_keyvault_test.go (66%) rename internal/pkg/core/{uploader => ssl-manager}/providers/baiducloud-cert/baiducloud_cert.go (68%) rename internal/pkg/core/{uploader => ssl-manager}/providers/baiducloud-cert/baiducloud_cert_test.go (66%) rename internal/pkg/core/{uploader => ssl-manager}/providers/byteplus-cdn/byteplus_cdn.go (71%) rename internal/pkg/core/{uploader => ssl-manager}/providers/ctcccloud-ao/ctcccloud_ao.go (73%) rename internal/pkg/core/{uploader => ssl-manager}/providers/ctcccloud-ao/ctcccloud_ao_test.go (66%) rename internal/pkg/core/{uploader => ssl-manager}/providers/ctcccloud-cdn/ctcccloud_cdn.go (74%) rename internal/pkg/core/{uploader => ssl-manager}/providers/ctcccloud-cdn/ctcccloud_cdn_test.go (66%) rename internal/pkg/core/{uploader => ssl-manager}/providers/ctcccloud-cms/ctcccloud_cms.go (73%) rename internal/pkg/core/{uploader => ssl-manager}/providers/ctcccloud-cms/ctcccloud_cms_test.go (66%) rename internal/pkg/core/{uploader => ssl-manager}/providers/ctcccloud-elb/ctcccloud_elb.go (67%) rename internal/pkg/core/{uploader => ssl-manager}/providers/ctcccloud-elb/ctcccloud_elb_test.go (67%) rename internal/pkg/core/{uploader => ssl-manager}/providers/ctcccloud-icdn/ctcccloud_icdn.go (74%) rename internal/pkg/core/{uploader => ssl-manager}/providers/ctcccloud-icdn/ctcccloud_icdn_test.go (66%) rename internal/pkg/core/{uploader => ssl-manager}/providers/ctcccloud-lvdn/ctcccloud_lvdn.go (74%) rename internal/pkg/core/{uploader => ssl-manager}/providers/ctcccloud-lvdn/ctcccloud_lvdn_test.go (66%) create mode 100644 internal/pkg/core/ssl-manager/providers/dogecloud/dogecloud.go rename internal/pkg/core/{uploader => ssl-manager}/providers/gcore-cdn/gcore_cdn.go (50%) rename internal/pkg/core/{uploader => ssl-manager}/providers/huaweicloud-elb/huaweicloud_elb.go (77%) rename internal/pkg/core/{uploader => ssl-manager}/providers/huaweicloud-scm/huaweicloud_scm.go (73%) rename internal/pkg/core/{uploader => ssl-manager}/providers/huaweicloud-waf/huaweicloud_waf.go (76%) rename internal/pkg/core/{uploader => ssl-manager}/providers/jdcloud-ssl/jdcloud_ssl.go (74%) rename internal/pkg/core/{uploader => ssl-manager}/providers/jdcloud-ssl/jdcloud_ssl_test.go (67%) rename internal/pkg/core/{uploader => ssl-manager}/providers/qiniu-sslcert/qiniu_sslcert.go (55%) rename internal/pkg/core/{uploader => ssl-manager}/providers/rainyun-sslcenter/rainyun_sslcenter.go (69%) rename internal/pkg/core/{uploader => ssl-manager}/providers/rainyun-sslcenter/rainyun_sslcenter_test.go (65%) rename internal/pkg/core/{uploader => ssl-manager}/providers/tencentcloud-ssl/tencentcloud_ssl.go (59%) rename internal/pkg/core/{uploader => ssl-manager}/providers/ucloud-ussl/ucloud_ussl.go (75%) rename internal/pkg/core/{uploader => ssl-manager}/providers/ucloud-ussl/ucloud_ussl_test.go (66%) create mode 100644 internal/pkg/core/ssl-manager/providers/upyun-ssl/upyun_ssl.go rename internal/pkg/core/{uploader => ssl-manager}/providers/upyun-ssl/upyun_ssl_test.go (67%) rename internal/pkg/core/{uploader => ssl-manager}/providers/volcengine-cdn/volcengine_cdn.go (71%) rename internal/pkg/core/{uploader => ssl-manager}/providers/volcengine-certcenter/volcengine_certcenter.go (59%) rename internal/pkg/core/{uploader => ssl-manager}/providers/volcengine-certcenter/volcengine_certcenter_test.go (65%) rename internal/pkg/core/{uploader => ssl-manager}/providers/volcengine-live/volcengine_live.go (69%) rename internal/pkg/core/{uploader => ssl-manager}/providers/wangsu-certificate/wangsu_certificate.go (69%) rename internal/pkg/core/{uploader => ssl-manager}/providers/wangsu-certificate/wangsu_certificate_test.go (65%) create mode 100644 internal/pkg/core/ssl_applicator.go delete mode 100644 internal/pkg/core/uploader/providers/dogecloud/dogecloud.go delete mode 100644 internal/pkg/core/uploader/providers/upyun-ssl/upyun_ssl.go delete mode 100644 internal/pkg/core/uploader/uploader.go diff --git a/internal/applicant/providers.go b/internal/applicant/providers.go index 61b2035a..72d57f87 100644 --- a/internal/applicant/providers.go +++ b/internal/applicant/providers.go @@ -6,44 +6,44 @@ import ( "github.com/go-acme/lego/v4/challenge" "github.com/usual2970/certimate/internal/domain" - pACMEHttpReq "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/acmehttpreq" - pAliyun "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/aliyun" - pAliyunESA "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/aliyun-esa" - pAWSRoute53 "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/aws-route53" - pAzureDNS "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/azure-dns" - pBaiduCloud "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/baiducloud" - pBunny "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/bunny" - pCloudflare "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/cloudflare" - pClouDNS "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/cloudns" - pCMCCCloud "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/cmcccloud" - pConstellix "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/constellix" - pCTCCCloud "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/ctcccloud" - pDeSEC "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/desec" - pDigitalOcean "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/digitalocean" - pDNSLA "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/dnsla" - pDuckDNS "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/duckdns" - pDynv6 "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/dynv6" - pGcore "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/gcore" - pGname "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/gname" - pGoDaddy "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/godaddy" - pHetzner "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/hetzner" - pHuaweiCloud "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/huaweicloud" - pJDCloud "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/jdcloud" - pNamecheap "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/namecheap" - pNameDotCom "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/namedotcom" - pNameSilo "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/namesilo" - pNetcup "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/netcup" - pNetlify "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/netlify" - pNS1 "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/ns1" - pPorkbun "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/porkbun" - pPowerDNS "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/powerdns" - pRainYun "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/rainyun" - pTencentCloud "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/tencentcloud" - pTencentCloudEO "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/tencentcloud-eo" - pUCloudUDNR "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/ucloud-udnr" - pVercel "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/vercel" - pVolcEngine "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/volcengine" - pWestcn "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/westcn" + pACMEHttpReq "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/acmehttpreq" + pAliyun "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/aliyun" + pAliyunESA "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/aliyun-esa" + pAWSRoute53 "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/aws-route53" + pAzureDNS "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/azure-dns" + pBaiduCloud "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/baiducloud" + pBunny "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/bunny" + pCloudflare "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/cloudflare" + pClouDNS "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/cloudns" + pCMCCCloud "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/cmcccloud" + pConstellix "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/constellix" + pCTCCCloud "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/ctcccloud" + pDeSEC "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/desec" + pDigitalOcean "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/digitalocean" + pDNSLA "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/dnsla" + pDuckDNS "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/duckdns" + pDynv6 "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/dynv6" + pGcore "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/gcore" + pGname "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/gname" + pGoDaddy "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/godaddy" + pHetzner "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/hetzner" + pHuaweiCloud "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/huaweicloud" + pJDCloud "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/jdcloud" + pNamecheap "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/namecheap" + pNameDotCom "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/namedotcom" + pNameSilo "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/namesilo" + pNetcup "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/netcup" + pNetlify "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/netlify" + pNS1 "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/ns1" + pPorkbun "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/porkbun" + pPowerDNS "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/powerdns" + pRainYun "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/rainyun" + pTencentCloud "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/tencentcloud" + pTencentCloudEO "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/tencentcloud-eo" + pUCloudUDNR "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/ucloud-udnr" + pVercel "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/vercel" + pVolcEngine "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/volcengine" + pWestcn "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/westcn" xmaps "github.com/usual2970/certimate/internal/pkg/utils/maps" ) diff --git a/internal/deployer/deployer.go b/internal/deployer/deployer.go index c73120ba..e1f2ce18 100644 --- a/internal/deployer/deployer.go +++ b/internal/deployer/deployer.go @@ -6,7 +6,7 @@ import ( "log/slog" "github.com/usual2970/certimate/internal/domain" - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" "github.com/usual2970/certimate/internal/repository" ) @@ -46,20 +46,22 @@ func NewWithWorkflowNode(config DeployerWithWorkflowNodeConfig) (Deployer, error } } - deployerProvider, err := createDeployerProvider(options) + deployer, err := createSSLDeployerProvider(options) if err != nil { return nil, err + } else { + deployer.SetLogger(config.Logger) } return &deployerImpl{ - provider: deployerProvider.WithLogger(config.Logger), + provider: deployer, certPEM: config.CertificatePEM, privkeyPEM: config.PrivateKeyPEM, }, nil } type deployerImpl struct { - provider deployer.Deployer + provider core.SSLDeployer certPEM string privkeyPEM string } diff --git a/internal/deployer/providers.go b/internal/deployer/providers.go index 16cccee2..db1b825e 100644 --- a/internal/deployer/providers.go +++ b/internal/deployer/providers.go @@ -6,102 +6,102 @@ import ( "strings" "github.com/usual2970/certimate/internal/domain" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - p1PanelConsole "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/1panel-console" - p1PanelSite "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/1panel-site" - pAliyunALB "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-alb" - pAliyunAPIGW "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-apigw" - pAliyunCAS "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-cas" - pAliyunCASDeploy "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-cas-deploy" - pAliyunCDN "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-cdn" - pAliyunCLB "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-clb" - pAliyunDCDN "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-dcdn" - pAliyunDDoS "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-ddos" - pAliyunESA "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-esa" - pAliyunFC "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-fc" - pAliyunGA "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-ga" - pAliyunLive "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-live" - pAliyunNLB "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-nlb" - pAliyunOSS "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-oss" - pAliyunVOD "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-vod" - pAliyunWAF "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-waf" - pAPISIX "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/apisix" - pAWSACM "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aws-acm" - pAWSCloudFront "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aws-cloudfront" - pAWSIAM "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aws-iam" - pAzureKeyVault "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/azure-keyvault" - pBaiduCloudAppBLB "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/baiducloud-appblb" - pBaiduCloudBLB "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/baiducloud-blb" - pBaiduCloudCDN "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/baiducloud-cdn" - pBaiduCloudCert "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/baiducloud-cert" - pBaishanCDN "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/baishan-cdn" - pBaotaPanelConsole "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/baotapanel-console" - pBaotaPanelSite "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/baotapanel-site" - pBaotaWAFConsole "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/baotawaf-console" - pBaotaWAFSite "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/baotawaf-site" - pBunnyCDN "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/bunny-cdn" - pBytePlusCDN "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/byteplus-cdn" - pCacheFly "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/cachefly" - pCdnfly "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/cdnfly" - pCTCCCloudAO "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/ctcccloud-ao" - pCTCCCloudCDN "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/ctcccloud-cdn" - pCTCCCloudCMS "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/ctcccloud-cms" - pCTCCCloudELB "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/ctcccloud-elb" - pCTCCCloudICDN "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/ctcccloud-icdn" - pCTCCCloudLVDN "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/ctcccloud-lvdn" - pDogeCDN "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/dogecloud-cdn" - pEdgioApplications "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/edgio-applications" - pFlexCDN "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/flexcdn" - pGcoreCDN "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/gcore-cdn" - pGoEdge "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/goedge" - pHuaweiCloudCDN "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/huaweicloud-cdn" - pHuaweiCloudELB "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/huaweicloud-elb" - pHuaweiCloudSCM "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/huaweicloud-scm" - pHuaweiCloudWAF "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/huaweicloud-waf" - pJDCloudALB "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/jdcloud-alb" - pJDCloudCDN "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/jdcloud-cdn" - pJDCloudLive "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/jdcloud-live" - pJDCloudVOD "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/jdcloud-vod" - pK8sSecret "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/k8s-secret" - pLeCDN "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/lecdn" - pLocal "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/local" - pNetlifySite "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/netlify-site" - pProxmoxVE "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/proxmoxve" - pQiniuCDN "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/qiniu-cdn" - pQiniuPili "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/qiniu-pili" - pRainYunRCDN "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/rainyun-rcdn" - pRatPanelConsole "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/ratpanel-console" - pRatPanelSite "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/ratpanel-site" - pSafeLine "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/safeline" - pSSH "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/ssh" - pTencentCloudCDN "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/tencentcloud-cdn" - pTencentCloudCLB "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/tencentcloud-clb" - pTencentCloudCOS "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/tencentcloud-cos" - pTencentCloudCSS "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/tencentcloud-css" - pTencentCloudECDN "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/tencentcloud-ecdn" - pTencentCloudEO "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/tencentcloud-eo" - pTencentCloudGAAP "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/tencentcloud-gaap" - pTencentCloudSCF "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/tencentcloud-scf" - pTencentCloudSSL "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/tencentcloud-ssl" - pTencentCloudSSLDeploy "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/tencentcloud-ssl-deploy" - pTencentCloudVOD "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/tencentcloud-vod" - pTencentCloudWAF "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/tencentcloud-waf" - pUCloudUCDN "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/ucloud-ucdn" - pUCloudUS3 "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/ucloud-us3" - pUniCloudWebHost "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/unicloud-webhost" - pUpyunCDN "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/upyun-cdn" - pVolcEngineALB "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/volcengine-alb" - pVolcEngineCDN "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/volcengine-cdn" - pVolcEngineCertCenter "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/volcengine-certcenter" - pVolcEngineCLB "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/volcengine-clb" - pVolcEngineDCDN "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/volcengine-dcdn" - pVolcEngineImageX "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/volcengine-imagex" - pVolcEngineLive "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/volcengine-live" - pVolcEngineTOS "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/volcengine-tos" - pWangsuCDN "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/wangsu-cdn" - pWangsuCDNPro "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/wangsu-cdnpro" - pWangsuCertificate "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/wangsu-certificate" - pWebhook "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/webhook" + "github.com/usual2970/certimate/internal/pkg/core" + p1PanelConsole "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/1panel-console" + p1PanelSite "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/1panel-site" + pAliyunALB "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aliyun-alb" + pAliyunAPIGW "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aliyun-apigw" + pAliyunCAS "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aliyun-cas" + pAliyunCASDeploy "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aliyun-cas-deploy" + pAliyunCDN "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aliyun-cdn" + pAliyunCLB "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aliyun-clb" + pAliyunDCDN "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aliyun-dcdn" + pAliyunDDoS "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aliyun-ddos" + pAliyunESA "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aliyun-esa" + pAliyunFC "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aliyun-fc" + pAliyunGA "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aliyun-ga" + pAliyunLive "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aliyun-live" + pAliyunNLB "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aliyun-nlb" + pAliyunOSS "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aliyun-oss" + pAliyunVOD "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aliyun-vod" + pAliyunWAF "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aliyun-waf" + pAPISIX "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/apisix" + pAWSACM "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aws-acm" + pAWSCloudFront "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aws-cloudfront" + pAWSIAM "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aws-iam" + pAzureKeyVault "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/azure-keyvault" + pBaiduCloudAppBLB "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/baiducloud-appblb" + pBaiduCloudBLB "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/baiducloud-blb" + pBaiduCloudCDN "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/baiducloud-cdn" + pBaiduCloudCert "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/baiducloud-cert" + pBaishanCDN "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/baishan-cdn" + pBaotaPanelConsole "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/baotapanel-console" + pBaotaPanelSite "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/baotapanel-site" + pBaotaWAFConsole "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/baotawaf-console" + pBaotaWAFSite "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/baotawaf-site" + pBunnyCDN "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/bunny-cdn" + pBytePlusCDN "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/byteplus-cdn" + pCacheFly "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/cachefly" + pCdnfly "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/cdnfly" + pCTCCCloudAO "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/ctcccloud-ao" + pCTCCCloudCDN "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/ctcccloud-cdn" + pCTCCCloudCMS "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/ctcccloud-cms" + pCTCCCloudELB "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/ctcccloud-elb" + pCTCCCloudICDN "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/ctcccloud-icdn" + pCTCCCloudLVDN "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/ctcccloud-lvdn" + pDogeCDN "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/dogecloud-cdn" + pEdgioApplications "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/edgio-applications" + pFlexCDN "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/flexcdn" + pGcoreCDN "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/gcore-cdn" + pGoEdge "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/goedge" + pHuaweiCloudCDN "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/huaweicloud-cdn" + pHuaweiCloudELB "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/huaweicloud-elb" + pHuaweiCloudSCM "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/huaweicloud-scm" + pHuaweiCloudWAF "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/huaweicloud-waf" + pJDCloudALB "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/jdcloud-alb" + pJDCloudCDN "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/jdcloud-cdn" + pJDCloudLive "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/jdcloud-live" + pJDCloudVOD "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/jdcloud-vod" + pK8sSecret "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/k8s-secret" + pLeCDN "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/lecdn" + pLocal "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/local" + pNetlifySite "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/netlify-site" + pProxmoxVE "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/proxmoxve" + pQiniuCDN "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/qiniu-cdn" + pQiniuPili "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/qiniu-pili" + pRainYunRCDN "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/rainyun-rcdn" + pRatPanelConsole "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/ratpanel-console" + pRatPanelSite "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/ratpanel-site" + pSafeLine "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/safeline" + pSSH "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/ssh" + pTencentCloudCDN "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/tencentcloud-cdn" + pTencentCloudCLB "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/tencentcloud-clb" + pTencentCloudCOS "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/tencentcloud-cos" + pTencentCloudCSS "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/tencentcloud-css" + pTencentCloudECDN "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/tencentcloud-ecdn" + pTencentCloudEO "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/tencentcloud-eo" + pTencentCloudGAAP "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/tencentcloud-gaap" + pTencentCloudSCF "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/tencentcloud-scf" + pTencentCloudSSL "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/tencentcloud-ssl" + pTencentCloudSSLDeploy "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/tencentcloud-ssl-deploy" + pTencentCloudVOD "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/tencentcloud-vod" + pTencentCloudWAF "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/tencentcloud-waf" + pUCloudUCDN "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/ucloud-ucdn" + pUCloudUS3 "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/ucloud-us3" + pUniCloudWebHost "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/unicloud-webhost" + pUpyunCDN "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/upyun-cdn" + pVolcEngineALB "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/volcengine-alb" + pVolcEngineCDN "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/volcengine-cdn" + pVolcEngineCertCenter "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/volcengine-certcenter" + pVolcEngineCLB "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/volcengine-clb" + pVolcEngineDCDN "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/volcengine-dcdn" + pVolcEngineImageX "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/volcengine-imagex" + pVolcEngineLive "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/volcengine-live" + pVolcEngineTOS "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/volcengine-tos" + pWangsuCDN "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/wangsu-cdn" + pWangsuCDNPro "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/wangsu-cdnpro" + pWangsuCertificate "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/wangsu-certificate" + pWebhook "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/webhook" xhttp "github.com/usual2970/certimate/internal/pkg/utils/http" xmaps "github.com/usual2970/certimate/internal/pkg/utils/maps" xslices "github.com/usual2970/certimate/internal/pkg/utils/slices" @@ -113,7 +113,7 @@ type deployerProviderOptions struct { ProviderServiceConfig map[string]any } -func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer, error) { +func createSSLDeployerProvider(options *deployerProviderOptions) (core.SSLDeployer, error) { /* 注意:如果追加新的常量值,请保持以 ASCII 排序。 NOTICE: If you add new constant, please keep ASCII order. @@ -128,7 +128,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer switch options.Provider { case domain.DeploymentProviderType1PanelConsole: - deployer, err := p1PanelConsole.NewDeployer(&p1PanelConsole.DeployerConfig{ + deployer, err := p1PanelConsole.NewSSLDeployerProvider(&p1PanelConsole.SSLDeployerProviderConfig{ ServerUrl: access.ServerUrl, ApiVersion: access.ApiVersion, ApiKey: access.ApiKey, @@ -138,7 +138,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderType1PanelSite: - deployer, err := p1PanelSite.NewDeployer(&p1PanelSite.DeployerConfig{ + deployer, err := p1PanelSite.NewSSLDeployerProvider(&p1PanelSite.SSLDeployerProviderConfig{ ServerUrl: access.ServerUrl, ApiVersion: access.ApiVersion, ApiKey: access.ApiKey, @@ -163,7 +163,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer switch options.Provider { case domain.DeploymentProviderTypeAliyunALB: - deployer, err := pAliyunALB.NewDeployer(&pAliyunALB.DeployerConfig{ + deployer, err := pAliyunALB.NewSSLDeployerProvider(&pAliyunALB.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, ResourceGroupId: access.ResourceGroupId, @@ -176,7 +176,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeAliyunAPIGW: - deployer, err := pAliyunAPIGW.NewDeployer(&pAliyunAPIGW.DeployerConfig{ + deployer, err := pAliyunAPIGW.NewSSLDeployerProvider(&pAliyunAPIGW.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, ResourceGroupId: access.ResourceGroupId, @@ -189,7 +189,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeAliyunCAS: - deployer, err := pAliyunCAS.NewDeployer(&pAliyunCAS.DeployerConfig{ + deployer, err := pAliyunCAS.NewSSLDeployerProvider(&pAliyunCAS.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, ResourceGroupId: access.ResourceGroupId, @@ -198,7 +198,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeAliyunCASDeploy: - deployer, err := pAliyunCASDeploy.NewDeployer(&pAliyunCASDeploy.DeployerConfig{ + deployer, err := pAliyunCASDeploy.NewSSLDeployerProvider(&pAliyunCASDeploy.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, ResourceGroupId: access.ResourceGroupId, @@ -209,7 +209,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeAliyunCDN: - deployer, err := pAliyunCDN.NewDeployer(&pAliyunCDN.DeployerConfig{ + deployer, err := pAliyunCDN.NewSSLDeployerProvider(&pAliyunCDN.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, ResourceGroupId: access.ResourceGroupId, @@ -218,7 +218,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeAliyunCLB: - deployer, err := pAliyunCLB.NewDeployer(&pAliyunCLB.DeployerConfig{ + deployer, err := pAliyunCLB.NewSSLDeployerProvider(&pAliyunCLB.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, ResourceGroupId: access.ResourceGroupId, @@ -231,7 +231,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeAliyunDCDN: - deployer, err := pAliyunDCDN.NewDeployer(&pAliyunDCDN.DeployerConfig{ + deployer, err := pAliyunDCDN.NewSSLDeployerProvider(&pAliyunDCDN.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, ResourceGroupId: access.ResourceGroupId, @@ -240,7 +240,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeAliyunDDoS: - deployer, err := pAliyunDDoS.NewDeployer(&pAliyunDDoS.DeployerConfig{ + deployer, err := pAliyunDDoS.NewSSLDeployerProvider(&pAliyunDDoS.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, ResourceGroupId: access.ResourceGroupId, @@ -250,7 +250,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeAliyunESA: - deployer, err := pAliyunESA.NewDeployer(&pAliyunESA.DeployerConfig{ + deployer, err := pAliyunESA.NewSSLDeployerProvider(&pAliyunESA.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, Region: xmaps.GetString(options.ProviderServiceConfig, "region"), @@ -259,7 +259,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeAliyunFC: - deployer, err := pAliyunFC.NewDeployer(&pAliyunFC.DeployerConfig{ + deployer, err := pAliyunFC.NewSSLDeployerProvider(&pAliyunFC.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, ResourceGroupId: access.ResourceGroupId, @@ -270,7 +270,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeAliyunGA: - deployer, err := pAliyunGA.NewDeployer(&pAliyunGA.DeployerConfig{ + deployer, err := pAliyunGA.NewSSLDeployerProvider(&pAliyunGA.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, ResourceGroupId: access.ResourceGroupId, @@ -282,7 +282,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeAliyunLive: - deployer, err := pAliyunLive.NewDeployer(&pAliyunLive.DeployerConfig{ + deployer, err := pAliyunLive.NewSSLDeployerProvider(&pAliyunLive.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, Region: xmaps.GetString(options.ProviderServiceConfig, "region"), @@ -291,7 +291,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeAliyunNLB: - deployer, err := pAliyunNLB.NewDeployer(&pAliyunNLB.DeployerConfig{ + deployer, err := pAliyunNLB.NewSSLDeployerProvider(&pAliyunNLB.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, ResourceGroupId: access.ResourceGroupId, @@ -303,7 +303,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeAliyunOSS: - deployer, err := pAliyunOSS.NewDeployer(&pAliyunOSS.DeployerConfig{ + deployer, err := pAliyunOSS.NewSSLDeployerProvider(&pAliyunOSS.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, ResourceGroupId: access.ResourceGroupId, @@ -314,7 +314,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeAliyunVOD: - deployer, err := pAliyunVOD.NewDeployer(&pAliyunVOD.DeployerConfig{ + deployer, err := pAliyunVOD.NewSSLDeployerProvider(&pAliyunVOD.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, ResourceGroupId: access.ResourceGroupId, @@ -324,7 +324,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeAliyunWAF: - deployer, err := pAliyunWAF.NewDeployer(&pAliyunWAF.DeployerConfig{ + deployer, err := pAliyunWAF.NewSSLDeployerProvider(&pAliyunWAF.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, ResourceGroupId: access.ResourceGroupId, @@ -347,7 +347,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return nil, fmt.Errorf("failed to populate provider access config: %w", err) } - deployer, err := pAPISIX.NewDeployer(&pAPISIX.DeployerConfig{ + deployer, err := pAPISIX.NewSSLDeployerProvider(&pAPISIX.SSLDeployerProviderConfig{ ServerUrl: access.ServerUrl, ApiKey: access.ApiKey, AllowInsecureConnections: access.AllowInsecureConnections, @@ -366,7 +366,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer switch options.Provider { case domain.DeploymentProviderTypeAWSACM: - deployer, err := pAWSACM.NewDeployer(&pAWSACM.DeployerConfig{ + deployer, err := pAWSACM.NewSSLDeployerProvider(&pAWSACM.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, SecretAccessKey: access.SecretAccessKey, Region: xmaps.GetString(options.ProviderServiceConfig, "region"), @@ -375,7 +375,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeAWSCloudFront: - deployer, err := pAWSCloudFront.NewDeployer(&pAWSCloudFront.DeployerConfig{ + deployer, err := pAWSCloudFront.NewSSLDeployerProvider(&pAWSCloudFront.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, SecretAccessKey: access.SecretAccessKey, Region: xmaps.GetString(options.ProviderServiceConfig, "region"), @@ -385,7 +385,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeAWSIAM: - deployer, err := pAWSIAM.NewDeployer(&pAWSIAM.DeployerConfig{ + deployer, err := pAWSIAM.NewSSLDeployerProvider(&pAWSIAM.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, SecretAccessKey: access.SecretAccessKey, Region: xmaps.GetString(options.ProviderServiceConfig, "region"), @@ -407,7 +407,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer switch options.Provider { case domain.DeploymentProviderTypeAzureKeyVault: - deployer, err := pAzureKeyVault.NewDeployer(&pAzureKeyVault.DeployerConfig{ + deployer, err := pAzureKeyVault.NewSSLDeployerProvider(&pAzureKeyVault.SSLDeployerProviderConfig{ TenantId: access.TenantId, ClientId: access.ClientId, ClientSecret: access.ClientSecret, @@ -431,7 +431,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer switch options.Provider { case domain.DeploymentProviderTypeBaiduCloudAppBLB: - deployer, err := pBaiduCloudAppBLB.NewDeployer(&pBaiduCloudAppBLB.DeployerConfig{ + deployer, err := pBaiduCloudAppBLB.NewSSLDeployerProvider(&pBaiduCloudAppBLB.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, SecretAccessKey: access.SecretAccessKey, Region: xmaps.GetString(options.ProviderServiceConfig, "region"), @@ -443,7 +443,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeBaiduCloudBLB: - deployer, err := pBaiduCloudBLB.NewDeployer(&pBaiduCloudBLB.DeployerConfig{ + deployer, err := pBaiduCloudBLB.NewSSLDeployerProvider(&pBaiduCloudBLB.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, SecretAccessKey: access.SecretAccessKey, Region: xmaps.GetString(options.ProviderServiceConfig, "region"), @@ -455,7 +455,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeBaiduCloudCDN: - deployer, err := pBaiduCloudCDN.NewDeployer(&pBaiduCloudCDN.DeployerConfig{ + deployer, err := pBaiduCloudCDN.NewSSLDeployerProvider(&pBaiduCloudCDN.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, SecretAccessKey: access.SecretAccessKey, Domain: xmaps.GetString(options.ProviderServiceConfig, "domain"), @@ -463,7 +463,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeBaiduCloudCert: - deployer, err := pBaiduCloudCert.NewDeployer(&pBaiduCloudCert.DeployerConfig{ + deployer, err := pBaiduCloudCert.NewSSLDeployerProvider(&pBaiduCloudCert.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, SecretAccessKey: access.SecretAccessKey, }) @@ -483,7 +483,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer switch options.Provider { case domain.DeploymentProviderTypeBaishanCDN: - deployer, err := pBaishanCDN.NewDeployer(&pBaishanCDN.DeployerConfig{ + deployer, err := pBaishanCDN.NewSSLDeployerProvider(&pBaishanCDN.SSLDeployerProviderConfig{ ApiToken: access.ApiToken, Domain: xmaps.GetString(options.ProviderServiceConfig, "domain"), CertificateId: xmaps.GetString(options.ProviderServiceConfig, "certificateId"), @@ -504,7 +504,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer switch options.Provider { case domain.DeploymentProviderTypeBaotaPanelConsole: - deployer, err := pBaotaPanelConsole.NewDeployer(&pBaotaPanelConsole.DeployerConfig{ + deployer, err := pBaotaPanelConsole.NewSSLDeployerProvider(&pBaotaPanelConsole.SSLDeployerProviderConfig{ ServerUrl: access.ServerUrl, ApiKey: access.ApiKey, AllowInsecureConnections: access.AllowInsecureConnections, @@ -513,7 +513,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeBaotaPanelSite: - deployer, err := pBaotaPanelSite.NewDeployer(&pBaotaPanelSite.DeployerConfig{ + deployer, err := pBaotaPanelSite.NewSSLDeployerProvider(&pBaotaPanelSite.SSLDeployerProviderConfig{ ServerUrl: access.ServerUrl, ApiKey: access.ApiKey, AllowInsecureConnections: access.AllowInsecureConnections, @@ -537,7 +537,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer switch options.Provider { case domain.DeploymentProviderTypeBaotaWAFConsole: - deployer, err := pBaotaWAFConsole.NewDeployer(&pBaotaWAFConsole.DeployerConfig{ + deployer, err := pBaotaWAFConsole.NewSSLDeployerProvider(&pBaotaWAFConsole.SSLDeployerProviderConfig{ ServerUrl: access.ServerUrl, ApiKey: access.ApiKey, AllowInsecureConnections: access.AllowInsecureConnections, @@ -545,7 +545,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeBaotaWAFSite: - deployer, err := pBaotaWAFSite.NewDeployer(&pBaotaWAFSite.DeployerConfig{ + deployer, err := pBaotaWAFSite.NewSSLDeployerProvider(&pBaotaWAFSite.SSLDeployerProviderConfig{ ServerUrl: access.ServerUrl, ApiKey: access.ApiKey, AllowInsecureConnections: access.AllowInsecureConnections, @@ -566,7 +566,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return nil, fmt.Errorf("failed to populate provider access config: %w", err) } - deployer, err := pBunnyCDN.NewDeployer(&pBunnyCDN.DeployerConfig{ + deployer, err := pBunnyCDN.NewSSLDeployerProvider(&pBunnyCDN.SSLDeployerProviderConfig{ ApiKey: access.ApiKey, PullZoneId: xmaps.GetString(options.ProviderServiceConfig, "pullZoneId"), Hostname: xmaps.GetString(options.ProviderServiceConfig, "hostname"), @@ -583,7 +583,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer switch options.Provider { case domain.DeploymentProviderTypeBytePlusCDN: - deployer, err := pBytePlusCDN.NewDeployer(&pBytePlusCDN.DeployerConfig{ + deployer, err := pBytePlusCDN.NewSSLDeployerProvider(&pBytePlusCDN.SSLDeployerProviderConfig{ AccessKey: access.AccessKey, SecretKey: access.SecretKey, Domain: xmaps.GetString(options.ProviderServiceConfig, "domain"), @@ -602,7 +602,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return nil, fmt.Errorf("failed to populate provider access config: %w", err) } - deployer, err := pCacheFly.NewDeployer(&pCacheFly.DeployerConfig{ + deployer, err := pCacheFly.NewSSLDeployerProvider(&pCacheFly.SSLDeployerProviderConfig{ ApiToken: access.ApiToken, }) return deployer, err @@ -615,7 +615,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return nil, fmt.Errorf("failed to populate provider access config: %w", err) } - deployer, err := pCdnfly.NewDeployer(&pCdnfly.DeployerConfig{ + deployer, err := pCdnfly.NewSSLDeployerProvider(&pCdnfly.SSLDeployerProviderConfig{ ServerUrl: access.ServerUrl, ApiKey: access.ApiKey, ApiSecret: access.ApiSecret, @@ -636,7 +636,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer switch options.Provider { case domain.DeploymentProviderTypeCTCCCloudAO: - deployer, err := pCTCCCloudAO.NewDeployer(&pCTCCCloudAO.DeployerConfig{ + deployer, err := pCTCCCloudAO.NewSSLDeployerProvider(&pCTCCCloudAO.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, SecretAccessKey: access.SecretAccessKey, Domain: xmaps.GetString(options.ProviderServiceConfig, "domain"), @@ -644,7 +644,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeCTCCCloudCDN: - deployer, err := pCTCCCloudCDN.NewDeployer(&pCTCCCloudCDN.DeployerConfig{ + deployer, err := pCTCCCloudCDN.NewSSLDeployerProvider(&pCTCCCloudCDN.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, SecretAccessKey: access.SecretAccessKey, Domain: xmaps.GetString(options.ProviderServiceConfig, "domain"), @@ -652,14 +652,14 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeCTCCCloudCMS: - deployer, err := pCTCCCloudCMS.NewDeployer(&pCTCCCloudCMS.DeployerConfig{ + deployer, err := pCTCCCloudCMS.NewSSLDeployerProvider(&pCTCCCloudCMS.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, SecretAccessKey: access.SecretAccessKey, }) return deployer, err case domain.DeploymentProviderTypeCTCCCloudELB: - deployer, err := pCTCCCloudELB.NewDeployer(&pCTCCCloudELB.DeployerConfig{ + deployer, err := pCTCCCloudELB.NewSSLDeployerProvider(&pCTCCCloudELB.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, SecretAccessKey: access.SecretAccessKey, RegionId: xmaps.GetString(options.ProviderServiceConfig, "regionId"), @@ -670,7 +670,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeCTCCCloudICDN: - deployer, err := pCTCCCloudICDN.NewDeployer(&pCTCCCloudICDN.DeployerConfig{ + deployer, err := pCTCCCloudICDN.NewSSLDeployerProvider(&pCTCCCloudICDN.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, SecretAccessKey: access.SecretAccessKey, Domain: xmaps.GetString(options.ProviderServiceConfig, "domain"), @@ -678,7 +678,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeCTCCCloudLVDN: - deployer, err := pCTCCCloudLVDN.NewDeployer(&pCTCCCloudLVDN.DeployerConfig{ + deployer, err := pCTCCCloudLVDN.NewSSLDeployerProvider(&pCTCCCloudLVDN.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, SecretAccessKey: access.SecretAccessKey, Domain: xmaps.GetString(options.ProviderServiceConfig, "domain"), @@ -697,7 +697,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return nil, fmt.Errorf("failed to populate provider access config: %w", err) } - deployer, err := pDogeCDN.NewDeployer(&pDogeCDN.DeployerConfig{ + deployer, err := pDogeCDN.NewSSLDeployerProvider(&pDogeCDN.SSLDeployerProviderConfig{ AccessKey: access.AccessKey, SecretKey: access.SecretKey, Domain: xmaps.GetString(options.ProviderServiceConfig, "domain"), @@ -712,7 +712,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return nil, fmt.Errorf("failed to populate provider access config: %w", err) } - deployer, err := pEdgioApplications.NewDeployer(&pEdgioApplications.DeployerConfig{ + deployer, err := pEdgioApplications.NewSSLDeployerProvider(&pEdgioApplications.SSLDeployerProviderConfig{ ClientId: access.ClientId, ClientSecret: access.ClientSecret, EnvironmentId: xmaps.GetString(options.ProviderServiceConfig, "environmentId"), @@ -727,7 +727,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return nil, fmt.Errorf("failed to populate provider access config: %w", err) } - deployer, err := pFlexCDN.NewDeployer(&pFlexCDN.DeployerConfig{ + deployer, err := pFlexCDN.NewSSLDeployerProvider(&pFlexCDN.SSLDeployerProviderConfig{ ServerUrl: access.ServerUrl, ApiRole: access.ApiRole, AccessKeyId: access.AccessKeyId, @@ -748,7 +748,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer switch options.Provider { case domain.DeploymentProviderTypeGcoreCDN: - deployer, err := pGcoreCDN.NewDeployer(&pGcoreCDN.DeployerConfig{ + deployer, err := pGcoreCDN.NewSSLDeployerProvider(&pGcoreCDN.SSLDeployerProviderConfig{ ApiToken: access.ApiToken, ResourceId: xmaps.GetInt64(options.ProviderServiceConfig, "resourceId"), CertificateId: xmaps.GetInt64(options.ProviderServiceConfig, "certificateId"), @@ -767,7 +767,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return nil, fmt.Errorf("failed to populate provider access config: %w", err) } - deployer, err := pGoEdge.NewDeployer(&pGoEdge.DeployerConfig{ + deployer, err := pGoEdge.NewSSLDeployerProvider(&pGoEdge.SSLDeployerProviderConfig{ ServerUrl: access.ServerUrl, ApiRole: access.ApiRole, AccessKeyId: access.AccessKeyId, @@ -788,7 +788,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer switch options.Provider { case domain.DeploymentProviderTypeHuaweiCloudCDN: - deployer, err := pHuaweiCloudCDN.NewDeployer(&pHuaweiCloudCDN.DeployerConfig{ + deployer, err := pHuaweiCloudCDN.NewSSLDeployerProvider(&pHuaweiCloudCDN.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, SecretAccessKey: access.SecretAccessKey, EnterpriseProjectId: access.EnterpriseProjectId, @@ -798,7 +798,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeHuaweiCloudELB: - deployer, err := pHuaweiCloudELB.NewDeployer(&pHuaweiCloudELB.DeployerConfig{ + deployer, err := pHuaweiCloudELB.NewSSLDeployerProvider(&pHuaweiCloudELB.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, SecretAccessKey: access.SecretAccessKey, EnterpriseProjectId: access.EnterpriseProjectId, @@ -811,7 +811,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeHuaweiCloudSCM: - deployer, err := pHuaweiCloudSCM.NewDeployer(&pHuaweiCloudSCM.DeployerConfig{ + deployer, err := pHuaweiCloudSCM.NewSSLDeployerProvider(&pHuaweiCloudSCM.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, SecretAccessKey: access.SecretAccessKey, EnterpriseProjectId: access.EnterpriseProjectId, @@ -819,7 +819,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeHuaweiCloudWAF: - deployer, err := pHuaweiCloudWAF.NewDeployer(&pHuaweiCloudWAF.DeployerConfig{ + deployer, err := pHuaweiCloudWAF.NewSSLDeployerProvider(&pHuaweiCloudWAF.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, SecretAccessKey: access.SecretAccessKey, EnterpriseProjectId: access.EnterpriseProjectId, @@ -844,7 +844,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer switch options.Provider { case domain.DeploymentProviderTypeJDCloudALB: - deployer, err := pJDCloudALB.NewDeployer(&pJDCloudALB.DeployerConfig{ + deployer, err := pJDCloudALB.NewSSLDeployerProvider(&pJDCloudALB.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, RegionId: xmaps.GetString(options.ProviderServiceConfig, "regionId"), @@ -855,7 +855,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeJDCloudCDN: - deployer, err := pJDCloudCDN.NewDeployer(&pJDCloudCDN.DeployerConfig{ + deployer, err := pJDCloudCDN.NewSSLDeployerProvider(&pJDCloudCDN.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, Domain: xmaps.GetString(options.ProviderServiceConfig, "domain"), @@ -863,7 +863,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeJDCloudLive: - deployer, err := pJDCloudLive.NewDeployer(&pJDCloudLive.DeployerConfig{ + deployer, err := pJDCloudLive.NewSSLDeployerProvider(&pJDCloudLive.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, Domain: xmaps.GetString(options.ProviderServiceConfig, "domain"), @@ -871,7 +871,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeJDCloudVOD: - deployer, err := pJDCloudVOD.NewDeployer(&pJDCloudVOD.DeployerConfig{ + deployer, err := pJDCloudVOD.NewSSLDeployerProvider(&pJDCloudVOD.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, Domain: xmaps.GetString(options.ProviderServiceConfig, "domain"), @@ -890,7 +890,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return nil, fmt.Errorf("failed to populate provider access config: %w", err) } - deployer, err := pLeCDN.NewDeployer(&pLeCDN.DeployerConfig{ + deployer, err := pLeCDN.NewSSLDeployerProvider(&pLeCDN.SSLDeployerProviderConfig{ ServerUrl: access.ServerUrl, ApiVersion: access.ApiVersion, ApiRole: access.ApiRole, @@ -906,7 +906,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer case domain.DeploymentProviderTypeLocal: { - deployer, err := pLocal.NewDeployer(&pLocal.DeployerConfig{ + deployer, err := pLocal.NewSSLDeployerProvider(&pLocal.SSLDeployerProviderConfig{ ShellEnv: pLocal.ShellEnvType(xmaps.GetString(options.ProviderServiceConfig, "shellEnv")), PreCommand: xmaps.GetString(options.ProviderServiceConfig, "preCommand"), PostCommand: xmaps.GetString(options.ProviderServiceConfig, "postCommand"), @@ -930,7 +930,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return nil, fmt.Errorf("failed to populate provider access config: %w", err) } - deployer, err := pK8sSecret.NewDeployer(&pK8sSecret.DeployerConfig{ + deployer, err := pK8sSecret.NewSSLDeployerProvider(&pK8sSecret.SSLDeployerProviderConfig{ KubeConfig: access.KubeConfig, Namespace: xmaps.GetOrDefaultString(options.ProviderServiceConfig, "namespace", "default"), SecretName: xmaps.GetString(options.ProviderServiceConfig, "secretName"), @@ -948,7 +948,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return nil, fmt.Errorf("failed to populate provider access config: %w", err) } - deployer, err := pNetlifySite.NewDeployer(&pNetlifySite.DeployerConfig{ + deployer, err := pNetlifySite.NewSSLDeployerProvider(&pNetlifySite.SSLDeployerProviderConfig{ ApiToken: access.ApiToken, SiteId: xmaps.GetString(options.ProviderServiceConfig, "siteId"), }) @@ -962,7 +962,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return nil, fmt.Errorf("failed to populate provider access config: %w", err) } - deployer, err := pProxmoxVE.NewDeployer(&pProxmoxVE.DeployerConfig{ + deployer, err := pProxmoxVE.NewSSLDeployerProvider(&pProxmoxVE.SSLDeployerProviderConfig{ ServerUrl: access.ServerUrl, ApiToken: access.ApiToken, ApiTokenSecret: access.ApiTokenSecret, @@ -982,7 +982,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer switch options.Provider { case domain.DeploymentProviderTypeQiniuCDN, domain.DeploymentProviderTypeQiniuKodo: - deployer, err := pQiniuCDN.NewDeployer(&pQiniuCDN.DeployerConfig{ + deployer, err := pQiniuCDN.NewSSLDeployerProvider(&pQiniuCDN.SSLDeployerProviderConfig{ AccessKey: access.AccessKey, SecretKey: access.SecretKey, Domain: xmaps.GetString(options.ProviderServiceConfig, "domain"), @@ -990,7 +990,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeQiniuPili: - deployer, err := pQiniuPili.NewDeployer(&pQiniuPili.DeployerConfig{ + deployer, err := pQiniuPili.NewSSLDeployerProvider(&pQiniuPili.SSLDeployerProviderConfig{ AccessKey: access.AccessKey, SecretKey: access.SecretKey, Hub: xmaps.GetString(options.ProviderServiceConfig, "hub"), @@ -1012,7 +1012,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer switch options.Provider { case domain.DeploymentProviderTypeTencentCloudCDN: - deployer, err := pRainYunRCDN.NewDeployer(&pRainYunRCDN.DeployerConfig{ + deployer, err := pRainYunRCDN.NewSSLDeployerProvider(&pRainYunRCDN.SSLDeployerProviderConfig{ ApiKey: access.ApiKey, InstanceId: xmaps.GetInt32(options.ProviderServiceConfig, "instanceId"), Domain: xmaps.GetString(options.ProviderServiceConfig, "domain"), @@ -1033,7 +1033,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer switch options.Provider { case domain.DeploymentProviderTypeRatPanelConsole: - deployer, err := pRatPanelConsole.NewDeployer(&pRatPanelConsole.DeployerConfig{ + deployer, err := pRatPanelConsole.NewSSLDeployerProvider(&pRatPanelConsole.SSLDeployerProviderConfig{ ServerUrl: access.ServerUrl, AccessTokenId: access.AccessTokenId, AccessToken: access.AccessToken, @@ -1042,7 +1042,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeRatPanelSite: - deployer, err := pRatPanelSite.NewDeployer(&pRatPanelSite.DeployerConfig{ + deployer, err := pRatPanelSite.NewSSLDeployerProvider(&pRatPanelSite.SSLDeployerProviderConfig{ ServerUrl: access.ServerUrl, AccessTokenId: access.AccessTokenId, AccessToken: access.AccessToken, @@ -1063,7 +1063,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return nil, fmt.Errorf("failed to populate provider access config: %w", err) } - deployer, err := pSafeLine.NewDeployer(&pSafeLine.DeployerConfig{ + deployer, err := pSafeLine.NewSSLDeployerProvider(&pSafeLine.SSLDeployerProviderConfig{ ServerUrl: access.ServerUrl, ApiToken: access.ApiToken, AllowInsecureConnections: access.AllowInsecureConnections, @@ -1093,7 +1093,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer } } - deployer, err := pSSH.NewDeployer(&pSSH.DeployerConfig{ + deployer, err := pSSH.NewSSLDeployerProvider(&pSSH.SSLDeployerProviderConfig{ SshHost: access.Host, SshPort: access.Port, SshAuthMethod: access.AuthMethod, @@ -1127,7 +1127,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer switch options.Provider { case domain.DeploymentProviderTypeTencentCloudCDN: - deployer, err := pTencentCloudCDN.NewDeployer(&pTencentCloudCDN.DeployerConfig{ + deployer, err := pTencentCloudCDN.NewSSLDeployerProvider(&pTencentCloudCDN.SSLDeployerProviderConfig{ SecretId: access.SecretId, SecretKey: access.SecretKey, Domain: xmaps.GetString(options.ProviderServiceConfig, "domain"), @@ -1135,7 +1135,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeTencentCloudCLB: - deployer, err := pTencentCloudCLB.NewDeployer(&pTencentCloudCLB.DeployerConfig{ + deployer, err := pTencentCloudCLB.NewSSLDeployerProvider(&pTencentCloudCLB.SSLDeployerProviderConfig{ SecretId: access.SecretId, SecretKey: access.SecretKey, Region: xmaps.GetString(options.ProviderServiceConfig, "region"), @@ -1147,7 +1147,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeTencentCloudCOS: - deployer, err := pTencentCloudCOS.NewDeployer(&pTencentCloudCOS.DeployerConfig{ + deployer, err := pTencentCloudCOS.NewSSLDeployerProvider(&pTencentCloudCOS.SSLDeployerProviderConfig{ SecretId: access.SecretId, SecretKey: access.SecretKey, Region: xmaps.GetString(options.ProviderServiceConfig, "region"), @@ -1157,7 +1157,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeTencentCloudCSS: - deployer, err := pTencentCloudCSS.NewDeployer(&pTencentCloudCSS.DeployerConfig{ + deployer, err := pTencentCloudCSS.NewSSLDeployerProvider(&pTencentCloudCSS.SSLDeployerProviderConfig{ SecretId: access.SecretId, SecretKey: access.SecretKey, Domain: xmaps.GetString(options.ProviderServiceConfig, "domain"), @@ -1165,7 +1165,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeTencentCloudECDN: - deployer, err := pTencentCloudECDN.NewDeployer(&pTencentCloudECDN.DeployerConfig{ + deployer, err := pTencentCloudECDN.NewSSLDeployerProvider(&pTencentCloudECDN.SSLDeployerProviderConfig{ SecretId: access.SecretId, SecretKey: access.SecretKey, Domain: xmaps.GetString(options.ProviderServiceConfig, "domain"), @@ -1173,7 +1173,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeTencentCloudEO: - deployer, err := pTencentCloudEO.NewDeployer(&pTencentCloudEO.DeployerConfig{ + deployer, err := pTencentCloudEO.NewSSLDeployerProvider(&pTencentCloudEO.SSLDeployerProviderConfig{ SecretId: access.SecretId, SecretKey: access.SecretKey, ZoneId: xmaps.GetString(options.ProviderServiceConfig, "zoneId"), @@ -1182,7 +1182,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeTencentCloudGAAP: - deployer, err := pTencentCloudGAAP.NewDeployer(&pTencentCloudGAAP.DeployerConfig{ + deployer, err := pTencentCloudGAAP.NewSSLDeployerProvider(&pTencentCloudGAAP.SSLDeployerProviderConfig{ SecretId: access.SecretId, SecretKey: access.SecretKey, ResourceType: pTencentCloudGAAP.ResourceType(xmaps.GetString(options.ProviderServiceConfig, "resourceType")), @@ -1192,7 +1192,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeTencentCloudSCF: - deployer, err := pTencentCloudSCF.NewDeployer(&pTencentCloudSCF.DeployerConfig{ + deployer, err := pTencentCloudSCF.NewSSLDeployerProvider(&pTencentCloudSCF.SSLDeployerProviderConfig{ SecretId: access.SecretId, SecretKey: access.SecretKey, Region: xmaps.GetString(options.ProviderServiceConfig, "region"), @@ -1201,14 +1201,14 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeTencentCloudSSL: - deployer, err := pTencentCloudSSL.NewDeployer(&pTencentCloudSSL.DeployerConfig{ + deployer, err := pTencentCloudSSL.NewSSLDeployerProvider(&pTencentCloudSSL.SSLDeployerProviderConfig{ SecretId: access.SecretId, SecretKey: access.SecretKey, }) return deployer, err case domain.DeploymentProviderTypeTencentCloudSSLDeploy: - deployer, err := pTencentCloudSSLDeploy.NewDeployer(&pTencentCloudSSLDeploy.DeployerConfig{ + deployer, err := pTencentCloudSSLDeploy.NewSSLDeployerProvider(&pTencentCloudSSLDeploy.SSLDeployerProviderConfig{ SecretId: access.SecretId, SecretKey: access.SecretKey, Region: xmaps.GetString(options.ProviderServiceConfig, "region"), @@ -1218,7 +1218,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeTencentCloudVOD: - deployer, err := pTencentCloudVOD.NewDeployer(&pTencentCloudVOD.DeployerConfig{ + deployer, err := pTencentCloudVOD.NewSSLDeployerProvider(&pTencentCloudVOD.SSLDeployerProviderConfig{ SecretId: access.SecretId, SecretKey: access.SecretKey, SubAppId: xmaps.GetInt64(options.ProviderServiceConfig, "subAppId"), @@ -1227,7 +1227,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeTencentCloudWAF: - deployer, err := pTencentCloudWAF.NewDeployer(&pTencentCloudWAF.DeployerConfig{ + deployer, err := pTencentCloudWAF.NewSSLDeployerProvider(&pTencentCloudWAF.SSLDeployerProviderConfig{ SecretId: access.SecretId, SecretKey: access.SecretKey, Domain: xmaps.GetString(options.ProviderServiceConfig, "domain"), @@ -1250,7 +1250,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer switch options.Provider { case domain.DeploymentProviderTypeUCloudUCDN: - deployer, err := pUCloudUCDN.NewDeployer(&pUCloudUCDN.DeployerConfig{ + deployer, err := pUCloudUCDN.NewSSLDeployerProvider(&pUCloudUCDN.SSLDeployerProviderConfig{ PrivateKey: access.PrivateKey, PublicKey: access.PublicKey, ProjectId: access.ProjectId, @@ -1259,7 +1259,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeUCloudUS3: - deployer, err := pUCloudUS3.NewDeployer(&pUCloudUS3.DeployerConfig{ + deployer, err := pUCloudUS3.NewSSLDeployerProvider(&pUCloudUS3.SSLDeployerProviderConfig{ PrivateKey: access.PrivateKey, PublicKey: access.PublicKey, ProjectId: access.ProjectId, @@ -1281,7 +1281,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return nil, fmt.Errorf("failed to populate provider access config: %w", err) } - deployer, err := pUniCloudWebHost.NewDeployer(&pUniCloudWebHost.DeployerConfig{ + deployer, err := pUniCloudWebHost.NewSSLDeployerProvider(&pUniCloudWebHost.SSLDeployerProviderConfig{ Username: access.Username, Password: access.Password, SpaceProvider: xmaps.GetString(options.ProviderServiceConfig, "spaceProvider"), @@ -1300,7 +1300,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer switch options.Provider { case domain.DeploymentProviderTypeUpyunCDN, domain.DeploymentProviderTypeUpyunFile: - deployer, err := pUpyunCDN.NewDeployer(&pUpyunCDN.DeployerConfig{ + deployer, err := pUpyunCDN.NewSSLDeployerProvider(&pUpyunCDN.SSLDeployerProviderConfig{ Username: access.Username, Password: access.Password, Domain: xmaps.GetString(options.ProviderServiceConfig, "domain"), @@ -1321,7 +1321,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer switch options.Provider { case domain.DeploymentProviderTypeVolcEngineALB: - deployer, err := pVolcEngineALB.NewDeployer(&pVolcEngineALB.DeployerConfig{ + deployer, err := pVolcEngineALB.NewSSLDeployerProvider(&pVolcEngineALB.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.SecretAccessKey, Region: xmaps.GetString(options.ProviderServiceConfig, "region"), @@ -1333,7 +1333,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeVolcEngineCDN: - deployer, err := pVolcEngineCDN.NewDeployer(&pVolcEngineCDN.DeployerConfig{ + deployer, err := pVolcEngineCDN.NewSSLDeployerProvider(&pVolcEngineCDN.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.SecretAccessKey, Domain: xmaps.GetString(options.ProviderServiceConfig, "domain"), @@ -1341,7 +1341,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeVolcEngineCertCenter: - deployer, err := pVolcEngineCertCenter.NewDeployer(&pVolcEngineCertCenter.DeployerConfig{ + deployer, err := pVolcEngineCertCenter.NewSSLDeployerProvider(&pVolcEngineCertCenter.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.SecretAccessKey, Region: xmaps.GetString(options.ProviderServiceConfig, "region"), @@ -1349,7 +1349,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeVolcEngineCLB: - deployer, err := pVolcEngineCLB.NewDeployer(&pVolcEngineCLB.DeployerConfig{ + deployer, err := pVolcEngineCLB.NewSSLDeployerProvider(&pVolcEngineCLB.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.SecretAccessKey, Region: xmaps.GetString(options.ProviderServiceConfig, "region"), @@ -1360,7 +1360,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeVolcEngineDCDN: - deployer, err := pVolcEngineDCDN.NewDeployer(&pVolcEngineDCDN.DeployerConfig{ + deployer, err := pVolcEngineDCDN.NewSSLDeployerProvider(&pVolcEngineDCDN.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.SecretAccessKey, Domain: xmaps.GetString(options.ProviderServiceConfig, "domain"), @@ -1368,7 +1368,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeVolcEngineImageX: - deployer, err := pVolcEngineImageX.NewDeployer(&pVolcEngineImageX.DeployerConfig{ + deployer, err := pVolcEngineImageX.NewSSLDeployerProvider(&pVolcEngineImageX.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.SecretAccessKey, Region: xmaps.GetString(options.ProviderServiceConfig, "region"), @@ -1378,7 +1378,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeVolcEngineLive: - deployer, err := pVolcEngineLive.NewDeployer(&pVolcEngineLive.DeployerConfig{ + deployer, err := pVolcEngineLive.NewSSLDeployerProvider(&pVolcEngineLive.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.SecretAccessKey, Domain: xmaps.GetString(options.ProviderServiceConfig, "domain"), @@ -1386,7 +1386,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeVolcEngineTOS: - deployer, err := pVolcEngineTOS.NewDeployer(&pVolcEngineTOS.DeployerConfig{ + deployer, err := pVolcEngineTOS.NewSSLDeployerProvider(&pVolcEngineTOS.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.SecretAccessKey, Region: xmaps.GetString(options.ProviderServiceConfig, "region"), @@ -1409,7 +1409,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer switch options.Provider { case domain.DeploymentProviderTypeWangsuCDN: - deployer, err := pWangsuCDN.NewDeployer(&pWangsuCDN.DeployerConfig{ + deployer, err := pWangsuCDN.NewSSLDeployerProvider(&pWangsuCDN.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, Domains: xslices.Filter(strings.Split(xmaps.GetString(options.ProviderServiceConfig, "domains"), ";"), func(s string) bool { return s != "" }), @@ -1417,7 +1417,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeWangsuCDNPro: - deployer, err := pWangsuCDNPro.NewDeployer(&pWangsuCDNPro.DeployerConfig{ + deployer, err := pWangsuCDNPro.NewSSLDeployerProvider(&pWangsuCDNPro.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, ApiKey: access.ApiKey, @@ -1429,7 +1429,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer return deployer, err case domain.DeploymentProviderTypeWangsuCertificate: - deployer, err := pWangsuCertificate.NewDeployer(&pWangsuCertificate.DeployerConfig{ + deployer, err := pWangsuCertificate.NewSSLDeployerProvider(&pWangsuCertificate.SSLDeployerProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, CertificateId: xmaps.GetString(options.ProviderServiceConfig, "certificateId"), @@ -1468,7 +1468,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer } } - deployer, err := pWebhook.NewDeployer(&pWebhook.DeployerConfig{ + deployer, err := pWebhook.NewSSLDeployerProvider(&pWebhook.SSLDeployerProviderConfig{ WebhookUrl: access.Url, WebhookData: xmaps.GetOrDefaultString(options.ProviderServiceConfig, "webhookData", access.DefaultDataForDeployment), Method: access.Method, diff --git a/internal/notify/notifier.go b/internal/notify/notifier.go index 5e957841..af2af101 100644 --- a/internal/notify/notifier.go +++ b/internal/notify/notifier.go @@ -6,7 +6,7 @@ import ( "log/slog" "github.com/usual2970/certimate/internal/domain" - "github.com/usual2970/certimate/internal/pkg/core/notifier" + "github.com/usual2970/certimate/internal/pkg/core" "github.com/usual2970/certimate/internal/repository" ) @@ -46,20 +46,22 @@ func NewWithWorkflowNode(config NotifierWithWorkflowNodeConfig) (Notifier, error } } - notifierProvider, err := createNotifierProvider(options) + notifier, err := createNotifierProvider(options) if err != nil { return nil, err + } else { + notifier.SetLogger(config.Logger) } return ¬ifierImpl{ - provider: notifierProvider.WithLogger(config.Logger), + provider: notifier, subject: config.Subject, message: config.Message, }, nil } type notifierImpl struct { - provider notifier.Notifier + provider core.Notifier subject string message string } diff --git a/internal/notify/notify.go b/internal/notify/notify.go index 0f54be2f..ba79f9e1 100644 --- a/internal/notify/notify.go +++ b/internal/notify/notify.go @@ -8,7 +8,7 @@ import ( "golang.org/x/sync/errgroup" "github.com/usual2970/certimate/internal/domain" - "github.com/usual2970/certimate/internal/pkg/core/notifier" + "github.com/usual2970/certimate/internal/pkg/core" xmaps "github.com/usual2970/certimate/internal/pkg/utils/maps" "github.com/usual2970/certimate/internal/repository" ) @@ -51,7 +51,7 @@ func SendToChannel(subject, message string, channel string, channelConfig map[st } // Deprecated: v0.4.x 将废弃 -func getEnabledNotifiers() ([]notifier.Notifier, error) { +func getEnabledNotifiers() ([]core.Notifier, error) { settingsRepo := repository.NewSettingsRepository() settings, err := settingsRepo.GetByName(context.Background(), "notifyChannels") if err != nil { @@ -63,7 +63,7 @@ func getEnabledNotifiers() ([]notifier.Notifier, error) { return nil, fmt.Errorf("unmarshal notifyChannels error: %w", err) } - notifiers := make([]notifier.Notifier, 0) + notifiers := make([]core.Notifier, 0) for k, v := range rs { if !xmaps.GetBool(v, "enabled") { continue diff --git a/internal/notify/providers.go b/internal/notify/providers.go index 79191990..e7d7d3c4 100644 --- a/internal/notify/providers.go +++ b/internal/notify/providers.go @@ -5,7 +5,7 @@ import ( "net/http" "github.com/usual2970/certimate/internal/domain" - "github.com/usual2970/certimate/internal/pkg/core/notifier" + "github.com/usual2970/certimate/internal/pkg/core" pDingTalkBot "github.com/usual2970/certimate/internal/pkg/core/notifier/providers/dingtalkbot" pDiscordBot "github.com/usual2970/certimate/internal/pkg/core/notifier/providers/discordbot" pEmail "github.com/usual2970/certimate/internal/pkg/core/notifier/providers/email" @@ -25,7 +25,7 @@ type notifierProviderOptions struct { ProviderServiceConfig map[string]any } -func createNotifierProvider(options *notifierProviderOptions) (notifier.Notifier, error) { +func createNotifierProvider(options *notifierProviderOptions) (core.Notifier, error) { /* 注意:如果追加新的常量值,请保持以 ASCII 排序。 NOTICE: If you add new constant, please keep ASCII order. @@ -38,7 +38,7 @@ func createNotifierProvider(options *notifierProviderOptions) (notifier.Notifier return nil, fmt.Errorf("failed to populate provider access config: %w", err) } - return pDingTalkBot.NewNotifier(&pDingTalkBot.NotifierConfig{ + return pDingTalkBot.NewNotifierProvider(&pDingTalkBot.NotifierProviderConfig{ WebhookUrl: access.WebhookUrl, Secret: access.Secret, }) @@ -51,7 +51,7 @@ func createNotifierProvider(options *notifierProviderOptions) (notifier.Notifier return nil, fmt.Errorf("failed to populate provider access config: %w", err) } - return pDiscordBot.NewNotifier(&pDiscordBot.NotifierConfig{ + return pDiscordBot.NewNotifierProvider(&pDiscordBot.NotifierProviderConfig{ BotToken: access.BotToken, ChannelId: xmaps.GetOrDefaultString(options.ProviderServiceConfig, "channelId", access.DefaultChannelId), }) @@ -64,7 +64,7 @@ func createNotifierProvider(options *notifierProviderOptions) (notifier.Notifier return nil, fmt.Errorf("failed to populate provider access config: %w", err) } - return pEmail.NewNotifier(&pEmail.NotifierConfig{ + return pEmail.NewNotifierProvider(&pEmail.NotifierProviderConfig{ SmtpHost: access.SmtpHost, SmtpPort: access.SmtpPort, SmtpTls: access.SmtpTls, @@ -83,7 +83,7 @@ func createNotifierProvider(options *notifierProviderOptions) (notifier.Notifier return nil, fmt.Errorf("failed to populate provider access config: %w", err) } - return pLarkBot.NewNotifier(&pLarkBot.NotifierConfig{ + return pLarkBot.NewNotifierProvider(&pLarkBot.NotifierProviderConfig{ WebhookUrl: access.WebhookUrl, }) } @@ -95,7 +95,7 @@ func createNotifierProvider(options *notifierProviderOptions) (notifier.Notifier return nil, fmt.Errorf("failed to populate provider access config: %w", err) } - return pMattermost.NewNotifier(&pMattermost.NotifierConfig{ + return pMattermost.NewNotifierProvider(&pMattermost.NotifierProviderConfig{ ServerUrl: access.ServerUrl, Username: access.Username, Password: access.Password, @@ -110,7 +110,7 @@ func createNotifierProvider(options *notifierProviderOptions) (notifier.Notifier return nil, fmt.Errorf("failed to populate provider access config: %w", err) } - return pSlackBot.NewNotifier(&pSlackBot.NotifierConfig{ + return pSlackBot.NewNotifierProvider(&pSlackBot.NotifierProviderConfig{ BotToken: access.BotToken, ChannelId: xmaps.GetOrDefaultString(options.ProviderServiceConfig, "channelId", access.DefaultChannelId), }) @@ -123,7 +123,7 @@ func createNotifierProvider(options *notifierProviderOptions) (notifier.Notifier return nil, fmt.Errorf("failed to populate provider access config: %w", err) } - return pTelegramBot.NewNotifier(&pTelegramBot.NotifierConfig{ + return pTelegramBot.NewNotifierProvider(&pTelegramBot.NotifierProviderConfig{ BotToken: access.BotToken, ChatId: xmaps.GetOrDefaultInt64(options.ProviderServiceConfig, "chatId", access.DefaultChatId), }) @@ -156,7 +156,7 @@ func createNotifierProvider(options *notifierProviderOptions) (notifier.Notifier } } - return pWebhook.NewNotifier(&pWebhook.NotifierConfig{ + return pWebhook.NewNotifierProvider(&pWebhook.NotifierProviderConfig{ WebhookUrl: access.Url, WebhookData: xmaps.GetOrDefaultString(options.ProviderServiceConfig, "webhookData", access.DefaultDataForNotification), Method: access.Method, @@ -172,7 +172,7 @@ func createNotifierProvider(options *notifierProviderOptions) (notifier.Notifier return nil, fmt.Errorf("failed to populate provider access config: %w", err) } - return pWeComBot.NewNotifier(&pWeComBot.NotifierConfig{ + return pWeComBot.NewNotifierProvider(&pWeComBot.NotifierProviderConfig{ WebhookUrl: access.WebhookUrl, }) } diff --git a/internal/notify/providers_deprecated.go b/internal/notify/providers_deprecated.go index 7f4f15f2..074827bf 100644 --- a/internal/notify/providers_deprecated.go +++ b/internal/notify/providers_deprecated.go @@ -4,7 +4,7 @@ import ( "fmt" "github.com/usual2970/certimate/internal/domain" - "github.com/usual2970/certimate/internal/pkg/core/notifier" + "github.com/usual2970/certimate/internal/pkg/core" pBark "github.com/usual2970/certimate/internal/pkg/core/notifier/providers/bark" pDingTalk "github.com/usual2970/certimate/internal/pkg/core/notifier/providers/dingtalkbot" pEmail "github.com/usual2970/certimate/internal/pkg/core/notifier/providers/email" @@ -21,26 +21,26 @@ import ( ) // Deprecated: v0.4.x 将废弃 -func createNotifierProviderUseGlobalSettings(channel domain.NotifyChannelType, channelConfig map[string]any) (notifier.Notifier, error) { +func createNotifierProviderUseGlobalSettings(channel domain.NotifyChannelType, channelConfig map[string]any) (core.Notifier, error) { /* 注意:如果追加新的常量值,请保持以 ASCII 排序。 NOTICE: If you add new constant, please keep ASCII order. */ switch channel { case domain.NotifyChannelTypeBark: - return pBark.NewNotifier(&pBark.NotifierConfig{ + return pBark.NewNotifierProvider(&pBark.NotifierProviderConfig{ DeviceKey: xmaps.GetString(channelConfig, "deviceKey"), ServerUrl: xmaps.GetString(channelConfig, "serverUrl"), }) case domain.NotifyChannelTypeDingTalk: - return pDingTalk.NewNotifier(&pDingTalk.NotifierConfig{ + return pDingTalk.NewNotifierProvider(&pDingTalk.NotifierProviderConfig{ WebhookUrl: "https://oapi.dingtalk.com/robot/send?access_token=" + xmaps.GetString(channelConfig, "accessToken"), Secret: xmaps.GetString(channelConfig, "secret"), }) case domain.NotifyChannelTypeEmail: - return pEmail.NewNotifier(&pEmail.NotifierConfig{ + return pEmail.NewNotifierProvider(&pEmail.NotifierProviderConfig{ SmtpHost: xmaps.GetString(channelConfig, "smtpHost"), SmtpPort: xmaps.GetInt32(channelConfig, "smtpPort"), SmtpTls: xmaps.GetOrDefaultBool(channelConfig, "smtpTLS", true), @@ -51,19 +51,19 @@ func createNotifierProviderUseGlobalSettings(channel domain.NotifyChannelType, c }) case domain.NotifyChannelTypeGotify: - return pGotify.NewNotifier(&pGotify.NotifierConfig{ + return pGotify.NewNotifierProvider(&pGotify.NotifierProviderConfig{ ServerUrl: xmaps.GetString(channelConfig, "url"), Token: xmaps.GetString(channelConfig, "token"), Priority: xmaps.GetOrDefaultInt64(channelConfig, "priority", 1), }) case domain.NotifyChannelTypeLark: - return pLark.NewNotifier(&pLark.NotifierConfig{ + return pLark.NewNotifierProvider(&pLark.NotifierProviderConfig{ WebhookUrl: xmaps.GetString(channelConfig, "webhookUrl"), }) case domain.NotifyChannelTypeMattermost: - return pMattermost.NewNotifier(&pMattermost.NotifierConfig{ + return pMattermost.NewNotifierProvider(&pMattermost.NotifierProviderConfig{ ServerUrl: xmaps.GetString(channelConfig, "serverUrl"), ChannelId: xmaps.GetString(channelConfig, "channelId"), Username: xmaps.GetString(channelConfig, "username"), @@ -71,35 +71,35 @@ func createNotifierProviderUseGlobalSettings(channel domain.NotifyChannelType, c }) case domain.NotifyChannelTypePushover: - return pPushover.NewNotifier(&pPushover.NotifierConfig{ + return pPushover.NewNotifierProvider(&pPushover.NotifierProviderConfig{ Token: xmaps.GetString(channelConfig, "token"), User: xmaps.GetString(channelConfig, "user"), }) case domain.NotifyChannelTypePushPlus: - return pPushPlus.NewNotifier(&pPushPlus.NotifierConfig{ + return pPushPlus.NewNotifierProvider(&pPushPlus.NotifierProviderConfig{ Token: xmaps.GetString(channelConfig, "token"), }) case domain.NotifyChannelTypeServerChan: - return pServerChan.NewNotifier(&pServerChan.NotifierConfig{ + return pServerChan.NewNotifierProvider(&pServerChan.NotifierProviderConfig{ ServerUrl: xmaps.GetString(channelConfig, "url"), }) case domain.NotifyChannelTypeTelegram: - return pTelegram.NewNotifier(&pTelegram.NotifierConfig{ + return pTelegram.NewNotifierProvider(&pTelegram.NotifierProviderConfig{ BotToken: xmaps.GetString(channelConfig, "apiToken"), ChatId: xmaps.GetInt64(channelConfig, "chatId"), }) case domain.NotifyChannelTypeWebhook: - return pWebhook.NewNotifier(&pWebhook.NotifierConfig{ + return pWebhook.NewNotifierProvider(&pWebhook.NotifierProviderConfig{ WebhookUrl: xmaps.GetString(channelConfig, "url"), AllowInsecureConnections: xmaps.GetBool(channelConfig, "allowInsecureConnections"), }) case domain.NotifyChannelTypeWeCom: - return pWeCom.NewNotifier(&pWeCom.NotifierConfig{ + return pWeCom.NewNotifierProvider(&pWeCom.NotifierProviderConfig{ WebhookUrl: xmaps.GetString(channelConfig, "webhookUrl"), }) } diff --git a/internal/pkg/core/deployer/deployer.go b/internal/pkg/core/deployer/deployer.go deleted file mode 100644 index 85a4e156..00000000 --- a/internal/pkg/core/deployer/deployer.go +++ /dev/null @@ -1,29 +0,0 @@ -package deployer - -import ( - "context" - "log/slog" -) - -// 表示定义证书部署器的抽象类型接口。 -// 注意与 `Uploader` 区分,“部署”通常为“上传”的后置操作。 -type Deployer interface { - WithLogger(logger *slog.Logger) Deployer - - // 部署证书。 - // - // 入参: - // - ctx:上下文。 - // - certPEM:证书 PEM 内容。 - // - privkeyPEM:私钥 PEM 内容。 - // - // 出参: - // - res:部署结果。 - // - err: 错误。 - Deploy(ctx context.Context, certPEM string, privkeyPEM string) (_res *DeployResult, _err error) -} - -// 表示证书部署结果的数据结构。 -type DeployResult struct { - ExtendedData map[string]any `json:"extendedData,omitempty"` -} diff --git a/internal/pkg/core/deployer/providers/aliyun-cas/aliyun_cas.go b/internal/pkg/core/deployer/providers/aliyun-cas/aliyun_cas.go deleted file mode 100644 index f1cc8811..00000000 --- a/internal/pkg/core/deployer/providers/aliyun-cas/aliyun_cas.go +++ /dev/null @@ -1,74 +0,0 @@ -package aliyuncas - -import ( - "context" - "fmt" - "log/slog" - - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/aliyun-cas" -) - -type DeployerConfig struct { - // 阿里云 AccessKeyId。 - AccessKeyId string `json:"accessKeyId"` - // 阿里云 AccessKeySecret。 - AccessKeySecret string `json:"accessKeySecret"` - // 阿里云资源组 ID。 - ResourceGroupId string `json:"resourceGroupId,omitempty"` - // 阿里云地域。 - Region string `json:"region"` -} - -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sslUploader uploader.Uploader -} - -var _ deployer.Deployer = (*DeployerProvider)(nil) - -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { - if config == nil { - panic("config is nil") - } - - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ - AccessKeyId: config.AccessKeyId, - AccessKeySecret: config.AccessKeySecret, - ResourceGroupId: config.ResourceGroupId, - Region: config.Region, - }) - if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) - } - - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sslUploader: uploader, - }, nil -} - -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { - if logger == nil { - d.logger = slog.New(slog.DiscardHandler) - } else { - d.logger = logger - } - d.sslUploader.WithLogger(logger) - return d -} - -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 CAS - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) - if err != nil { - return nil, fmt.Errorf("failed to upload certificate file: %w", err) - } else { - d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) - } - - return &deployer.DeployResult{}, nil -} diff --git a/internal/pkg/core/deployer/providers/aws-iam/aws_iam.go b/internal/pkg/core/deployer/providers/aws-iam/aws_iam.go deleted file mode 100644 index ef6440d3..00000000 --- a/internal/pkg/core/deployer/providers/aws-iam/aws_iam.go +++ /dev/null @@ -1,75 +0,0 @@ -package awsiam - -import ( - "context" - "fmt" - "log/slog" - - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/aws-iam" -) - -type DeployerConfig struct { - // AWS AccessKeyId。 - AccessKeyId string `json:"accessKeyId"` - // AWS SecretAccessKey。 - SecretAccessKey string `json:"secretAccessKey"` - // AWS 区域。 - Region string `json:"region"` - // IAM 证书路径。 - // 选填。 - CertificatePath string `json:"certificatePath,omitempty"` -} - -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sslUploader uploader.Uploader -} - -var _ deployer.Deployer = (*DeployerProvider)(nil) - -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { - if config == nil { - panic("config is nil") - } - - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ - AccessKeyId: config.AccessKeyId, - SecretAccessKey: config.SecretAccessKey, - Region: config.Region, - CertificatePath: config.CertificatePath, - }) - if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) - } - - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sslUploader: uploader, - }, nil -} - -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { - if logger == nil { - d.logger = slog.New(slog.DiscardHandler) - } else { - d.logger = logger - } - d.sslUploader.WithLogger(logger) - return d -} - -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 IAM - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) - if err != nil { - return nil, fmt.Errorf("failed to upload certificate file: %w", err) - } else { - d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) - } - - return &deployer.DeployResult{}, nil -} diff --git a/internal/pkg/core/deployer/providers/baiducloud-cert/baiducloud_cert.go b/internal/pkg/core/deployer/providers/baiducloud-cert/baiducloud_cert.go deleted file mode 100644 index f2295593..00000000 --- a/internal/pkg/core/deployer/providers/baiducloud-cert/baiducloud_cert.go +++ /dev/null @@ -1,67 +0,0 @@ -package baiducloudcert - -import ( - "context" - "fmt" - "log/slog" - - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/baiducloud-cert" -) - -type DeployerConfig struct { - // 百度智能云 AccessKeyId。 - AccessKeyId string `json:"accessKeyId"` - // 百度智能云 SecretAccessKey。 - SecretAccessKey string `json:"secretAccessKey"` -} - -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sslUploader uploader.Uploader -} - -var _ deployer.Deployer = (*DeployerProvider)(nil) - -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { - if config == nil { - panic("config is nil") - } - - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ - AccessKeyId: config.AccessKeyId, - SecretAccessKey: config.SecretAccessKey, - }) - if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) - } - - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sslUploader: uploader, - }, nil -} - -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { - if logger == nil { - d.logger = slog.New(slog.DiscardHandler) - } else { - d.logger = logger - } - return d -} - -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 CAS - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) - if err != nil { - return nil, fmt.Errorf("failed to upload certificate file: %w", err) - } else { - d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) - } - - return &deployer.DeployResult{}, nil -} diff --git a/internal/pkg/core/deployer/providers/ctcccloud-cms/ctcccloud_cms.go b/internal/pkg/core/deployer/providers/ctcccloud-cms/ctcccloud_cms.go deleted file mode 100644 index 62b4084b..00000000 --- a/internal/pkg/core/deployer/providers/ctcccloud-cms/ctcccloud_cms.go +++ /dev/null @@ -1,67 +0,0 @@ -package ctcccloudcms - -import ( - "context" - "fmt" - "log/slog" - - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/ctcccloud-cms" -) - -type DeployerConfig struct { - // 天翼云 AccessKeyId。 - AccessKeyId string `json:"accessKeyId"` - // 天翼云 SecretAccessKey。 - SecretAccessKey string `json:"secretAccessKey"` -} - -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sslUploader uploader.Uploader -} - -var _ deployer.Deployer = (*DeployerProvider)(nil) - -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { - if config == nil { - panic("config is nil") - } - - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ - AccessKeyId: config.AccessKeyId, - SecretAccessKey: config.SecretAccessKey, - }) - if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) - } - - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sslUploader: uploader, - }, nil -} - -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { - if logger == nil { - d.logger = slog.New(slog.DiscardHandler) - } else { - d.logger = logger - } - return d -} - -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 CMS - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) - if err != nil { - return nil, fmt.Errorf("failed to upload certificate file: %w", err) - } else { - d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) - } - - return &deployer.DeployResult{}, nil -} diff --git a/internal/pkg/core/deployer/providers/huaweicloud-scm/huaweicloud_scm.go b/internal/pkg/core/deployer/providers/huaweicloud-scm/huaweicloud_scm.go deleted file mode 100644 index 0ba5816a..00000000 --- a/internal/pkg/core/deployer/providers/huaweicloud-scm/huaweicloud_scm.go +++ /dev/null @@ -1,71 +0,0 @@ -package huaweicloudscm - -import ( - "context" - "fmt" - "log/slog" - - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/huaweicloud-scm" -) - -type DeployerConfig struct { - // 华为云 AccessKeyId。 - AccessKeyId string `json:"accessKeyId"` - // 华为云 SecretAccessKey。 - SecretAccessKey string `json:"secretAccessKey"` - // 华为云企业项目 ID。 - EnterpriseProjectId string `json:"enterpriseProjectId,omitempty"` -} - -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sslUploader uploader.Uploader -} - -var _ deployer.Deployer = (*DeployerProvider)(nil) - -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { - if config == nil { - panic("config is nil") - } - - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ - AccessKeyId: config.AccessKeyId, - SecretAccessKey: config.SecretAccessKey, - EnterpriseProjectId: config.EnterpriseProjectId, - }) - if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) - } - - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sslUploader: uploader, - }, nil -} - -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { - if logger == nil { - d.logger = slog.New(slog.DiscardHandler) - } else { - d.logger = logger - } - d.sslUploader.WithLogger(logger) - return d -} - -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 SCM - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) - if err != nil { - return nil, fmt.Errorf("failed to upload certificate file: %w", err) - } else { - d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) - } - - return &deployer.DeployResult{}, nil -} diff --git a/internal/pkg/core/deployer/providers/tencentcloud-ssl/tencentcloud_ssl.go b/internal/pkg/core/deployer/providers/tencentcloud-ssl/tencentcloud_ssl.go deleted file mode 100644 index 09ac14cd..00000000 --- a/internal/pkg/core/deployer/providers/tencentcloud-ssl/tencentcloud_ssl.go +++ /dev/null @@ -1,68 +0,0 @@ -package tencentcloudssl - -import ( - "context" - "fmt" - "log/slog" - - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/tencentcloud-ssl" -) - -type DeployerConfig struct { - // 腾讯云 SecretId。 - SecretId string `json:"secretId"` - // 腾讯云 SecretKey。 - SecretKey string `json:"secretKey"` -} - -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sslUploader uploader.Uploader -} - -var _ deployer.Deployer = (*DeployerProvider)(nil) - -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { - if config == nil { - panic("config is nil") - } - - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ - SecretId: config.SecretId, - SecretKey: config.SecretKey, - }) - if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) - } - - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sslUploader: uploader, - }, nil -} - -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { - if logger == nil { - d.logger = slog.New(slog.DiscardHandler) - } else { - d.logger = logger - } - d.sslUploader.WithLogger(logger) - return d -} - -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 SSL - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) - if err != nil { - return nil, fmt.Errorf("failed to upload certificate file: %w", err) - } else { - d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) - } - - return &deployer.DeployResult{}, nil -} diff --git a/internal/pkg/core/deployer/providers/volcengine-certcenter/volcengine_certcenter.go b/internal/pkg/core/deployer/providers/volcengine-certcenter/volcengine_certcenter.go deleted file mode 100644 index 8bb40d5b..00000000 --- a/internal/pkg/core/deployer/providers/volcengine-certcenter/volcengine_certcenter.go +++ /dev/null @@ -1,71 +0,0 @@ -package volcenginecertcenter - -import ( - "context" - "fmt" - "log/slog" - - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/volcengine-certcenter" -) - -type DeployerConfig struct { - // 火山引擎 AccessKeyId。 - AccessKeyId string `json:"accessKeyId"` - // 火山引擎 AccessKeySecret。 - AccessKeySecret string `json:"accessKeySecret"` - // 火山引擎地域。 - Region string `json:"region"` -} - -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sslUploader uploader.Uploader -} - -var _ deployer.Deployer = (*DeployerProvider)(nil) - -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { - if config == nil { - panic("config is nil") - } - - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ - AccessKeyId: config.AccessKeyId, - AccessKeySecret: config.AccessKeySecret, - Region: config.Region, - }) - if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) - } - - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sslUploader: uploader, - }, nil -} - -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { - if logger == nil { - d.logger = slog.New(slog.DiscardHandler) - } else { - d.logger = logger - } - d.sslUploader.WithLogger(logger) - return d -} - -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到证书中心 - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) - if err != nil { - return nil, fmt.Errorf("failed to upload certificate file: %w", err) - } else { - d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) - } - - return &deployer.DeployResult{}, nil -} diff --git a/internal/pkg/core/notifier/notifier.go b/internal/pkg/core/notifier/notifier.go deleted file mode 100644 index f04084aa..00000000 --- a/internal/pkg/core/notifier/notifier.go +++ /dev/null @@ -1,28 +0,0 @@ -package notifier - -import ( - "context" - "log/slog" -) - -// 表示定义消息通知器的抽象类型接口。 -type Notifier interface { - WithLogger(logger *slog.Logger) Notifier - - // 发送通知。 - // - // 入参: - // - ctx:上下文。 - // - subject:通知主题。 - // - message:通知内容。 - // - // 出参: - // - res:发送结果。 - // - err: 错误。 - Notify(ctx context.Context, subject string, message string) (_res *NotifyResult, _err error) -} - -// 表示通知发送结果的数据结构。 -type NotifyResult struct { - ExtendedData map[string]any `json:"extendedData,omitempty"` -} diff --git a/internal/pkg/core/notifier/providers/bark/bark.go b/internal/pkg/core/notifier/providers/bark/bark.go index 805a72b0..dffccfec 100644 --- a/internal/pkg/core/notifier/providers/bark/bark.go +++ b/internal/pkg/core/notifier/providers/bark/bark.go @@ -2,15 +2,16 @@ package bark import ( "context" + "errors" "fmt" "log/slog" "github.com/go-resty/resty/v2" - "github.com/usual2970/certimate/internal/pkg/core/notifier" + "github.com/usual2970/certimate/internal/pkg/core" ) -type NotifierConfig struct { +type NotifierProviderConfig struct { // Bark 服务地址。 // 零值时使用官方服务器。 ServerUrl string `json:"serverUrl"` @@ -19,16 +20,16 @@ type NotifierConfig struct { } type NotifierProvider struct { - config *NotifierConfig + config *NotifierProviderConfig logger *slog.Logger httpClient *resty.Client } -var _ notifier.Notifier = (*NotifierProvider)(nil) +var _ core.Notifier = (*NotifierProvider)(nil) -func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { +func NewNotifierProvider(config *NotifierProviderConfig) (*NotifierProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the notifier provider is nil") } client := resty.New() @@ -40,16 +41,15 @@ func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { }, nil } -func (n *NotifierProvider) WithLogger(logger *slog.Logger) notifier.Notifier { +func (n *NotifierProvider) SetLogger(logger *slog.Logger) { if logger == nil { n.logger = slog.New(slog.DiscardHandler) } else { n.logger = logger } - return n } -func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*notifier.NotifyResult, error) { +func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*core.NotifyResult, error) { const defaultServerURL = "https://api.day.app/" serverUrl := defaultServerURL if n.config.ServerUrl != "" { @@ -72,5 +72,5 @@ func (n *NotifierProvider) Notify(ctx context.Context, subject string, message s return nil, fmt.Errorf("bark api error: unexpected status code: %d, resp: %s", resp.StatusCode(), resp.String()) } - return ¬ifier.NotifyResult{}, nil + return &core.NotifyResult{}, nil } diff --git a/internal/pkg/core/notifier/providers/bark/bark_test.go b/internal/pkg/core/notifier/providers/bark/bark_test.go index f90448a9..3c599760 100644 --- a/internal/pkg/core/notifier/providers/bark/bark_test.go +++ b/internal/pkg/core/notifier/providers/bark/bark_test.go @@ -44,7 +44,7 @@ func TestNotify(t *testing.T) { fmt.Sprintf("DEVICEKEY: %v", fDeviceKey), }, "\n")) - notifier, err := provider.NewNotifier(&provider.NotifierConfig{ + notifier, err := provider.NewNotifierProvider(&provider.NotifierProviderConfig{ ServerUrl: fServerUrl, DeviceKey: fDeviceKey, }) diff --git a/internal/pkg/core/notifier/providers/dingtalkbot/dingtalkbot.go b/internal/pkg/core/notifier/providers/dingtalkbot/dingtalkbot.go index 81358ef4..d86e3e63 100644 --- a/internal/pkg/core/notifier/providers/dingtalkbot/dingtalkbot.go +++ b/internal/pkg/core/notifier/providers/dingtalkbot/dingtalkbot.go @@ -2,16 +2,17 @@ package dingtalkbot import ( "context" + "errors" "fmt" "log/slog" "net/url" "github.com/blinkbean/dingtalk" - "github.com/usual2970/certimate/internal/pkg/core/notifier" + "github.com/usual2970/certimate/internal/pkg/core" ) -type NotifierConfig struct { +type NotifierProviderConfig struct { // 钉钉机器人的 Webhook 地址。 WebhookUrl string `json:"webhookUrl"` // 钉钉机器人的 Secret。 @@ -19,15 +20,15 @@ type NotifierConfig struct { } type NotifierProvider struct { - config *NotifierConfig + config *NotifierProviderConfig logger *slog.Logger } -var _ notifier.Notifier = (*NotifierProvider)(nil) +var _ core.Notifier = (*NotifierProvider)(nil) -func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { +func NewNotifierProvider(config *NotifierProviderConfig) (*NotifierProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the notifier provider is nil") } return &NotifierProvider{ @@ -36,16 +37,15 @@ func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { }, nil } -func (n *NotifierProvider) WithLogger(logger *slog.Logger) notifier.Notifier { +func (n *NotifierProvider) SetLogger(logger *slog.Logger) { if logger == nil { n.logger = slog.New(slog.DiscardHandler) } else { n.logger = logger } - return n } -func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*notifier.NotifyResult, error) { +func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*core.NotifyResult, error) { webhookUrl, err := url.Parse(n.config.WebhookUrl) if err != nil { return nil, fmt.Errorf("dingtalk api error: invalid webhook url: %w", err) @@ -62,5 +62,5 @@ func (n *NotifierProvider) Notify(ctx context.Context, subject string, message s return nil, fmt.Errorf("dingtalk api error: %w", err) } - return ¬ifier.NotifyResult{}, nil + return &core.NotifyResult{}, nil } diff --git a/internal/pkg/core/notifier/providers/dingtalkbot/dingtalkbot_test.go b/internal/pkg/core/notifier/providers/dingtalkbot/dingtalkbot_test.go index de3b6ba0..6a88fbbf 100644 --- a/internal/pkg/core/notifier/providers/dingtalkbot/dingtalkbot_test.go +++ b/internal/pkg/core/notifier/providers/dingtalkbot/dingtalkbot_test.go @@ -44,7 +44,7 @@ func TestNotify(t *testing.T) { fmt.Sprintf("SECRET: %v", fSecret), }, "\n")) - notifier, err := provider.NewNotifier(&provider.NotifierConfig{ + notifier, err := provider.NewNotifierProvider(&provider.NotifierProviderConfig{ WebhookUrl: fWebhookUrl, Secret: fSecret, }) diff --git a/internal/pkg/core/notifier/providers/discordbot/discordbot.go b/internal/pkg/core/notifier/providers/discordbot/discordbot.go index 704e7c79..97411cd1 100644 --- a/internal/pkg/core/notifier/providers/discordbot/discordbot.go +++ b/internal/pkg/core/notifier/providers/discordbot/discordbot.go @@ -2,15 +2,16 @@ package discordbot import ( "context" + "errors" "fmt" "log/slog" "github.com/go-resty/resty/v2" - "github.com/usual2970/certimate/internal/pkg/core/notifier" + "github.com/usual2970/certimate/internal/pkg/core" ) -type NotifierConfig struct { +type NotifierProviderConfig struct { // Discord Bot API Token。 BotToken string `json:"botToken"` // Discord Channel ID。 @@ -18,16 +19,16 @@ type NotifierConfig struct { } type NotifierProvider struct { - config *NotifierConfig + config *NotifierProviderConfig logger *slog.Logger httpClient *resty.Client } -var _ notifier.Notifier = (*NotifierProvider)(nil) +var _ core.Notifier = (*NotifierProvider)(nil) -func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { +func NewNotifierProvider(config *NotifierProviderConfig) (*NotifierProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the notifier provider is nil") } client := resty.New() @@ -39,16 +40,15 @@ func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { }, nil } -func (n *NotifierProvider) WithLogger(logger *slog.Logger) notifier.Notifier { +func (n *NotifierProvider) SetLogger(logger *slog.Logger) { if logger == nil { n.logger = slog.New(slog.DiscardHandler) } else { n.logger = logger } - return n } -func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*notifier.NotifyResult, error) { +func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*core.NotifyResult, error) { // REF: https://discord.com/developers/docs/resources/message#create-message req := n.httpClient.R(). SetContext(ctx). @@ -65,5 +65,5 @@ func (n *NotifierProvider) Notify(ctx context.Context, subject string, message s return nil, fmt.Errorf("discord api error: unexpected status code: %d, resp: %s", resp.StatusCode(), resp.String()) } - return ¬ifier.NotifyResult{}, nil + return &core.NotifyResult{}, nil } diff --git a/internal/pkg/core/notifier/providers/discordbot/discordbot_test.go b/internal/pkg/core/notifier/providers/discordbot/discordbot_test.go index 39a63bfa..9a6f1626 100644 --- a/internal/pkg/core/notifier/providers/discordbot/discordbot_test.go +++ b/internal/pkg/core/notifier/providers/discordbot/discordbot_test.go @@ -44,7 +44,7 @@ func TestNotify(t *testing.T) { fmt.Sprintf("CHANNELID: %v", fChannelId), }, "\n")) - notifier, err := provider.NewNotifier(&provider.NotifierConfig{ + notifier, err := provider.NewNotifierProvider(&provider.NotifierProviderConfig{ BotToken: fApiToken, ChannelId: fChannelId, }) diff --git a/internal/pkg/core/notifier/providers/email/email.go b/internal/pkg/core/notifier/providers/email/email.go index bd7e8880..8b15e611 100644 --- a/internal/pkg/core/notifier/providers/email/email.go +++ b/internal/pkg/core/notifier/providers/email/email.go @@ -3,6 +3,7 @@ package email import ( "context" "crypto/tls" + "errors" "log/slog" "net" "net/smtp" @@ -10,10 +11,10 @@ import ( "github.com/domodwyer/mailyak/v3" - "github.com/usual2970/certimate/internal/pkg/core/notifier" + "github.com/usual2970/certimate/internal/pkg/core" ) -type NotifierConfig struct { +type NotifierProviderConfig struct { // SMTP 服务器地址。 SmtpHost string `json:"smtpHost"` // SMTP 服务器端口。 @@ -34,15 +35,15 @@ type NotifierConfig struct { } type NotifierProvider struct { - config *NotifierConfig + config *NotifierProviderConfig logger *slog.Logger } -var _ notifier.Notifier = (*NotifierProvider)(nil) +var _ core.Notifier = (*NotifierProvider)(nil) -func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { +func NewNotifierProvider(config *NotifierProviderConfig) (*NotifierProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the notifier provider is nil") } return &NotifierProvider{ @@ -51,16 +52,15 @@ func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { }, nil } -func (n *NotifierProvider) WithLogger(logger *slog.Logger) notifier.Notifier { +func (n *NotifierProvider) SetLogger(logger *slog.Logger) { if logger == nil { n.logger = slog.New(slog.DiscardHandler) } else { n.logger = logger } - return n } -func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*notifier.NotifyResult, error) { +func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*core.NotifyResult, error) { var smtpAuth smtp.Auth if n.config.Username != "" || n.config.Password != "" { smtpAuth = smtp.PlainAuth("", n.config.Username, n.config.Password, n.config.SmtpHost) @@ -98,7 +98,7 @@ func (n *NotifierProvider) Notify(ctx context.Context, subject string, message s return nil, err } - return ¬ifier.NotifyResult{}, nil + return &core.NotifyResult{}, nil } func newTlsConfig() *tls.Config { diff --git a/internal/pkg/core/notifier/providers/email/email_test.go b/internal/pkg/core/notifier/providers/email/email_test.go index cf0669ca..9fe7b27f 100644 --- a/internal/pkg/core/notifier/providers/email/email_test.go +++ b/internal/pkg/core/notifier/providers/email/email_test.go @@ -64,7 +64,7 @@ func TestNotify(t *testing.T) { fmt.Sprintf("RECEIVERADDRESS: %v", fReceiverAddress), }, "\n")) - notifier, err := provider.NewNotifier(&provider.NotifierConfig{ + notifier, err := provider.NewNotifierProvider(&provider.NotifierProviderConfig{ SmtpHost: fSmtpHost, SmtpPort: int32(fSmtpPort), SmtpTls: fSmtpTLS, diff --git a/internal/pkg/core/notifier/providers/gotify/gotify.go b/internal/pkg/core/notifier/providers/gotify/gotify.go index 75d8737b..2dad529b 100644 --- a/internal/pkg/core/notifier/providers/gotify/gotify.go +++ b/internal/pkg/core/notifier/providers/gotify/gotify.go @@ -2,16 +2,17 @@ package gotify import ( "context" + "errors" "fmt" "log/slog" "strings" "github.com/go-resty/resty/v2" - "github.com/usual2970/certimate/internal/pkg/core/notifier" + "github.com/usual2970/certimate/internal/pkg/core" ) -type NotifierConfig struct { +type NotifierProviderConfig struct { // Gotify 服务地址。 ServerUrl string `json:"serverUrl"` // Gotify Token。 @@ -21,16 +22,16 @@ type NotifierConfig struct { } type NotifierProvider struct { - config *NotifierConfig + config *NotifierProviderConfig logger *slog.Logger httpClient *resty.Client } -var _ notifier.Notifier = (*NotifierProvider)(nil) +var _ core.Notifier = (*NotifierProvider)(nil) -func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { +func NewNotifierProvider(config *NotifierProviderConfig) (*NotifierProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the notifier provider is nil") } client := resty.New() @@ -42,16 +43,15 @@ func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { }, nil } -func (n *NotifierProvider) WithLogger(logger *slog.Logger) notifier.Notifier { +func (n *NotifierProvider) SetLogger(logger *slog.Logger) { if logger == nil { n.logger = slog.New(slog.DiscardHandler) } else { n.logger = logger } - return n } -func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*notifier.NotifyResult, error) { +func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*core.NotifyResult, error) { serverUrl := strings.TrimRight(n.config.ServerUrl, "/") // REF: https://gotify.net/api-docs#/message/createMessage @@ -72,5 +72,5 @@ func (n *NotifierProvider) Notify(ctx context.Context, subject string, message s return nil, fmt.Errorf("gotify api error: unexpected status code: %d, resp: %s", resp.StatusCode(), resp.String()) } - return ¬ifier.NotifyResult{}, nil + return &core.NotifyResult{}, nil } diff --git a/internal/pkg/core/notifier/providers/gotify/gotify_test.go b/internal/pkg/core/notifier/providers/gotify/gotify_test.go index eb0ffd6b..cab935df 100644 --- a/internal/pkg/core/notifier/providers/gotify/gotify_test.go +++ b/internal/pkg/core/notifier/providers/gotify/gotify_test.go @@ -47,7 +47,7 @@ func TestNotify(t *testing.T) { fmt.Sprintf("PRIORITY: %d", fPriority), }, "\n")) - notifier, err := provider.NewNotifier(&provider.NotifierConfig{ + notifier, err := provider.NewNotifierProvider(&provider.NotifierProviderConfig{ ServerUrl: fUrl, Token: fToken, Priority: fPriority, diff --git a/internal/pkg/core/notifier/providers/larkbot/larkbot.go b/internal/pkg/core/notifier/providers/larkbot/larkbot.go index 8c5022c0..25411cc9 100644 --- a/internal/pkg/core/notifier/providers/larkbot/larkbot.go +++ b/internal/pkg/core/notifier/providers/larkbot/larkbot.go @@ -2,29 +2,30 @@ package larkbot import ( "context" + "errors" "fmt" "log/slog" "github.com/go-lark/lark" - "github.com/usual2970/certimate/internal/pkg/core/notifier" + "github.com/usual2970/certimate/internal/pkg/core" ) -type NotifierConfig struct { +type NotifierProviderConfig struct { // 飞书机器人 Webhook 地址。 WebhookUrl string `json:"webhookUrl"` } type NotifierProvider struct { - config *NotifierConfig + config *NotifierProviderConfig logger *slog.Logger } -var _ notifier.Notifier = (*NotifierProvider)(nil) +var _ core.Notifier = (*NotifierProvider)(nil) -func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { +func NewNotifierProvider(config *NotifierProviderConfig) (*NotifierProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the notifier provider is nil") } return &NotifierProvider{ @@ -33,16 +34,15 @@ func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { }, nil } -func (n *NotifierProvider) WithLogger(logger *slog.Logger) notifier.Notifier { +func (n *NotifierProvider) SetLogger(logger *slog.Logger) { if logger == nil { n.logger = slog.New(slog.DiscardHandler) } else { n.logger = logger } - return n } -func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*notifier.NotifyResult, error) { +func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*core.NotifyResult, error) { bot := lark.NewNotificationBot(n.config.WebhookUrl) content := lark.NewPostBuilder(). Title(subject). @@ -56,5 +56,5 @@ func (n *NotifierProvider) Notify(ctx context.Context, subject string, message s return nil, fmt.Errorf("lark api error: code='%d', message='%s'", resp.Code, resp.Msg) } - return ¬ifier.NotifyResult{}, nil + return &core.NotifyResult{}, nil } diff --git a/internal/pkg/core/notifier/providers/larkbot/larkbot_test.go b/internal/pkg/core/notifier/providers/larkbot/larkbot_test.go index 2deba768..98de8b41 100644 --- a/internal/pkg/core/notifier/providers/larkbot/larkbot_test.go +++ b/internal/pkg/core/notifier/providers/larkbot/larkbot_test.go @@ -38,7 +38,7 @@ func TestNotify(t *testing.T) { fmt.Sprintf("WEBHOOKURL: %v", fWebhookUrl), }, "\n")) - notifier, err := provider.NewNotifier(&provider.NotifierConfig{ + notifier, err := provider.NewNotifierProvider(&provider.NotifierProviderConfig{ WebhookUrl: fWebhookUrl, }) if err != nil { diff --git a/internal/pkg/core/notifier/providers/mattermost/mattermost.go b/internal/pkg/core/notifier/providers/mattermost/mattermost.go index de72d192..2bc48421 100644 --- a/internal/pkg/core/notifier/providers/mattermost/mattermost.go +++ b/internal/pkg/core/notifier/providers/mattermost/mattermost.go @@ -2,16 +2,17 @@ package mattermost import ( "context" + "errors" "fmt" "log/slog" "strings" "github.com/go-resty/resty/v2" - "github.com/usual2970/certimate/internal/pkg/core/notifier" + "github.com/usual2970/certimate/internal/pkg/core" ) -type NotifierConfig struct { +type NotifierProviderConfig struct { // Mattermost 服务地址。 ServerUrl string `json:"serverUrl"` // Mattermost 用户名。 @@ -23,16 +24,16 @@ type NotifierConfig struct { } type NotifierProvider struct { - config *NotifierConfig + config *NotifierProviderConfig logger *slog.Logger httpClient *resty.Client } -var _ notifier.Notifier = (*NotifierProvider)(nil) +var _ core.Notifier = (*NotifierProvider)(nil) -func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { +func NewNotifierProvider(config *NotifierProviderConfig) (*NotifierProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the notifier provider is nil") } client := resty.New() @@ -44,16 +45,15 @@ func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { }, nil } -func (n *NotifierProvider) WithLogger(logger *slog.Logger) notifier.Notifier { +func (n *NotifierProvider) SetLogger(logger *slog.Logger) { if logger == nil { n.logger = slog.New(slog.DiscardHandler) } else { n.logger = logger } - return n } -func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*notifier.NotifyResult, error) { +func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*core.NotifyResult, error) { serverUrl := strings.TrimRight(n.config.ServerUrl, "/") // REF: https://developers.mattermost.com/api-documentation/#/operations/Login @@ -98,5 +98,5 @@ func (n *NotifierProvider) Notify(ctx context.Context, subject string, message s return nil, fmt.Errorf("mattermost api error: unexpected status code: %d, resp: %s", postResp.StatusCode(), postResp.String()) } - return ¬ifier.NotifyResult{}, nil + return &core.NotifyResult{}, nil } diff --git a/internal/pkg/core/notifier/providers/mattermost/mattermost_test.go b/internal/pkg/core/notifier/providers/mattermost/mattermost_test.go index 6db6cc42..a2fb907d 100644 --- a/internal/pkg/core/notifier/providers/mattermost/mattermost_test.go +++ b/internal/pkg/core/notifier/providers/mattermost/mattermost_test.go @@ -52,7 +52,7 @@ func TestNotify(t *testing.T) { fmt.Sprintf("PASSWORD: %v", fPassword), }, "\n")) - notifier, err := provider.NewNotifier(&provider.NotifierConfig{ + notifier, err := provider.NewNotifierProvider(&provider.NotifierProviderConfig{ ServerUrl: fServerUrl, ChannelId: fChannelId, Username: fUsername, diff --git a/internal/pkg/core/notifier/providers/pushover/pushover.go b/internal/pkg/core/notifier/providers/pushover/pushover.go index aedf8d3a..8240c9b9 100644 --- a/internal/pkg/core/notifier/providers/pushover/pushover.go +++ b/internal/pkg/core/notifier/providers/pushover/pushover.go @@ -2,15 +2,16 @@ package pushover import ( "context" + "errors" "fmt" "log/slog" "github.com/go-resty/resty/v2" - "github.com/usual2970/certimate/internal/pkg/core/notifier" + "github.com/usual2970/certimate/internal/pkg/core" ) -type NotifierConfig struct { +type NotifierProviderConfig struct { // Pushover API Token。 Token string `json:"token"` // 用户或分组标识。 @@ -18,16 +19,16 @@ type NotifierConfig struct { } type NotifierProvider struct { - config *NotifierConfig + config *NotifierProviderConfig logger *slog.Logger httpClient *resty.Client } -var _ notifier.Notifier = (*NotifierProvider)(nil) +var _ core.Notifier = (*NotifierProvider)(nil) -func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { +func NewNotifierProvider(config *NotifierProviderConfig) (*NotifierProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the notifier provider is nil") } client := resty.New() @@ -39,16 +40,15 @@ func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { }, nil } -func (n *NotifierProvider) WithLogger(logger *slog.Logger) notifier.Notifier { +func (n *NotifierProvider) SetLogger(logger *slog.Logger) { if logger == nil { n.logger = slog.New(slog.DiscardHandler) } else { n.logger = logger } - return n } -func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*notifier.NotifyResult, error) { +func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*core.NotifyResult, error) { // REF: https://pushover.net/api req := n.httpClient.R(). SetContext(ctx). @@ -67,5 +67,5 @@ func (n *NotifierProvider) Notify(ctx context.Context, subject string, message s return nil, fmt.Errorf("pushover api error: unexpected status code: %d, resp: %s", resp.StatusCode(), resp.String()) } - return ¬ifier.NotifyResult{}, nil + return &core.NotifyResult{}, nil } diff --git a/internal/pkg/core/notifier/providers/pushover/pushover_test.go b/internal/pkg/core/notifier/providers/pushover/pushover_test.go index 450beac1..fff80f84 100644 --- a/internal/pkg/core/notifier/providers/pushover/pushover_test.go +++ b/internal/pkg/core/notifier/providers/pushover/pushover_test.go @@ -42,7 +42,7 @@ func TestNotify(t *testing.T) { fmt.Sprintf("TOKEN: %v", fToken), }, "\n")) - notifier, err := provider.NewNotifier(&provider.NotifierConfig{ + notifier, err := provider.NewNotifierProvider(&provider.NotifierProviderConfig{ Token: fToken, User: fUser, }) diff --git a/internal/pkg/core/notifier/providers/pushplus/pushplus.go b/internal/pkg/core/notifier/providers/pushplus/pushplus.go index 9f565ce5..bbcdc514 100644 --- a/internal/pkg/core/notifier/providers/pushplus/pushplus.go +++ b/internal/pkg/core/notifier/providers/pushplus/pushplus.go @@ -3,30 +3,31 @@ package pushplus import ( "context" "encoding/json" + "errors" "fmt" "log/slog" "github.com/go-resty/resty/v2" - "github.com/usual2970/certimate/internal/pkg/core/notifier" + "github.com/usual2970/certimate/internal/pkg/core" ) -type NotifierConfig struct { +type NotifierProviderConfig struct { // PushPlus Token。 Token string `json:"token"` } type NotifierProvider struct { - config *NotifierConfig + config *NotifierProviderConfig logger *slog.Logger httpClient *resty.Client } -var _ notifier.Notifier = (*NotifierProvider)(nil) +var _ core.Notifier = (*NotifierProvider)(nil) -func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { +func NewNotifierProvider(config *NotifierProviderConfig) (*NotifierProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the notifier provider is nil") } client := resty.New() @@ -38,16 +39,15 @@ func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { }, nil } -func (n *NotifierProvider) WithLogger(logger *slog.Logger) notifier.Notifier { +func (n *NotifierProvider) SetLogger(logger *slog.Logger) { if logger == nil { n.logger = slog.New(slog.DiscardHandler) } else { n.logger = logger } - return n } -func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*notifier.NotifyResult, error) { +func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*core.NotifyResult, error) { // REF: https://pushplus.plus/doc/guide/api.html#%E4%B8%80%E3%80%81%E5%8F%91%E9%80%81%E6%B6%88%E6%81%AF%E6%8E%A5%E5%8F%A3 req := n.httpClient.R(). SetContext(ctx). @@ -75,5 +75,5 @@ func (n *NotifierProvider) Notify(ctx context.Context, subject string, message s return nil, fmt.Errorf("pushplus api error: code='%d', message='%s'", errorResponse.Code, errorResponse.Message) } - return ¬ifier.NotifyResult{}, nil + return &core.NotifyResult{}, nil } diff --git a/internal/pkg/core/notifier/providers/pushplus/pushplus_test.go b/internal/pkg/core/notifier/providers/pushplus/pushplus_test.go index f504c168..013207b4 100644 --- a/internal/pkg/core/notifier/providers/pushplus/pushplus_test.go +++ b/internal/pkg/core/notifier/providers/pushplus/pushplus_test.go @@ -37,7 +37,7 @@ func TestNotify(t *testing.T) { fmt.Sprintf("TOKEN: %v", fToken), }, "\n")) - notifier, err := provider.NewNotifier(&provider.NotifierConfig{ + notifier, err := provider.NewNotifierProvider(&provider.NotifierProviderConfig{ Token: fToken, }) if err != nil { diff --git a/internal/pkg/core/notifier/providers/serverchan/serverchan.go b/internal/pkg/core/notifier/providers/serverchan/serverchan.go index ea6adf2b..d072f24c 100644 --- a/internal/pkg/core/notifier/providers/serverchan/serverchan.go +++ b/internal/pkg/core/notifier/providers/serverchan/serverchan.go @@ -2,30 +2,31 @@ package serverchan import ( "context" + "errors" "fmt" "log/slog" "github.com/go-resty/resty/v2" - "github.com/usual2970/certimate/internal/pkg/core/notifier" + "github.com/usual2970/certimate/internal/pkg/core" ) -type NotifierConfig struct { +type NotifierProviderConfig struct { // ServerChan 服务地址。 ServerUrl string `json:"serverUrl"` } type NotifierProvider struct { - config *NotifierConfig + config *NotifierProviderConfig logger *slog.Logger httpClient *resty.Client } -var _ notifier.Notifier = (*NotifierProvider)(nil) +var _ core.Notifier = (*NotifierProvider)(nil) -func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { +func NewNotifierProvider(config *NotifierProviderConfig) (*NotifierProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the notifier provider is nil") } client := resty.New() @@ -37,16 +38,15 @@ func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { }, nil } -func (n *NotifierProvider) WithLogger(logger *slog.Logger) notifier.Notifier { +func (n *NotifierProvider) SetLogger(logger *slog.Logger) { if logger == nil { n.logger = slog.New(slog.DiscardHandler) } else { n.logger = logger } - return n } -func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*notifier.NotifyResult, error) { +func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*core.NotifyResult, error) { // REF: https://sct.ftqq.com/ req := n.httpClient.R(). SetContext(ctx). @@ -63,5 +63,5 @@ func (n *NotifierProvider) Notify(ctx context.Context, subject string, message s return nil, fmt.Errorf("serverchan api error: unexpected status code: %d, resp: %s", resp.StatusCode(), resp.String()) } - return ¬ifier.NotifyResult{}, nil + return &core.NotifyResult{}, nil } diff --git a/internal/pkg/core/notifier/providers/serverchan/serverchan_test.go b/internal/pkg/core/notifier/providers/serverchan/serverchan_test.go index 5684a593..63553470 100644 --- a/internal/pkg/core/notifier/providers/serverchan/serverchan_test.go +++ b/internal/pkg/core/notifier/providers/serverchan/serverchan_test.go @@ -38,7 +38,7 @@ func TestNotify(t *testing.T) { fmt.Sprintf("URL: %v", fUrl), }, "\n")) - notifier, err := provider.NewNotifier(&provider.NotifierConfig{ + notifier, err := provider.NewNotifierProvider(&provider.NotifierProviderConfig{ ServerUrl: fUrl, }) if err != nil { diff --git a/internal/pkg/core/notifier/providers/slackbot/slackbot.go b/internal/pkg/core/notifier/providers/slackbot/slackbot.go index 92db106c..24a98dd6 100644 --- a/internal/pkg/core/notifier/providers/slackbot/slackbot.go +++ b/internal/pkg/core/notifier/providers/slackbot/slackbot.go @@ -2,15 +2,16 @@ package discordbot import ( "context" + "errors" "fmt" "log/slog" "github.com/go-resty/resty/v2" - "github.com/usual2970/certimate/internal/pkg/core/notifier" + "github.com/usual2970/certimate/internal/pkg/core" ) -type NotifierConfig struct { +type NotifierProviderConfig struct { // Slack Bot API Token。 BotToken string `json:"botToken"` // Slack Channel ID。 @@ -18,16 +19,16 @@ type NotifierConfig struct { } type NotifierProvider struct { - config *NotifierConfig + config *NotifierProviderConfig logger *slog.Logger httpClient *resty.Client } -var _ notifier.Notifier = (*NotifierProvider)(nil) +var _ core.Notifier = (*NotifierProvider)(nil) -func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { +func NewNotifierProvider(config *NotifierProviderConfig) (*NotifierProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the notifier provider is nil") } client := resty.New() @@ -39,16 +40,15 @@ func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { }, nil } -func (n *NotifierProvider) WithLogger(logger *slog.Logger) notifier.Notifier { +func (n *NotifierProvider) SetLogger(logger *slog.Logger) { if logger == nil { n.logger = slog.New(slog.DiscardHandler) } else { n.logger = logger } - return n } -func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*notifier.NotifyResult, error) { +func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*core.NotifyResult, error) { // REF: https://docs.slack.dev/messaging/sending-and-scheduling-messages#publishing req := n.httpClient.R(). SetContext(ctx). @@ -67,5 +67,5 @@ func (n *NotifierProvider) Notify(ctx context.Context, subject string, message s return nil, fmt.Errorf("slack api error: unexpected status code: %d, resp: %s", resp.StatusCode(), resp.String()) } - return ¬ifier.NotifyResult{}, nil + return &core.NotifyResult{}, nil } diff --git a/internal/pkg/core/notifier/providers/slackbot/slackbot_test.go b/internal/pkg/core/notifier/providers/slackbot/slackbot_test.go index 688daa6a..4d507d08 100644 --- a/internal/pkg/core/notifier/providers/slackbot/slackbot_test.go +++ b/internal/pkg/core/notifier/providers/slackbot/slackbot_test.go @@ -44,7 +44,7 @@ func TestNotify(t *testing.T) { fmt.Sprintf("CHANNELID: %v", fChannelId), }, "\n")) - notifier, err := provider.NewNotifier(&provider.NotifierConfig{ + notifier, err := provider.NewNotifierProvider(&provider.NotifierProviderConfig{ BotToken: fApiToken, ChannelId: fChannelId, }) diff --git a/internal/pkg/core/notifier/providers/telegrambot/telegrambot.go b/internal/pkg/core/notifier/providers/telegrambot/telegrambot.go index 80d03a21..5b24e63e 100644 --- a/internal/pkg/core/notifier/providers/telegrambot/telegrambot.go +++ b/internal/pkg/core/notifier/providers/telegrambot/telegrambot.go @@ -2,15 +2,16 @@ package telegrambot import ( "context" + "errors" "fmt" "log/slog" "github.com/go-resty/resty/v2" - "github.com/usual2970/certimate/internal/pkg/core/notifier" + "github.com/usual2970/certimate/internal/pkg/core" ) -type NotifierConfig struct { +type NotifierProviderConfig struct { // Telegram Bot API Token。 BotToken string `json:"botToken"` // Telegram Chat ID。 @@ -18,16 +19,16 @@ type NotifierConfig struct { } type NotifierProvider struct { - config *NotifierConfig + config *NotifierProviderConfig logger *slog.Logger httpClient *resty.Client } -var _ notifier.Notifier = (*NotifierProvider)(nil) +var _ core.Notifier = (*NotifierProvider)(nil) -func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { +func NewNotifierProvider(config *NotifierProviderConfig) (*NotifierProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the notifier provider is nil") } client := resty.New() @@ -39,16 +40,15 @@ func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { }, nil } -func (n *NotifierProvider) WithLogger(logger *slog.Logger) notifier.Notifier { +func (n *NotifierProvider) SetLogger(logger *slog.Logger) { if logger == nil { n.logger = slog.New(slog.DiscardHandler) } else { n.logger = logger } - return n } -func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*notifier.NotifyResult, error) { +func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*core.NotifyResult, error) { // REF: https://core.telegram.org/bots/api#sendmessage req := n.httpClient.R(). SetContext(ctx). @@ -65,5 +65,5 @@ func (n *NotifierProvider) Notify(ctx context.Context, subject string, message s return nil, fmt.Errorf("telegram api error: unexpected status code: %d, resp: %s", resp.StatusCode(), resp.String()) } - return ¬ifier.NotifyResult{}, nil + return &core.NotifyResult{}, nil } diff --git a/internal/pkg/core/notifier/providers/telegrambot/telegrambot_test.go b/internal/pkg/core/notifier/providers/telegrambot/telegrambot_test.go index 8dc18b95..5d6af709 100644 --- a/internal/pkg/core/notifier/providers/telegrambot/telegrambot_test.go +++ b/internal/pkg/core/notifier/providers/telegrambot/telegrambot_test.go @@ -44,7 +44,7 @@ func TestNotify(t *testing.T) { fmt.Sprintf("CHATID: %v", fChatId), }, "\n")) - notifier, err := provider.NewNotifier(&provider.NotifierConfig{ + notifier, err := provider.NewNotifierProvider(&provider.NotifierProviderConfig{ BotToken: fApiToken, ChatId: fChatId, }) diff --git a/internal/pkg/core/notifier/providers/webhook/webhook.go b/internal/pkg/core/notifier/providers/webhook/webhook.go index 523f7b4d..00d35ca3 100644 --- a/internal/pkg/core/notifier/providers/webhook/webhook.go +++ b/internal/pkg/core/notifier/providers/webhook/webhook.go @@ -4,6 +4,7 @@ import ( "context" "crypto/tls" "encoding/json" + "errors" "fmt" "log/slog" "net/http" @@ -13,10 +14,10 @@ import ( "github.com/go-resty/resty/v2" - "github.com/usual2970/certimate/internal/pkg/core/notifier" + "github.com/usual2970/certimate/internal/pkg/core" ) -type NotifierConfig struct { +type NotifierProviderConfig struct { // Webhook URL。 WebhookUrl string `json:"webhookUrl"` // Webhook 回调数据(application/json 或 application/x-www-form-urlencoded 格式)。 @@ -31,16 +32,16 @@ type NotifierConfig struct { } type NotifierProvider struct { - config *NotifierConfig + config *NotifierProviderConfig logger *slog.Logger httpClient *resty.Client } -var _ notifier.Notifier = (*NotifierProvider)(nil) +var _ core.Notifier = (*NotifierProvider)(nil) -func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { +func NewNotifierProvider(config *NotifierProviderConfig) (*NotifierProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the notifier provider is nil") } client := resty.New(). @@ -58,16 +59,15 @@ func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { }, nil } -func (n *NotifierProvider) WithLogger(logger *slog.Logger) notifier.Notifier { +func (n *NotifierProvider) SetLogger(logger *slog.Logger) { if logger == nil { n.logger = slog.New(slog.DiscardHandler) } else { n.logger = logger } - return n } -func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*notifier.NotifyResult, error) { +func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*core.NotifyResult, error) { // 处理 Webhook URL webhookUrl, err := url.Parse(n.config.WebhookUrl) if err != nil { @@ -165,7 +165,7 @@ func (n *NotifierProvider) Notify(ctx context.Context, subject string, message s n.logger.Debug("webhook responded", slog.String("response", resp.String())) - return ¬ifier.NotifyResult{}, nil + return &core.NotifyResult{}, nil } func replaceJsonValueRecursively(data interface{}, oldStr, newStr string) interface{} { diff --git a/internal/pkg/core/notifier/providers/webhook/webhook_test.go b/internal/pkg/core/notifier/providers/webhook/webhook_test.go index c416b3c9..6d88f551 100644 --- a/internal/pkg/core/notifier/providers/webhook/webhook_test.go +++ b/internal/pkg/core/notifier/providers/webhook/webhook_test.go @@ -43,7 +43,7 @@ func TestNotify(t *testing.T) { fmt.Sprintf("URL: %v", fWebhookUrl), }, "\n")) - notifier, err := provider.NewNotifier(&provider.NotifierConfig{ + notifier, err := provider.NewNotifierProvider(&provider.NotifierProviderConfig{ WebhookUrl: fWebhookUrl, Method: "POST", Headers: map[string]string{ diff --git a/internal/pkg/core/notifier/providers/wecombot/wecombot.go b/internal/pkg/core/notifier/providers/wecombot/wecombot.go index 93b03c4d..ce88bac6 100644 --- a/internal/pkg/core/notifier/providers/wecombot/wecombot.go +++ b/internal/pkg/core/notifier/providers/wecombot/wecombot.go @@ -2,30 +2,31 @@ package wecombot import ( "context" + "errors" "fmt" "log/slog" "github.com/go-resty/resty/v2" - "github.com/usual2970/certimate/internal/pkg/core/notifier" + "github.com/usual2970/certimate/internal/pkg/core" ) -type NotifierConfig struct { +type NotifierProviderConfig struct { // 企业微信机器人 Webhook 地址。 WebhookUrl string `json:"webhookUrl"` } type NotifierProvider struct { - config *NotifierConfig + config *NotifierProviderConfig logger *slog.Logger httpClient *resty.Client } -var _ notifier.Notifier = (*NotifierProvider)(nil) +var _ core.Notifier = (*NotifierProvider)(nil) -func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { +func NewNotifierProvider(config *NotifierProviderConfig) (*NotifierProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the notifier provider is nil") } client := resty.New() @@ -37,16 +38,15 @@ func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { }, nil } -func (n *NotifierProvider) WithLogger(logger *slog.Logger) notifier.Notifier { +func (n *NotifierProvider) SetLogger(logger *slog.Logger) { if logger == nil { n.logger = slog.New(slog.DiscardHandler) } else { n.logger = logger } - return n } -func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*notifier.NotifyResult, error) { +func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*core.NotifyResult, error) { // REF: https://developer.work.weixin.qq.com/document/path/91770 req := n.httpClient.R(). SetContext(ctx). @@ -65,5 +65,5 @@ func (n *NotifierProvider) Notify(ctx context.Context, subject string, message s return nil, fmt.Errorf("wecom api error: unexpected status code: %d, resp: %s", resp.StatusCode(), resp.String()) } - return ¬ifier.NotifyResult{}, nil + return &core.NotifyResult{}, nil } diff --git a/internal/pkg/core/notifier/providers/wecombot/wecombot_test.go b/internal/pkg/core/notifier/providers/wecombot/wecombot_test.go index 261f2158..ce868f1d 100644 --- a/internal/pkg/core/notifier/providers/wecombot/wecombot_test.go +++ b/internal/pkg/core/notifier/providers/wecombot/wecombot_test.go @@ -38,7 +38,7 @@ func TestNotify(t *testing.T) { fmt.Sprintf("WEBHOOKURL: %v", fWebhookUrl), }, "\n")) - notifier, err := provider.NewNotifier(&provider.NotifierConfig{ + notifier, err := provider.NewNotifierProvider(&provider.NotifierProviderConfig{ WebhookUrl: fWebhookUrl, }) if err != nil { diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/acmehttpreq/acmehttpreq.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/acmehttpreq/acmehttpreq.go similarity index 79% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/acmehttpreq/acmehttpreq.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/acmehttpreq/acmehttpreq.go index bdd16234..980753c8 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/acmehttpreq/acmehttpreq.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/acmehttpreq/acmehttpreq.go @@ -1,11 +1,13 @@ package acmehttpreq import ( + "errors" "net/url" "time" - "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/providers/dns/httpreq" + + "github.com/usual2970/certimate/internal/pkg/core" ) type ChallengeProviderConfig struct { @@ -16,9 +18,9 @@ type ChallengeProviderConfig struct { DnsPropagationTimeout int32 `json:"dnsPropagationTimeout,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } endpoint, _ := url.Parse(config.Endpoint) diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/aliyun-esa/aliyun_esa.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/aliyun-esa/aliyun_esa.go similarity index 72% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/aliyun-esa/aliyun_esa.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/aliyun-esa/aliyun_esa.go index 4a4930d1..e753af27 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/aliyun-esa/aliyun_esa.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/aliyun-esa/aliyun_esa.go @@ -1,11 +1,11 @@ package aliyunesa import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" - - internal "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/aliyun-esa/internal" + "github.com/usual2970/certimate/internal/pkg/core" + "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/aliyun-esa/internal" ) type ChallengeProviderConfig struct { @@ -16,9 +16,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := internal.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/aliyun-esa/internal/lego.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/aliyun-esa/internal/lego.go similarity index 100% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/aliyun-esa/internal/lego.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/aliyun-esa/internal/lego.go diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/aliyun/aliyun.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/aliyun/aliyun.go similarity index 78% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/aliyun/aliyun.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/aliyun/aliyun.go index 8f5cc56b..f3a5de6c 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/aliyun/aliyun.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/aliyun/aliyun.go @@ -1,10 +1,12 @@ package aliyun import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/providers/dns/alidns" + + "github.com/usual2970/certimate/internal/pkg/core" ) type ChallengeProviderConfig struct { @@ -14,9 +16,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := alidns.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/aws-route53/aws-route53.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/aws-route53/aws-route53.go similarity index 81% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/aws-route53/aws-route53.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/aws-route53/aws-route53.go index be1cfecf..1945529b 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/aws-route53/aws-route53.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/aws-route53/aws-route53.go @@ -1,10 +1,12 @@ package awsroute53 import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/providers/dns/route53" + + "github.com/usual2970/certimate/internal/pkg/core" ) type ChallengeProviderConfig struct { @@ -16,9 +18,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := route53.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/azure-dns/azure-dns.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/azure-dns/azure-dns.go similarity index 84% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/azure-dns/azure-dns.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/azure-dns/azure-dns.go index d16252f7..daff61ab 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/azure-dns/azure-dns.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/azure-dns/azure-dns.go @@ -1,11 +1,12 @@ package azuredns import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/providers/dns/azuredns" + "github.com/usual2970/certimate/internal/pkg/core" azenv "github.com/usual2970/certimate/internal/pkg/sdk3rd/azure/env" ) @@ -18,9 +19,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := azuredns.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/baiducloud/baiducloud.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/baiducloud/baiducloud.go similarity index 70% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/baiducloud/baiducloud.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/baiducloud/baiducloud.go index 74547bfd..9215bd03 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/baiducloud/baiducloud.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/baiducloud/baiducloud.go @@ -1,11 +1,11 @@ package baiducloud import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" - - internal "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/baiducloud/internal" + "github.com/usual2970/certimate/internal/pkg/core" + "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/baiducloud/internal" ) type ChallengeProviderConfig struct { @@ -15,9 +15,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := internal.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/baiducloud/internal/lego.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/baiducloud/internal/lego.go similarity index 100% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/baiducloud/internal/lego.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/baiducloud/internal/lego.go diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/bunny/bunny.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/bunny/bunny.go similarity index 75% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/bunny/bunny.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/bunny/bunny.go index 1f4fdffe..ec8094c2 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/bunny/bunny.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/bunny/bunny.go @@ -1,10 +1,12 @@ package bunny import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/providers/dns/bunny" + + "github.com/usual2970/certimate/internal/pkg/core" ) type ChallengeProviderConfig struct { @@ -13,9 +15,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := bunny.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/cloudflare/cloudflare.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/cloudflare/cloudflare.go similarity index 78% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/cloudflare/cloudflare.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/cloudflare/cloudflare.go index cdfc1313..250cdd4e 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/cloudflare/cloudflare.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/cloudflare/cloudflare.go @@ -1,10 +1,12 @@ package cloudflare import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/providers/dns/cloudflare" + + "github.com/usual2970/certimate/internal/pkg/core" ) type ChallengeProviderConfig struct { @@ -14,9 +16,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := cloudflare.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/cloudns/cloudns.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/cloudns/cloudns.go similarity index 78% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/cloudns/cloudns.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/cloudns/cloudns.go index dc351bd3..bf7038f6 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/cloudns/cloudns.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/cloudns/cloudns.go @@ -1,10 +1,12 @@ package cloudns import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/providers/dns/cloudns" + + "github.com/usual2970/certimate/internal/pkg/core" ) type ChallengeProviderConfig struct { @@ -14,9 +16,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := cloudns.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/cmcccloud/cmcccloud.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/cmcccloud/cmcccloud.go similarity index 70% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/cmcccloud/cmcccloud.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/cmcccloud/cmcccloud.go index d849a610..c40d84f1 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/cmcccloud/cmcccloud.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/cmcccloud/cmcccloud.go @@ -1,11 +1,11 @@ package cmcccloud import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" - - "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/cmcccloud/internal" + "github.com/usual2970/certimate/internal/pkg/core" + "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/cmcccloud/internal" ) type ChallengeProviderConfig struct { @@ -15,9 +15,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := internal.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/cmcccloud/internal/lego.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/cmcccloud/internal/lego.go similarity index 100% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/cmcccloud/internal/lego.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/cmcccloud/internal/lego.go diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/constellix/constellix.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/constellix/constellix.go similarity index 78% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/constellix/constellix.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/constellix/constellix.go index 12e7d615..245c180d 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/constellix/constellix.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/constellix/constellix.go @@ -1,10 +1,12 @@ package cloudns import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/providers/dns/constellix" + + "github.com/usual2970/certimate/internal/pkg/core" ) type ChallengeProviderConfig struct { @@ -14,9 +16,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := constellix.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/ctcccloud/ctcccloud.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/ctcccloud/ctcccloud.go similarity index 70% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/ctcccloud/ctcccloud.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/ctcccloud/ctcccloud.go index b4dea561..c66e93d6 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/ctcccloud/ctcccloud.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/ctcccloud/ctcccloud.go @@ -1,11 +1,11 @@ package ctcccloud import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" - - "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/ctcccloud/internal" + "github.com/usual2970/certimate/internal/pkg/core" + "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/ctcccloud/internal" ) type ChallengeProviderConfig struct { @@ -15,9 +15,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := internal.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/ctcccloud/internal/lego.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/ctcccloud/internal/lego.go similarity index 100% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/ctcccloud/internal/lego.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/ctcccloud/internal/lego.go diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/desec/desec.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/desec/desec.go similarity index 75% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/desec/desec.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/desec/desec.go index 7a997117..ab233733 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/desec/desec.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/desec/desec.go @@ -1,10 +1,12 @@ package desec import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/providers/dns/desec" + + "github.com/usual2970/certimate/internal/pkg/core" ) type ChallengeProviderConfig struct { @@ -13,9 +15,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := desec.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/digitalocean/digitalocean.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/digitalocean/digitalocean.go similarity index 76% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/digitalocean/digitalocean.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/digitalocean/digitalocean.go index 0e3cb358..5e8b8d58 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/digitalocean/digitalocean.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/digitalocean/digitalocean.go @@ -1,10 +1,12 @@ package namedotcom import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/providers/dns/digitalocean" + + "github.com/usual2970/certimate/internal/pkg/core" ) type ChallengeProviderConfig struct { @@ -13,9 +15,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := digitalocean.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/dnsla/dnsla.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/dnsla/dnsla.go similarity index 69% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/dnsla/dnsla.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/dnsla/dnsla.go index 59755e37..4aed2f8a 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/dnsla/dnsla.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/dnsla/dnsla.go @@ -1,11 +1,11 @@ package dnsla import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" - - internal "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/dnsla/internal" + "github.com/usual2970/certimate/internal/pkg/core" + "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/dnsla/internal" ) type ChallengeProviderConfig struct { @@ -15,9 +15,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := internal.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/dnsla/internal/lego.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/dnsla/internal/lego.go similarity index 100% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/dnsla/internal/lego.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/dnsla/internal/lego.go diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/duckdns/duckdns.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/duckdns/duckdns.go similarity index 72% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/duckdns/duckdns.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/duckdns/duckdns.go index 6cc823d0..a8201f47 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/duckdns/duckdns.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/duckdns/duckdns.go @@ -1,10 +1,12 @@ package namedotcom import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/providers/dns/duckdns" + + "github.com/usual2970/certimate/internal/pkg/core" ) type ChallengeProviderConfig struct { @@ -12,9 +14,9 @@ type ChallengeProviderConfig struct { DnsPropagationTimeout int32 `json:"dnsPropagationTimeout,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := duckdns.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/dynv6/dnsla.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/dynv6/dnsla.go similarity index 67% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/dynv6/dnsla.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/dynv6/dnsla.go index eb47e610..f2f739b2 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/dynv6/dnsla.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/dynv6/dnsla.go @@ -1,11 +1,11 @@ package dynv6 import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" - - internal "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/dynv6/internal" + "github.com/usual2970/certimate/internal/pkg/core" + "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/dynv6/internal" ) type ChallengeProviderConfig struct { @@ -14,9 +14,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := internal.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/dynv6/internal/lego.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/dynv6/internal/lego.go similarity index 100% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/dynv6/internal/lego.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/dynv6/internal/lego.go diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/gcore/gcore.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/gcore/gcore.go similarity index 75% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/gcore/gcore.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/gcore/gcore.go index ac9f7e61..f10172b6 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/gcore/gcore.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/gcore/gcore.go @@ -1,10 +1,12 @@ package gcore import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/providers/dns/gcore" + + "github.com/usual2970/certimate/internal/pkg/core" ) type ChallengeProviderConfig struct { @@ -13,9 +15,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := gcore.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/gname/gname.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/gname/gname.go similarity index 69% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/gname/gname.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/gname/gname.go index 6f7c6ae9..1c26c886 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/gname/gname.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/gname/gname.go @@ -1,11 +1,11 @@ package gname import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" - - internal "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/gname/internal" + "github.com/usual2970/certimate/internal/pkg/core" + "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/gname/internal" ) type ChallengeProviderConfig struct { @@ -15,9 +15,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := internal.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/gname/internal/lego.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/gname/internal/lego.go similarity index 100% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/gname/internal/lego.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/gname/internal/lego.go diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/godaddy/godaddy.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/godaddy/godaddy.go similarity index 78% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/godaddy/godaddy.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/godaddy/godaddy.go index 957c9185..bf29caa7 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/godaddy/godaddy.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/godaddy/godaddy.go @@ -1,10 +1,12 @@ package godaddy import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/providers/dns/godaddy" + + "github.com/usual2970/certimate/internal/pkg/core" ) type ChallengeProviderConfig struct { @@ -14,9 +16,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := godaddy.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/hetzner/hetzner.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/hetzner/hetzner.go similarity index 76% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/hetzner/hetzner.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/hetzner/hetzner.go index c202cc78..123b3ec9 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/hetzner/hetzner.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/hetzner/hetzner.go @@ -1,10 +1,12 @@ package namedotcom import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/providers/dns/hetzner" + + "github.com/usual2970/certimate/internal/pkg/core" ) type ChallengeProviderConfig struct { @@ -13,9 +15,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := hetzner.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/huaweicloud/huaweicloud.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/huaweicloud/huaweicloud.go similarity index 82% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/huaweicloud/huaweicloud.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/huaweicloud/huaweicloud.go index 08a629fc..855e5ae0 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/huaweicloud/huaweicloud.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/huaweicloud/huaweicloud.go @@ -1,10 +1,12 @@ package huaweicloud import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" hwc "github.com/go-acme/lego/v4/providers/dns/huaweicloud" + + "github.com/usual2970/certimate/internal/pkg/core" ) type ChallengeProviderConfig struct { @@ -15,9 +17,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } region := config.Region diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/jdcloud/internal/lego.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/jdcloud/internal/lego.go similarity index 100% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/jdcloud/internal/lego.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/jdcloud/internal/lego.go diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/jdcloud/jdcloud.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/jdcloud/jdcloud.go similarity index 76% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/jdcloud/jdcloud.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/jdcloud/jdcloud.go index 8dc4f0f9..10b4b35c 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/jdcloud/jdcloud.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/jdcloud/jdcloud.go @@ -1,11 +1,11 @@ package jdcloud import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" - - internal "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/jdcloud/internal" + "github.com/usual2970/certimate/internal/pkg/core" + "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/jdcloud/internal" ) type ChallengeProviderConfig struct { @@ -16,9 +16,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } regionId := config.RegionId diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/namecheap/namecheap.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/namecheap/namecheap.go similarity index 78% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/namecheap/namecheap.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/namecheap/namecheap.go index 9bf2f3c3..9591cfd9 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/namecheap/namecheap.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/namecheap/namecheap.go @@ -1,10 +1,12 @@ package namedotcom import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/providers/dns/namecheap" + + "github.com/usual2970/certimate/internal/pkg/core" ) type ChallengeProviderConfig struct { @@ -14,9 +16,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := namecheap.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/namedotcom/namedotcom.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/namedotcom/namedotcom.go similarity index 78% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/namedotcom/namedotcom.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/namedotcom/namedotcom.go index daff3612..4d65aae9 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/namedotcom/namedotcom.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/namedotcom/namedotcom.go @@ -1,10 +1,12 @@ package namedotcom import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/providers/dns/namedotcom" + + "github.com/usual2970/certimate/internal/pkg/core" ) type ChallengeProviderConfig struct { @@ -14,9 +16,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := namedotcom.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/namesilo/namesilo.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/namesilo/namesilo.go similarity index 76% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/namesilo/namesilo.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/namesilo/namesilo.go index 5656136b..6326a89c 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/namesilo/namesilo.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/namesilo/namesilo.go @@ -1,10 +1,12 @@ package namesilo import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/providers/dns/namesilo" + + "github.com/usual2970/certimate/internal/pkg/core" ) type ChallengeProviderConfig struct { @@ -13,9 +15,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := namesilo.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/netcup/netcup.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/netcup/netcup.go similarity index 79% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/netcup/netcup.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/netcup/netcup.go index 43d7a694..1e2f160d 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/netcup/netcup.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/netcup/netcup.go @@ -1,10 +1,12 @@ package netcup import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/providers/dns/netcup" + + "github.com/usual2970/certimate/internal/pkg/core" ) type ChallengeProviderConfig struct { @@ -15,9 +17,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := netcup.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/netlify/netlify.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/netlify/netlify.go similarity index 76% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/netlify/netlify.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/netlify/netlify.go index f590372b..270bf067 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/netlify/netlify.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/netlify/netlify.go @@ -1,10 +1,12 @@ package netcup import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/providers/dns/netlify" + + "github.com/usual2970/certimate/internal/pkg/core" ) type ChallengeProviderConfig struct { @@ -13,9 +15,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := netlify.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/ns1/ns1.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/ns1/ns1.go similarity index 75% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/ns1/ns1.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/ns1/ns1.go index 1682e0c2..ab9e2a0b 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/ns1/ns1.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/ns1/ns1.go @@ -1,10 +1,12 @@ package ns1 import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/providers/dns/ns1" + + "github.com/usual2970/certimate/internal/pkg/core" ) type ChallengeProviderConfig struct { @@ -13,9 +15,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := ns1.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/porkbun/porkbun.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/porkbun/porkbun.go similarity index 78% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/porkbun/porkbun.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/porkbun/porkbun.go index ba60a791..a209875e 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/porkbun/porkbun.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/porkbun/porkbun.go @@ -1,10 +1,12 @@ package porkbun import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/providers/dns/porkbun" + + "github.com/usual2970/certimate/internal/pkg/core" ) type ChallengeProviderConfig struct { @@ -14,9 +16,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := porkbun.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/powerdns/powerdns.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/powerdns/powerdns.go similarity index 83% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/powerdns/powerdns.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/powerdns/powerdns.go index 7c87536c..1973c100 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/powerdns/powerdns.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/powerdns/powerdns.go @@ -2,12 +2,14 @@ package powerdns import ( "crypto/tls" + "errors" "net/http" "net/url" "time" - "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/providers/dns/pdns" + + "github.com/usual2970/certimate/internal/pkg/core" ) type ChallengeProviderConfig struct { @@ -18,9 +20,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } serverUrl, _ := url.Parse(config.ServerUrl) diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/rainyun/rainyun.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/rainyun/rainyun.go similarity index 75% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/rainyun/rainyun.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/rainyun/rainyun.go index 2deda0f1..25f354b2 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/rainyun/rainyun.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/rainyun/rainyun.go @@ -1,10 +1,12 @@ package rainyun import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/providers/dns/rainyun" + + "github.com/usual2970/certimate/internal/pkg/core" ) type ChallengeProviderConfig struct { @@ -13,9 +15,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := rainyun.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/tencentcloud-eo/internal/lego.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/tencentcloud-eo/internal/lego.go similarity index 100% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/tencentcloud-eo/internal/lego.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/tencentcloud-eo/internal/lego.go diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/tencentcloud-eo/tencentcloud_eo.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/tencentcloud-eo/tencentcloud_eo.go similarity index 71% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/tencentcloud-eo/tencentcloud_eo.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/tencentcloud-eo/tencentcloud_eo.go index 96dcd70d..1148851c 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/tencentcloud-eo/tencentcloud_eo.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/tencentcloud-eo/tencentcloud_eo.go @@ -1,11 +1,11 @@ package tencentcloudeo import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" - - internal "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/tencentcloud-eo/internal" + "github.com/usual2970/certimate/internal/pkg/core" + "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/tencentcloud-eo/internal" ) type ChallengeProviderConfig struct { @@ -16,9 +16,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := internal.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/tencentcloud/tencentcloud.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/tencentcloud/tencentcloud.go similarity index 78% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/tencentcloud/tencentcloud.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/tencentcloud/tencentcloud.go index 8ef3760c..11983c2e 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/tencentcloud/tencentcloud.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/tencentcloud/tencentcloud.go @@ -1,10 +1,12 @@ package tencentcloud import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/providers/dns/tencentcloud" + + "github.com/usual2970/certimate/internal/pkg/core" ) type ChallengeProviderConfig struct { @@ -14,9 +16,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := tencentcloud.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/ucloud-udnr/internal/lego.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/ucloud-udnr/internal/lego.go similarity index 100% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/ucloud-udnr/internal/lego.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/ucloud-udnr/internal/lego.go diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/ucloud-udnr/ucloud_udnr.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/ucloud-udnr/ucloud_udnr.go similarity index 77% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/ucloud-udnr/ucloud_udnr.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/ucloud-udnr/ucloud_udnr.go index fa1cce1d..b1935c59 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/ucloud-udnr/ucloud_udnr.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/ucloud-udnr/ucloud_udnr.go @@ -4,9 +4,8 @@ import ( "errors" "time" - "github.com/go-acme/lego/v4/challenge" - - "github.com/usual2970/certimate/internal/pkg/core/applicator/acme-dns01/lego-providers/ucloud-udnr/internal" + "github.com/usual2970/certimate/internal/pkg/core" + "github.com/usual2970/certimate/internal/pkg/core/ssl-applicator/acme-dns01/providers/ucloud-udnr/internal" ) type ChallengeProviderConfig struct { @@ -16,7 +15,7 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { return nil, errors.New("config is nil") } diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/vercel/vercel.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/vercel/vercel.go similarity index 78% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/vercel/vercel.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/vercel/vercel.go index 35fb5f02..b9cc0592 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/vercel/vercel.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/vercel/vercel.go @@ -1,10 +1,12 @@ package vercel import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/providers/dns/vercel" + + "github.com/usual2970/certimate/internal/pkg/core" ) type ChallengeProviderConfig struct { @@ -14,9 +16,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := vercel.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/volcengine/volcengine.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/volcengine/volcengine.go similarity index 78% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/volcengine/volcengine.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/volcengine/volcengine.go index e0a1ae91..123227f7 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/volcengine/volcengine.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/volcengine/volcengine.go @@ -1,10 +1,12 @@ package volcengine import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/providers/dns/volcengine" + + "github.com/usual2970/certimate/internal/pkg/core" ) type ChallengeProviderConfig struct { @@ -14,9 +16,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := volcengine.NewDefaultConfig() diff --git a/internal/pkg/core/applicator/acme-dns01/lego-providers/westcn/westcn.go b/internal/pkg/core/ssl-applicator/acme-dns01/providers/westcn/westcn.go similarity index 78% rename from internal/pkg/core/applicator/acme-dns01/lego-providers/westcn/westcn.go rename to internal/pkg/core/ssl-applicator/acme-dns01/providers/westcn/westcn.go index f79c5a8c..9b2f846f 100644 --- a/internal/pkg/core/applicator/acme-dns01/lego-providers/westcn/westcn.go +++ b/internal/pkg/core/ssl-applicator/acme-dns01/providers/westcn/westcn.go @@ -1,10 +1,12 @@ package westcn import ( + "errors" "time" - "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/providers/dns/westcn" + + "github.com/usual2970/certimate/internal/pkg/core" ) type ChallengeProviderConfig struct { @@ -14,9 +16,9 @@ type ChallengeProviderConfig struct { DnsTTL int32 `json:"dnsTTL,omitempty"` } -func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { +func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the acme challenge provider is nil") } providerConfig := westcn.NewDefaultConfig() diff --git a/internal/pkg/core/deployer/providers/1panel-console/1panel_console.go b/internal/pkg/core/ssl-deployer/providers/1panel-console/1panel_console.go similarity index 77% rename from internal/pkg/core/deployer/providers/1panel-console/1panel_console.go rename to internal/pkg/core/ssl-deployer/providers/1panel-console/1panel_console.go index aa51c7ae..7364fb3e 100644 --- a/internal/pkg/core/deployer/providers/1panel-console/1panel_console.go +++ b/internal/pkg/core/ssl-deployer/providers/1panel-console/1panel_console.go @@ -3,16 +3,17 @@ package onepanelconsole import ( "context" "crypto/tls" + "errors" "fmt" "log/slog" "strconv" - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" onepanelsdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/1panel" onepanelsdkv2 "github.com/usual2970/certimate/internal/pkg/sdk3rd/1panel/v2" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 1Panel 服务地址。 ServerUrl string `json:"serverUrl"` // 1Panel 版本。 @@ -26,41 +27,40 @@ type DeployerConfig struct { AutoRestart bool `json:"autoRestart"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger sdkClient any } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.ServerUrl, config.ApiVersion, config.ApiKey, config.AllowInsecureConnections) + client, err := createSDKClient(config.ServerUrl, config.ApiVersion, config.ApiKey, config.AllowInsecureConnections) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { // 设置面板 SSL 证书 switch sdkClient := d.sdkClient.(type) { case *onepanelsdk.Client: @@ -99,7 +99,7 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE panic("sdk client is not implemented") } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } const ( @@ -107,7 +107,7 @@ const ( sdkVersionV2 = "v2" ) -func createSdkClient(serverUrl, apiVersion, apiKey string, skipTlsVerify bool) (any, error) { +func createSDKClient(serverUrl, apiVersion, apiKey string, skipTlsVerify bool) (any, error) { if apiVersion == sdkVersionV1 { client, err := onepanelsdk.NewClient(serverUrl, apiKey) if err != nil { diff --git a/internal/pkg/core/deployer/providers/1panel-console/1panel_console_test.go b/internal/pkg/core/ssl-deployer/providers/1panel-console/1panel_console_test.go similarity index 72% rename from internal/pkg/core/deployer/providers/1panel-console/1panel_console_test.go rename to internal/pkg/core/ssl-deployer/providers/1panel-console/1panel_console_test.go index 0feae021..c13e5124 100644 --- a/internal/pkg/core/deployer/providers/1panel-console/1panel_console_test.go +++ b/internal/pkg/core/ssl-deployer/providers/1panel-console/1panel_console_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/1panel-console" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/1panel-console" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_1PANELCONSOLE_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_1PANELCONSOLE_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./1panel_console_test.go -args \ - --CERTIMATE_DEPLOYER_1PANELCONSOLE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_1PANELCONSOLE_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_1PANELCONSOLE_SERVERURL="http://127.0.0.1:20410" \ - --CERTIMATE_DEPLOYER_1PANELCONSOLE_APIVERSION="v1" \ - --CERTIMATE_DEPLOYER_1PANELCONSOLE_APIKEY="your-api-key" + --CERTIMATE_SSLDEPLOYER_1PANELCONSOLE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_1PANELCONSOLE_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_1PANELCONSOLE_SERVERURL="http://127.0.0.1:20410" \ + --CERTIMATE_SSLDEPLOYER_1PANELCONSOLE_APIVERSION="v1" \ + --CERTIMATE_SSLDEPLOYER_1PANELCONSOLE_APIKEY="your-api-key" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("APIKEY: %v", fApiKey), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ ServerUrl: fServerUrl, ApiVersion: fApiVersion, ApiKey: fApiKey, diff --git a/internal/pkg/core/deployer/providers/1panel-site/1panel_site.go b/internal/pkg/core/ssl-deployer/providers/1panel-site/1panel_site.go similarity index 82% rename from internal/pkg/core/deployer/providers/1panel-site/1panel_site.go rename to internal/pkg/core/ssl-deployer/providers/1panel-site/1panel_site.go index a0bf9dfd..32eb2678 100644 --- a/internal/pkg/core/deployer/providers/1panel-site/1panel_site.go +++ b/internal/pkg/core/ssl-deployer/providers/1panel-site/1panel_site.go @@ -8,14 +8,13 @@ import ( "log/slog" "strconv" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/1panel-ssl" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/1panel-ssl" onepanelsdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/1panel" onepanelsdkv2 "github.com/usual2970/certimate/internal/pkg/sdk3rd/1panel/v2" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 1Panel 服务地址。 ServerUrl string `json:"serverUrl"` // 1Panel 版本。 @@ -35,54 +34,54 @@ type DeployerConfig struct { CertificateId int64 `json:"certificateId,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient any - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient any + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.ServerUrl, config.ApiVersion, config.ApiKey, config.AllowInsecureConnections) + client, err := createSDKClient(config.ServerUrl, config.ApiVersion, config.ApiKey, config.AllowInsecureConnections) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ ServerUrl: config.ServerUrl, ApiVersion: config.ApiVersion, ApiKey: config.ApiKey, AllowInsecureConnections: config.AllowInsecureConnections, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { // 根据部署资源类型决定部署方式 switch d.config.ResourceType { case RESOURCE_TYPE_WEBSITE: @@ -99,16 +98,16 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("unsupported resource type '%s'", d.config.ResourceType) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func (d *DeployerProvider) deployToWebsite(ctx context.Context, certPEM string, privkeyPEM string) error { +func (d *SSLDeployerProvider) deployToWebsite(ctx context.Context, certPEM string, privkeyPEM string) error { if d.config.WebsiteId == 0 { return errors.New("config `websiteId` is required") } - // 上传证书到面板 - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -179,7 +178,7 @@ func (d *DeployerProvider) deployToWebsite(ctx context.Context, certPEM string, return nil } -func (d *DeployerProvider) deployToCertificate(ctx context.Context, certPEM string, privkeyPEM string) error { +func (d *SSLDeployerProvider) deployToCertificate(ctx context.Context, certPEM string, privkeyPEM string) error { if d.config.CertificateId == 0 { return errors.New("config `certificateId` is required") } @@ -245,7 +244,7 @@ const ( sdkVersionV2 = "v2" ) -func createSdkClient(serverUrl, apiVersion, apiKey string, skipTlsVerify bool) (any, error) { +func createSDKClient(serverUrl, apiVersion, apiKey string, skipTlsVerify bool) (any, error) { if apiVersion == sdkVersionV1 { client, err := onepanelsdk.NewClient(serverUrl, apiKey) if err != nil { diff --git a/internal/pkg/core/deployer/providers/1panel-site/1panel_site_test.go b/internal/pkg/core/ssl-deployer/providers/1panel-site/1panel_site_test.go similarity index 72% rename from internal/pkg/core/deployer/providers/1panel-site/1panel_site_test.go rename to internal/pkg/core/ssl-deployer/providers/1panel-site/1panel_site_test.go index 91b1ebb0..21948897 100644 --- a/internal/pkg/core/deployer/providers/1panel-site/1panel_site_test.go +++ b/internal/pkg/core/ssl-deployer/providers/1panel-site/1panel_site_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/1panel-site" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/1panel-site" ) var ( @@ -21,7 +21,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_1PANELSITE_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_1PANELSITE_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -35,12 +35,12 @@ func init() { Shell command to run this test: go test -v ./1panel_site_test.go -args \ - --CERTIMATE_DEPLOYER_1PANELSITE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_1PANELSITE_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_1PANELSITE_SERVERURL="http://127.0.0.1:20410" \ - --CERTIMATE_DEPLOYER_1PANELSITE_APIVERSION="v1" \ - --CERTIMATE_DEPLOYER_1PANELSITE_APIKEY="your-api-key" \ - --CERTIMATE_DEPLOYER_1PANELSITE_WEBSITEID="your-website-id" + --CERTIMATE_SSLDEPLOYER_1PANELSITE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_1PANELSITE_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_1PANELSITE_SERVERURL="http://127.0.0.1:20410" \ + --CERTIMATE_SSLDEPLOYER_1PANELSITE_APIVERSION="v1" \ + --CERTIMATE_SSLDEPLOYER_1PANELSITE_APIKEY="your-api-key" \ + --CERTIMATE_SSLDEPLOYER_1PANELSITE_WEBSITEID="your-website-id" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -56,7 +56,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("WEBSITEID: %v", fWebsiteId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ ServerUrl: fServerUrl, ApiVersion: fApiVersion, ApiKey: fApiKey, diff --git a/internal/pkg/core/deployer/providers/1panel-site/consts.go b/internal/pkg/core/ssl-deployer/providers/1panel-site/consts.go similarity index 100% rename from internal/pkg/core/deployer/providers/1panel-site/consts.go rename to internal/pkg/core/ssl-deployer/providers/1panel-site/consts.go diff --git a/internal/pkg/core/deployer/providers/aliyun-alb/aliyun_alb.go b/internal/pkg/core/ssl-deployer/providers/aliyun-alb/aliyun_alb.go similarity index 88% rename from internal/pkg/core/deployer/providers/aliyun-alb/aliyun_alb.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-alb/aliyun_alb.go index 0f22091a..5af4cfa3 100644 --- a/internal/pkg/core/deployer/providers/aliyun-alb/aliyun_alb.go +++ b/internal/pkg/core/ssl-deployer/providers/aliyun-alb/aliyun_alb.go @@ -15,12 +15,11 @@ import ( "github.com/alibabacloud-go/tea/tea" "golang.org/x/exp/slices" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/aliyun-cas" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/aliyun-cas" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 阿里云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 阿里云 AccessKeySecret。 @@ -42,56 +41,56 @@ type DeployerConfig struct { Domain string `json:"domain,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClients *wSdkClients - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClients *wSDKClients + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -type wSdkClients struct { +type wSDKClients struct { ALB *alialb.Client CAS *alicas.Client } -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - clients, err := createSdkClients(config.AccessKeyId, config.AccessKeySecret, config.Region) + clients, err := createSDKClients(config.AccessKeyId, config.AccessKeySecret, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk clients: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := createSslUploader(config.AccessKeyId, config.AccessKeySecret, config.ResourceGroupId, config.Region) + sslmgr, err := createSSLManager(config.AccessKeyId, config.AccessKeySecret, config.ResourceGroupId, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClients: clients, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClients: clients, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 CAS - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -114,10 +113,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("unsupported resource type '%s'", d.config.ResourceType) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId string) error { +func (d *SSLDeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId string) error { if d.config.LoadbalancerId == "" { return errors.New("config `loadbalancerId` is required") } @@ -231,7 +230,7 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId return nil } -func (d *DeployerProvider) deployToListener(ctx context.Context, cloudCertId string) error { +func (d *SSLDeployerProvider) deployToListener(ctx context.Context, cloudCertId string) error { if d.config.ListenerId == "" { return errors.New("config `listenerId` is required") } @@ -244,7 +243,7 @@ func (d *DeployerProvider) deployToListener(ctx context.Context, cloudCertId str return nil } -func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudListenerId string, cloudCertId string) error { +func (d *SSLDeployerProvider) updateListenerCertificate(ctx context.Context, cloudListenerId string, cloudCertId string) error { // 查询监听的属性 // REF: https://help.aliyun.com/zh/slb/application-load-balancer/developer-reference/api-alb-2020-06-16-getlistenerattribute getListenerAttributeReq := &alialb.GetListenerAttributeRequest{ @@ -421,7 +420,7 @@ func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudL return nil } -func createSdkClients(accessKeyId, accessKeySecret, region string) (*wSdkClients, error) { +func createSDKClients(accessKeyId, accessKeySecret, region string) (*wSDKClients, error) { // 接入点一览 https://api.aliyun.com/product/Alb var albEndpoint string switch region { @@ -459,13 +458,13 @@ func createSdkClients(accessKeyId, accessKeySecret, region string) (*wSdkClients return nil, err } - return &wSdkClients{ + return &wSDKClients{ ALB: albClient, CAS: casClient, }, nil } -func createSslUploader(accessKeyId, accessKeySecret, resourceGroupId, region string) (uploader.Uploader, error) { +func createSSLManager(accessKeyId, accessKeySecret, resourceGroupId, region string) (core.SSLManager, error) { casRegion := region if casRegion != "" { // 阿里云 CAS 服务接入点是独立于 ALB 服务的 @@ -478,11 +477,11 @@ func createSslUploader(accessKeyId, accessKeySecret, resourceGroupId, region str } } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: accessKeyId, AccessKeySecret: accessKeySecret, ResourceGroupId: resourceGroupId, Region: casRegion, }) - return uploader, err + return sslmgr, err } diff --git a/internal/pkg/core/deployer/providers/aliyun-alb/aliyun_alb_test.go b/internal/pkg/core/ssl-deployer/providers/aliyun-alb/aliyun_alb_test.go similarity index 77% rename from internal/pkg/core/deployer/providers/aliyun-alb/aliyun_alb_test.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-alb/aliyun_alb_test.go index 11d5b565..d9f712c7 100644 --- a/internal/pkg/core/deployer/providers/aliyun-alb/aliyun_alb_test.go +++ b/internal/pkg/core/ssl-deployer/providers/aliyun-alb/aliyun_alb_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-alb" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aliyun-alb" ) var ( @@ -23,7 +23,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_ALIYUNALB_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_ALIYUNALB_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -39,14 +39,14 @@ func init() { Shell command to run this test: go test -v ./aliyun_alb_test.go -args \ - --CERTIMATE_DEPLOYER_ALIYUNALB_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_ALIYUNALB_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_ALIYUNALB_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_ALIYUNALB_ACCESSKEYSECRET="your-access-key-secret" \ - --CERTIMATE_DEPLOYER_ALIYUNALB_REGION="cn-hangzhou" \ - --CERTIMATE_DEPLOYER_ALIYUNALB_LOADBALANCERID="your-alb-instance-id" \ - --CERTIMATE_DEPLOYER_ALIYUNALB_LISTENERID="your-alb-listener-id" \ - --CERTIMATE_DEPLOYER_ALIYUNALB_DOMAIN="your-alb-sni-domain" + --CERTIMATE_SSLDEPLOYER_ALIYUNALB_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNALB_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNALB_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNALB_ACCESSKEYSECRET="your-access-key-secret" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNALB_REGION="cn-hangzhou" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNALB_LOADBALANCERID="your-alb-instance-id" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNALB_LISTENERID="your-alb-listener-id" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNALB_DOMAIN="your-alb-sni-domain" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -63,7 +63,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, Region: fRegion, @@ -99,7 +99,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, Region: fRegion, diff --git a/internal/pkg/core/deployer/providers/aliyun-alb/consts.go b/internal/pkg/core/ssl-deployer/providers/aliyun-alb/consts.go similarity index 100% rename from internal/pkg/core/deployer/providers/aliyun-alb/consts.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-alb/consts.go diff --git a/internal/pkg/core/deployer/providers/aliyun-apigw/aliyun_apigw.go b/internal/pkg/core/ssl-deployer/providers/aliyun-apigw/aliyun_apigw.go similarity index 80% rename from internal/pkg/core/deployer/providers/aliyun-apigw/aliyun_apigw.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-apigw/aliyun_apigw.go index 63d6048a..b008ff74 100644 --- a/internal/pkg/core/deployer/providers/aliyun-apigw/aliyun_apigw.go +++ b/internal/pkg/core/ssl-deployer/providers/aliyun-apigw/aliyun_apigw.go @@ -13,13 +13,12 @@ import ( aliopen "github.com/alibabacloud-go/darabonba-openapi/v2/client" "github.com/alibabacloud-go/tea/tea" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/aliyun-cas" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/aliyun-cas" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 阿里云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 阿里云 AccessKeySecret。 @@ -40,53 +39,52 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClients *wSdkClients - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClients *wSDKClients + sslManager core.SSLManager } -type wSdkClients struct { +type wSDKClients struct { CloudNativeAPIGateway *aliapig.Client TraditionalAPIGateway *alicloudapi.Client } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - clients, err := createSdkClients(config.AccessKeyId, config.AccessKeySecret, config.Region) + clients, err := createSDKClients(config.AccessKeyId, config.AccessKeySecret, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk clients: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := createSslUploader(config.AccessKeyId, config.AccessKeySecret, config.ResourceGroupId, config.Region) + sslmgr, err := createSSLManager(config.AccessKeyId, config.AccessKeySecret, config.ResourceGroupId, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClients: clients, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClients: clients, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { switch d.config.ServiceType { case SERVICE_TYPE_TRADITIONAL: if err := d.deployToTraditional(ctx, certPEM, privkeyPEM); err != nil { @@ -102,10 +100,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("unsupported service type '%s'", string(d.config.ServiceType)) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func (d *DeployerProvider) deployToTraditional(ctx context.Context, certPEM string, privkeyPEM string) error { +func (d *SSLDeployerProvider) deployToTraditional(ctx context.Context, certPEM string, privkeyPEM string) error { if d.config.GroupId == "" { return errors.New("config `groupId` is required") } @@ -131,7 +129,7 @@ func (d *DeployerProvider) deployToTraditional(ctx context.Context, certPEM stri return nil } -func (d *DeployerProvider) deployToCloudNative(ctx context.Context, certPEM string, privkeyPEM string) error { +func (d *SSLDeployerProvider) deployToCloudNative(ctx context.Context, certPEM string, privkeyPEM string) error { if d.config.GatewayId == "" { return errors.New("config `gatewayId` is required") } @@ -196,8 +194,8 @@ func (d *DeployerProvider) deployToCloudNative(ctx context.Context, certPEM stri return fmt.Errorf("failed to execute sdk request 'apig.GetDomain': %w", err) } - // 上传证书到 CAS - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -225,7 +223,7 @@ func (d *DeployerProvider) deployToCloudNative(ctx context.Context, certPEM stri return nil } -func createSdkClients(accessKeyId, accessKeySecret, region string) (*wSdkClients, error) { +func createSDKClients(accessKeyId, accessKeySecret, region string) (*wSDKClients, error) { // 接入点一览 https://api.aliyun.com/product/APIG cloudNativeAPIGEndpoint := strings.ReplaceAll(fmt.Sprintf("apig.%s.aliyuncs.com", region), "..", ".") cloudNativeAPIGConfig := &aliopen.Config{ @@ -250,13 +248,13 @@ func createSdkClients(accessKeyId, accessKeySecret, region string) (*wSdkClients return nil, err } - return &wSdkClients{ + return &wSDKClients{ CloudNativeAPIGateway: cloudNativeAPIGClient, TraditionalAPIGateway: traditionalAPIGClient, }, nil } -func createSslUploader(accessKeyId, accessKeySecret, resourceGroupId, region string) (uploader.Uploader, error) { +func createSSLManager(accessKeyId, accessKeySecret, resourceGroupId, region string) (core.SSLManager, error) { casRegion := region if casRegion != "" { // 阿里云 CAS 服务接入点是独立于 APIGateway 服务的 @@ -269,11 +267,11 @@ func createSslUploader(accessKeyId, accessKeySecret, resourceGroupId, region str } } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: accessKeyId, AccessKeySecret: accessKeySecret, ResourceGroupId: resourceGroupId, Region: casRegion, }) - return uploader, err + return sslmgr, err } diff --git a/internal/pkg/core/deployer/providers/aliyun-apigw/aliyun_apigw_test.go b/internal/pkg/core/ssl-deployer/providers/aliyun-apigw/aliyun_apigw_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/aliyun-apigw/aliyun_apigw_test.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-apigw/aliyun_apigw_test.go index 7807a927..199dfb48 100644 --- a/internal/pkg/core/deployer/providers/aliyun-apigw/aliyun_apigw_test.go +++ b/internal/pkg/core/ssl-deployer/providers/aliyun-apigw/aliyun_apigw_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-apigw" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aliyun-apigw" ) var ( @@ -24,7 +24,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_ALIYUNAPIGW_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_ALIYUNAPIGW_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -41,15 +41,15 @@ func init() { Shell command to run this test: go test -v ./aliyun_apigw_test.go -args \ - --CERTIMATE_DEPLOYER_ALIYUNAPIGW_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_ALIYUNAPIGW_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_ALIYUNAPIGW_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_ALIYUNAPIGW_ACCESSKEYSECRET="your-access-key-secret" \ - --CERTIMATE_DEPLOYER_ALIYUNAPIGW_REGION="cn-hangzhou" \ - --CERTIMATE_DEPLOYER_ALIYUNAPIGW_GATEWAYID="your-api-gateway-id" \ - --CERTIMATE_DEPLOYER_ALIYUNAPIGW_GROUPID="your-api-group-id" \ - --CERTIMATE_DEPLOYER_ALIYUNAPIGW_SERVICETYPE="cloudnative" \ - --CERTIMATE_DEPLOYER_ALIYUNAPIGW_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_ALIYUNAPIGW_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNAPIGW_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNAPIGW_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNAPIGW_ACCESSKEYSECRET="your-access-key-secret" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNAPIGW_REGION="cn-hangzhou" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNAPIGW_GATEWAYID="your-api-gateway-id" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNAPIGW_GROUPID="your-api-group-id" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNAPIGW_SERVICETYPE="cloudnative" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNAPIGW_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -68,7 +68,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, Region: fRegion, diff --git a/internal/pkg/core/deployer/providers/aliyun-apigw/consts.go b/internal/pkg/core/ssl-deployer/providers/aliyun-apigw/consts.go similarity index 100% rename from internal/pkg/core/deployer/providers/aliyun-apigw/consts.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-apigw/consts.go diff --git a/internal/pkg/core/deployer/providers/aliyun-cas-deploy/aliyun_cas_deploy.go b/internal/pkg/core/ssl-deployer/providers/aliyun-cas-deploy/aliyun_cas_deploy.go similarity index 75% rename from internal/pkg/core/deployer/providers/aliyun-cas-deploy/aliyun_cas_deploy.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-cas-deploy/aliyun_cas_deploy.go index cfcdaa18..52bc4e6b 100644 --- a/internal/pkg/core/deployer/providers/aliyun-cas-deploy/aliyun_cas_deploy.go +++ b/internal/pkg/core/ssl-deployer/providers/aliyun-cas-deploy/aliyun_cas_deploy.go @@ -12,12 +12,11 @@ import ( aliopen "github.com/alibabacloud-go/darabonba-openapi/v2/client" "github.com/alibabacloud-go/tea/tea" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/aliyun-cas" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/aliyun-cas" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 阿里云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 阿里云 AccessKeySecret。 @@ -33,55 +32,55 @@ type DeployerConfig struct { ContactIds []string `json:"contactIds"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *alicas.Client - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *alicas.Client + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret, config.Region) + client, err := createSDKClient(config.AccessKeyId, config.AccessKeySecret, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := createSslUploader(config.AccessKeyId, config.AccessKeySecret, config.ResourceGroupId, config.Region) + sslmgr, err := createSSLManager(config.AccessKeyId, config.AccessKeySecret, config.ResourceGroupId, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { if len(d.config.ResourceIds) == 0 { return nil, errors.New("config `resourceIds` is required") } - // 上传证书到 CAS - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -152,10 +151,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE time.Sleep(time.Second * 5) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(accessKeyId, accessKeySecret, region string) (*alicas.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (*alicas.Client, error) { // 接入点一览 https://api.aliyun.com/product/cas var endpoint string switch region { @@ -179,7 +178,7 @@ func createSdkClient(accessKeyId, accessKeySecret, region string) (*alicas.Clien return client, nil } -func createSslUploader(accessKeyId, accessKeySecret, resourceGroupId, region string) (uploader.Uploader, error) { +func createSSLManager(accessKeyId, accessKeySecret, resourceGroupId, region string) (core.SSLManager, error) { casRegion := region if casRegion != "" { // 阿里云 CAS 服务接入点是独立于其他服务的 @@ -192,11 +191,11 @@ func createSslUploader(accessKeyId, accessKeySecret, resourceGroupId, region str } } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: accessKeyId, AccessKeySecret: accessKeySecret, ResourceGroupId: resourceGroupId, Region: casRegion, }) - return uploader, err + return sslmgr, err } diff --git a/internal/pkg/core/ssl-deployer/providers/aliyun-cas/aliyun_cas.go b/internal/pkg/core/ssl-deployer/providers/aliyun-cas/aliyun_cas.go new file mode 100644 index 00000000..26bdf7cd --- /dev/null +++ b/internal/pkg/core/ssl-deployer/providers/aliyun-cas/aliyun_cas.go @@ -0,0 +1,74 @@ +package aliyuncas + +import ( + "context" + "errors" + "fmt" + "log/slog" + + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/aliyun-cas" +) + +type SSLDeployerProviderConfig struct { + // 阿里云 AccessKeyId。 + AccessKeyId string `json:"accessKeyId"` + // 阿里云 AccessKeySecret。 + AccessKeySecret string `json:"accessKeySecret"` + // 阿里云资源组 ID。 + ResourceGroupId string `json:"resourceGroupId,omitempty"` + // 阿里云地域。 + Region string `json:"region"` +} + +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sslManager core.SSLManager +} + +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) + +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { + if config == nil { + return nil, errors.New("the configuration of the ssl deployer provider is nil") + } + + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ + AccessKeyId: config.AccessKeyId, + AccessKeySecret: config.AccessKeySecret, + ResourceGroupId: config.ResourceGroupId, + Region: config.Region, + }) + if err != nil { + return nil, fmt.Errorf("could not create ssl manager: %w", err) + } + + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sslManager: sslmgr, + }, nil +} + +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { + if logger == nil { + d.logger = slog.New(slog.DiscardHandler) + } else { + d.logger = logger + } + + d.sslManager.SetLogger(logger) +} + +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) + if err != nil { + return nil, fmt.Errorf("failed to upload certificate file: %w", err) + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) + } + + return &core.SSLDeployResult{}, nil +} diff --git a/internal/pkg/core/deployer/providers/aliyun-cdn/aliyun_cdn.go b/internal/pkg/core/ssl-deployer/providers/aliyun-cdn/aliyun_cdn.go similarity index 71% rename from internal/pkg/core/deployer/providers/aliyun-cdn/aliyun_cdn.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-cdn/aliyun_cdn.go index 96dd211f..d63cd515 100644 --- a/internal/pkg/core/deployer/providers/aliyun-cdn/aliyun_cdn.go +++ b/internal/pkg/core/ssl-deployer/providers/aliyun-cdn/aliyun_cdn.go @@ -2,6 +2,7 @@ package aliyuncdn import ( "context" + "errors" "fmt" "log/slog" "strings" @@ -10,11 +11,10 @@ import ( alicdn "github.com/alibabacloud-go/cdn-20180510/v5/client" aliopen "github.com/alibabacloud-go/darabonba-openapi/v2/client" "github.com/alibabacloud-go/tea/tea" - - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 阿里云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 阿里云 AccessKeySecret。 @@ -25,41 +25,40 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger sdkClient *alicdn.Client } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret) + client, err := createSDKClient(config.AccessKeyId, config.AccessKeySecret) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { // "*.example.com" → ".example.com",适配阿里云 CDN 要求的泛域名格式 domain := strings.TrimPrefix(d.config.Domain, "*") @@ -79,10 +78,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'cdn.SetCdnDomainSSLCertificate': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(accessKeyId, accessKeySecret string) (*alicdn.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret string) (*alicdn.Client, error) { config := &aliopen.Config{ AccessKeyId: tea.String(accessKeyId), AccessKeySecret: tea.String(accessKeySecret), diff --git a/internal/pkg/core/deployer/providers/aliyun-cdn/aliyun_cdn_test.go b/internal/pkg/core/ssl-deployer/providers/aliyun-cdn/aliyun_cdn_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/aliyun-cdn/aliyun_cdn_test.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-cdn/aliyun_cdn_test.go index b07611da..c5957f4d 100644 --- a/internal/pkg/core/deployer/providers/aliyun-cdn/aliyun_cdn_test.go +++ b/internal/pkg/core/ssl-deployer/providers/aliyun-cdn/aliyun_cdn_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-cdn" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aliyun-cdn" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_ALIYUNCDN_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_ALIYUNCDN_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./aliyun_cdn_test.go -args \ - --CERTIMATE_DEPLOYER_ALIYUNCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_ALIYUNCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_ALIYUNCDN_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_ALIYUNCDN_ACCESSKEYSECRET="your-access-key-secret" \ - --CERTIMATE_DEPLOYER_ALIYUNCDN_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_ALIYUNCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNCDN_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNCDN_ACCESSKEYSECRET="your-access-key-secret" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNCDN_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, Domain: fDomain, diff --git a/internal/pkg/core/deployer/providers/aliyun-clb/aliyun_clb.go b/internal/pkg/core/ssl-deployer/providers/aliyun-clb/aliyun_clb.go similarity index 83% rename from internal/pkg/core/deployer/providers/aliyun-clb/aliyun_clb.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-clb/aliyun_clb.go index 1722e4fd..a65ce5cf 100644 --- a/internal/pkg/core/deployer/providers/aliyun-clb/aliyun_clb.go +++ b/internal/pkg/core/ssl-deployer/providers/aliyun-clb/aliyun_clb.go @@ -10,12 +10,11 @@ import ( alislb "github.com/alibabacloud-go/slb-20140515/v4/client" "github.com/alibabacloud-go/tea/tea" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/aliyun-slb" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/aliyun-slb" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 阿里云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 阿里云 AccessKeySecret。 @@ -37,51 +36,51 @@ type DeployerConfig struct { Domain string `json:"domain,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *alislb.Client - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *alislb.Client + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret, config.Region) + client, err := createSDKClient(config.AccessKeyId, config.AccessKeySecret, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := createSslUploader(config.AccessKeyId, config.AccessKeySecret, config.ResourceGroupId, config.Region) + sslmgr, err := createSSLManager(config.AccessKeyId, config.AccessKeySecret, config.ResourceGroupId, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 SLB - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -104,10 +103,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("unsupported resource type '%s'", d.config.ResourceType) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId string) error { +func (d *SSLDeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId string) error { if d.config.LoadbalancerId == "" { return errors.New("config `loadbalancerId` is required") } @@ -188,7 +187,7 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId return nil } -func (d *DeployerProvider) deployToListener(ctx context.Context, cloudCertId string) error { +func (d *SSLDeployerProvider) deployToListener(ctx context.Context, cloudCertId string) error { if d.config.LoadbalancerId == "" { return errors.New("config `loadbalancerId` is required") } @@ -204,7 +203,7 @@ func (d *DeployerProvider) deployToListener(ctx context.Context, cloudCertId str return nil } -func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudLoadbalancerId string, cloudListenerPort int32, cloudCertId string) error { +func (d *SSLDeployerProvider) updateListenerCertificate(ctx context.Context, cloudLoadbalancerId string, cloudListenerPort int32, cloudCertId string) error { // 查询监听配置 // REF: https://help.aliyun.com/zh/slb/classic-load-balancer/developer-reference/api-slb-2014-05-15-describeloadbalancerhttpslistenerattribute describeLoadBalancerHTTPSListenerAttributeReq := &alislb.DescribeLoadBalancerHTTPSListenerAttributeRequest{ @@ -281,7 +280,7 @@ func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudL return nil } -func createSdkClient(accessKeyId, accessKeySecret, region string) (*alislb.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (*alislb.Client, error) { // 接入点一览 https://api.aliyun.com/product/Slb var endpoint string switch region { @@ -309,12 +308,12 @@ func createSdkClient(accessKeyId, accessKeySecret, region string) (*alislb.Clien return client, nil } -func createSslUploader(accessKeyId, accessKeySecret, resourceGroupId, region string) (uploader.Uploader, error) { - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ +func createSSLManager(accessKeyId, accessKeySecret, resourceGroupId, region string) (core.SSLManager, error) { + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: accessKeyId, AccessKeySecret: accessKeySecret, ResourceGroupId: resourceGroupId, Region: region, }) - return uploader, err + return sslmgr, err } diff --git a/internal/pkg/core/deployer/providers/aliyun-clb/aliyun_clb_test.go b/internal/pkg/core/ssl-deployer/providers/aliyun-clb/aliyun_clb_test.go similarity index 77% rename from internal/pkg/core/deployer/providers/aliyun-clb/aliyun_clb_test.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-clb/aliyun_clb_test.go index dfa46173..a74472fb 100644 --- a/internal/pkg/core/deployer/providers/aliyun-clb/aliyun_clb_test.go +++ b/internal/pkg/core/ssl-deployer/providers/aliyun-clb/aliyun_clb_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-clb" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aliyun-clb" ) var ( @@ -23,7 +23,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_ALIYUNCLB_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_ALIYUNCLB_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -39,14 +39,14 @@ func init() { Shell command to run this test: go test -v ./aliyun_clb_test.go -args \ - --CERTIMATE_DEPLOYER_ALIYUNCLB_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_ALIYUNCLB_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_ALIYUNCLB_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_ALIYUNCLB_ACCESSKEYSECRET="your-access-key-secret" \ - --CERTIMATE_DEPLOYER_ALIYUNCLB_REGION="cn-hangzhou" \ - --CERTIMATE_DEPLOYER_ALIYUNCLB_LOADBALANCERID="your-clb-instance-id" \ - --CERTIMATE_DEPLOYER_ALIYUNCLB_LISTENERPORT=443 \ - --CERTIMATE_DEPLOYER_ALIYUNCLB_DOMAIN="your-clb-sni-domain" + --CERTIMATE_SSLDEPLOYER_ALIYUNCLB_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNCLB_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNCLB_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNCLB_ACCESSKEYSECRET="your-access-key-secret" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNCLB_REGION="cn-hangzhou" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNCLB_LOADBALANCERID="your-clb-instance-id" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNCLB_LISTENERPORT=443 \ + --CERTIMATE_SSLDEPLOYER_ALIYUNCLB_DOMAIN="your-clb-sni-domain" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -63,7 +63,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, Region: fRegion, @@ -99,7 +99,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("LISTENERPORT: %v", fListenerPort), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, Region: fRegion, diff --git a/internal/pkg/core/deployer/providers/aliyun-clb/consts.go b/internal/pkg/core/ssl-deployer/providers/aliyun-clb/consts.go similarity index 100% rename from internal/pkg/core/deployer/providers/aliyun-clb/consts.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-clb/consts.go diff --git a/internal/pkg/core/deployer/providers/aliyun-dcdn/aliyun_dcdn.go b/internal/pkg/core/ssl-deployer/providers/aliyun-dcdn/aliyun_dcdn.go similarity index 70% rename from internal/pkg/core/deployer/providers/aliyun-dcdn/aliyun_dcdn.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-dcdn/aliyun_dcdn.go index a5109163..9055bf42 100644 --- a/internal/pkg/core/deployer/providers/aliyun-dcdn/aliyun_dcdn.go +++ b/internal/pkg/core/ssl-deployer/providers/aliyun-dcdn/aliyun_dcdn.go @@ -2,6 +2,7 @@ package aliyundcdn import ( "context" + "errors" "fmt" "log/slog" "strings" @@ -10,11 +11,10 @@ import ( aliopen "github.com/alibabacloud-go/darabonba-openapi/v2/client" alidcdn "github.com/alibabacloud-go/dcdn-20180115/v3/client" "github.com/alibabacloud-go/tea/tea" - - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 阿里云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 阿里云 AccessKeySecret。 @@ -25,41 +25,44 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger sdkClient *alidcdn.Client } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret) + client, err := createSDKClient(config.AccessKeyId, config.AccessKeySecret) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + if d.config.Domain == "" { + return nil, errors.New("config `domain` is required") + } + // "*.example.com" → ".example.com",适配阿里云 DCDN 要求的泛域名格式 domain := strings.TrimPrefix(d.config.Domain, "*") @@ -79,10 +82,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'dcdn.SetDcdnDomainSSLCertificate': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(accessKeyId, accessKeySecret string) (*alidcdn.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret string) (*alidcdn.Client, error) { config := &aliopen.Config{ AccessKeyId: tea.String(accessKeyId), AccessKeySecret: tea.String(accessKeySecret), diff --git a/internal/pkg/core/deployer/providers/aliyun-dcdn/aliyun_dcdn_test.go b/internal/pkg/core/ssl-deployer/providers/aliyun-dcdn/aliyun_dcdn_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/aliyun-dcdn/aliyun_dcdn_test.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-dcdn/aliyun_dcdn_test.go index deb489c6..113d2bfa 100644 --- a/internal/pkg/core/deployer/providers/aliyun-dcdn/aliyun_dcdn_test.go +++ b/internal/pkg/core/ssl-deployer/providers/aliyun-dcdn/aliyun_dcdn_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-dcdn" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aliyun-dcdn" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_ALIYUNDCDN_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_ALIYUNDCDN_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./aliyun_dcdn_test.go -args \ - --CERTIMATE_DEPLOYER_ALIYUNDCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_ALIYUNDCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_ALIYUNDCDN_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_ALIYUNDCDN_ACCESSKEYSECRET="your-access-key-secret" \ - --CERTIMATE_DEPLOYER_ALIYUNDCDN_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_ALIYUNDCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNDCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNDCDN_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNDCDN_ACCESSKEYSECRET="your-access-key-secret" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNDCDN_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, Domain: fDomain, diff --git a/internal/pkg/core/deployer/providers/aliyun-ddos/aliyun_ddos.go b/internal/pkg/core/ssl-deployer/providers/aliyun-ddos/aliyun_ddos.go similarity index 62% rename from internal/pkg/core/deployer/providers/aliyun-ddos/aliyun_ddos.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-ddos/aliyun_ddos.go index f0bd3476..78892d64 100644 --- a/internal/pkg/core/deployer/providers/aliyun-ddos/aliyun_ddos.go +++ b/internal/pkg/core/ssl-deployer/providers/aliyun-ddos/aliyun_ddos.go @@ -12,12 +12,11 @@ import ( aliddos "github.com/alibabacloud-go/ddoscoo-20200101/v4/client" "github.com/alibabacloud-go/tea/tea" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/aliyun-slb" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/aliyun-slb" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 阿里云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 阿里云 AccessKeySecret。 @@ -30,55 +29,55 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *aliddos.Client - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *aliddos.Client + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret, config.Region) + client, err := createSDKClient(config.AccessKeyId, config.AccessKeySecret, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := createSslUploader(config.AccessKeyId, config.AccessKeySecret, config.ResourceGroupId, config.Region) + sslmgr, err := createSSLManager(config.AccessKeyId, config.AccessKeySecret, config.ResourceGroupId, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { if d.config.Domain == "" { return nil, errors.New("config `domain` is required") } - // 上传证书到 CAS - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -98,10 +97,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'dcdn.AssociateWebCert': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(accessKeyId, accessKeySecret, region string) (*aliddos.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (*aliddos.Client, error) { // 接入点一览 https://api.aliyun.com/product/ddoscoo config := &aliopen.Config{ AccessKeyId: tea.String(accessKeyId), @@ -117,7 +116,7 @@ func createSdkClient(accessKeyId, accessKeySecret, region string) (*aliddos.Clie return client, nil } -func createSslUploader(accessKeyId, accessKeySecret, resourceGroupId, region string) (uploader.Uploader, error) { +func createSSLManager(accessKeyId, accessKeySecret, resourceGroupId, region string) (core.SSLManager, error) { casRegion := region if casRegion != "" { // 阿里云 CAS 服务接入点是独立于 Anti-DDoS 服务的 @@ -130,11 +129,11 @@ func createSslUploader(accessKeyId, accessKeySecret, resourceGroupId, region str } } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: accessKeyId, AccessKeySecret: accessKeySecret, ResourceGroupId: resourceGroupId, Region: casRegion, }) - return uploader, err + return sslmgr, err } diff --git a/internal/pkg/core/deployer/providers/aliyun-ddos/aliyun_ddos_test.go b/internal/pkg/core/ssl-deployer/providers/aliyun-ddos/aliyun_ddos_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/aliyun-ddos/aliyun_ddos_test.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-ddos/aliyun_ddos_test.go index b7f5ad34..2f326065 100644 --- a/internal/pkg/core/deployer/providers/aliyun-ddos/aliyun_ddos_test.go +++ b/internal/pkg/core/ssl-deployer/providers/aliyun-ddos/aliyun_ddos_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-ddos" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aliyun-ddos" ) var ( @@ -21,7 +21,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_ALIYUNDDOS_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_ALIYUNDDOS_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -35,12 +35,12 @@ func init() { Shell command to run this test: go test -v ./aliyun_ddos_test.go -args \ - --CERTIMATE_DEPLOYER_ALIYUNDDOS_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_ALIYUNDDOS_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_ALIYUNDDOS_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_ALIYUNDDOS_ACCESSKEYSECRET="your-access-key-secret" \ - --CERTIMATE_DEPLOYER_ALIYUNDDOS_REGION="cn-hangzhou" \ - --CERTIMATE_DEPLOYER_ALIYUNDDOS_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_ALIYUNDDOS_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNDDOS_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNDDOS_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNDDOS_ACCESSKEYSECRET="your-access-key-secret" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNDDOS_REGION="cn-hangzhou" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNDDOS_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -56,7 +56,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, Region: fRegion, diff --git a/internal/pkg/core/deployer/providers/aliyun-esa/aliyun_esa.go b/internal/pkg/core/ssl-deployer/providers/aliyun-esa/aliyun_esa.go similarity index 61% rename from internal/pkg/core/deployer/providers/aliyun-esa/aliyun_esa.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-esa/aliyun_esa.go index e4906fb5..0ad3dd9b 100644 --- a/internal/pkg/core/deployer/providers/aliyun-esa/aliyun_esa.go +++ b/internal/pkg/core/ssl-deployer/providers/aliyun-esa/aliyun_esa.go @@ -12,12 +12,11 @@ import ( aliesa "github.com/alibabacloud-go/esa-20240910/v2/client" "github.com/alibabacloud-go/tea/tea" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/aliyun-cas" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/aliyun-cas" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 阿里云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 阿里云 AccessKeySecret。 @@ -30,55 +29,55 @@ type DeployerConfig struct { SiteId int64 `json:"siteId"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *aliesa.Client - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *aliesa.Client + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret, config.Region) + client, err := createSDKClient(config.AccessKeyId, config.AccessKeySecret, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := createSslUploader(config.AccessKeyId, config.AccessKeySecret, config.ResourceGroupId, config.Region) + sslmgr, err := createSSLManager(config.AccessKeyId, config.AccessKeySecret, config.ResourceGroupId, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { if d.config.SiteId == 0 { return nil, errors.New("config `siteId` is required") } - // 上传证书到 CAS - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -99,10 +98,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'esa.SetCertificate': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(accessKeyId, accessKeySecret, region string) (*aliesa.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (*aliesa.Client, error) { // 接入点一览 https://api.aliyun.com/product/ESA config := &aliopen.Config{ AccessKeyId: tea.String(accessKeyId), @@ -118,7 +117,7 @@ func createSdkClient(accessKeyId, accessKeySecret, region string) (*aliesa.Clien return client, nil } -func createSslUploader(accessKeyId, accessKeySecret, resourceGroupId, region string) (uploader.Uploader, error) { +func createSSLManager(accessKeyId, accessKeySecret, resourceGroupId, region string) (core.SSLManager, error) { casRegion := region if casRegion != "" { // 阿里云 CAS 服务接入点是独立于 ESA 服务的 @@ -131,11 +130,11 @@ func createSslUploader(accessKeyId, accessKeySecret, resourceGroupId, region str } } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: accessKeyId, AccessKeySecret: accessKeySecret, ResourceGroupId: resourceGroupId, Region: casRegion, }) - return uploader, err + return sslmgr, err } diff --git a/internal/pkg/core/deployer/providers/aliyun-esa/aliyun_esa_test.go b/internal/pkg/core/ssl-deployer/providers/aliyun-esa/aliyun_esa_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/aliyun-esa/aliyun_esa_test.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-esa/aliyun_esa_test.go index 0b66d2fb..2fd2d89f 100644 --- a/internal/pkg/core/deployer/providers/aliyun-esa/aliyun_esa_test.go +++ b/internal/pkg/core/ssl-deployer/providers/aliyun-esa/aliyun_esa_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-esa" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aliyun-esa" ) var ( @@ -21,7 +21,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_ALIYUNESA_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_ALIYUNESA_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -35,12 +35,12 @@ func init() { Shell command to run this test: go test -v ./aliyun_esa_test.go -args \ - --CERTIMATE_DEPLOYER_ALIYUNESA_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_ALIYUNESA_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_ALIYUNESA_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_ALIYUNESA_ACCESSKEYSECRET="your-access-key-secret" \ - --CERTIMATE_DEPLOYER_ALIYUNESA_REGION="cn-hangzhou" \ - --CERTIMATE_DEPLOYER_ALIYUNESA_SITEID="your-esa-site-id" + --CERTIMATE_SSLDEPLOYER_ALIYUNESA_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNESA_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNESA_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNESA_ACCESSKEYSECRET="your-access-key-secret" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNESA_REGION="cn-hangzhou" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNESA_SITEID="your-esa-site-id" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -56,7 +56,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("SITEID: %v", fSiteId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, Region: fRegion, diff --git a/internal/pkg/core/deployer/providers/aliyun-fc/aliyun_fc.go b/internal/pkg/core/ssl-deployer/providers/aliyun-fc/aliyun_fc.go similarity index 80% rename from internal/pkg/core/deployer/providers/aliyun-fc/aliyun_fc.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-fc/aliyun_fc.go index 1ff046c3..d7e6cf80 100644 --- a/internal/pkg/core/deployer/providers/aliyun-fc/aliyun_fc.go +++ b/internal/pkg/core/ssl-deployer/providers/aliyun-fc/aliyun_fc.go @@ -2,6 +2,7 @@ package aliyunfc import ( "context" + "errors" "fmt" "log/slog" "strings" @@ -11,11 +12,10 @@ import ( alifc3 "github.com/alibabacloud-go/fc-20230330/v4/client" alifc2 "github.com/alibabacloud-go/fc-open-20210406/v2/client" "github.com/alibabacloud-go/tea/tea" - - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 阿里云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 阿里云 AccessKeySecret。 @@ -31,46 +31,45 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger - sdkClients *wSdkClients + sdkClients *wSDKClients } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -type wSdkClients struct { +type wSDKClients struct { FC2 *alifc2.Client FC3 *alifc3.Client } -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - clients, err := createSdkClients(config.AccessKeyId, config.AccessKeySecret, config.Region) + clients, err := createSDKClients(config.AccessKeyId, config.AccessKeySecret, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk clients: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), sdkClients: clients, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { switch d.config.ServiceVersion { case "3", "3.0": if err := d.deployToFC3(ctx, certPEM, privkeyPEM); err != nil { @@ -86,10 +85,14 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("unsupported service version '%s'", d.config.ServiceVersion) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func (d *DeployerProvider) deployToFC3(ctx context.Context, certPEM string, privkeyPEM string) error { +func (d *SSLDeployerProvider) deployToFC3(ctx context.Context, certPEM string, privkeyPEM string) error { + if d.config.Domain == "" { + return errors.New("config `domain` is required") + } + // 获取自定义域名 // 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)) @@ -123,7 +126,11 @@ func (d *DeployerProvider) deployToFC3(ctx context.Context, certPEM string, priv return nil } -func (d *DeployerProvider) deployToFC2(ctx context.Context, certPEM string, privkeyPEM string) error { +func (d *SSLDeployerProvider) deployToFC2(ctx context.Context, certPEM string, privkeyPEM string) error { + if d.config.Domain == "" { + return errors.New("config `domain` is required") + } + // 获取自定义域名 // REF: https://help.aliyun.com/zh/functioncompute/fc-2-0/developer-reference/api-fc-open-2021-04-06-getcustomdomain getCustomDomainResp, err := d.sdkClients.FC2.GetCustomDomain(tea.String(d.config.Domain)) @@ -155,7 +162,7 @@ func (d *DeployerProvider) deployToFC2(ctx context.Context, certPEM string, priv return nil } -func createSdkClients(accessKeyId, accessKeySecret, region string) (*wSdkClients, error) { +func createSDKClients(accessKeyId, accessKeySecret, region string) (*wSDKClients, error) { // 接入点一览 https://api.aliyun.com/product/FC-Open var fc2Endpoint string switch region { @@ -189,7 +196,7 @@ func createSdkClients(accessKeyId, accessKeySecret, region string) (*wSdkClients return nil, err } - return &wSdkClients{ + return &wSDKClients{ FC2: fc2Client, FC3: fc3Client, }, nil diff --git a/internal/pkg/core/deployer/providers/aliyun-fc/aliyun_fc_test.go b/internal/pkg/core/ssl-deployer/providers/aliyun-fc/aliyun_fc_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/aliyun-fc/aliyun_fc_test.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-fc/aliyun_fc_test.go index 215ec93b..0e26133b 100644 --- a/internal/pkg/core/deployer/providers/aliyun-fc/aliyun_fc_test.go +++ b/internal/pkg/core/ssl-deployer/providers/aliyun-fc/aliyun_fc_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-fc" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aliyun-fc" ) var ( @@ -21,7 +21,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_ALIYUNFC_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_ALIYUNFC_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -35,12 +35,12 @@ func init() { Shell command to run this test: go test -v ./aliyun_fc_test.go -args \ - --CERTIMATE_DEPLOYER_ALIYUNFC_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_ALIYUNFC_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_ALIYUNFC_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_ALIYUNFC_ACCESSKEYSECRET="your-access-key-secret" \ - --CERTIMATE_DEPLOYER_ALIYUNFC_REGION="cn-hangzhou" \ - --CERTIMATE_DEPLOYER_ALIYUNFC_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_ALIYUNFC_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNFC_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNFC_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNFC_ACCESSKEYSECRET="your-access-key-secret" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNFC_REGION="cn-hangzhou" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNFC_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -56,7 +56,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, Region: fRegion, diff --git a/internal/pkg/core/deployer/providers/aliyun-ga/aliyun_ga.go b/internal/pkg/core/ssl-deployer/providers/aliyun-ga/aliyun_ga.go similarity index 83% rename from internal/pkg/core/deployer/providers/aliyun-ga/aliyun_ga.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-ga/aliyun_ga.go index bcff8974..ec395d62 100644 --- a/internal/pkg/core/deployer/providers/aliyun-ga/aliyun_ga.go +++ b/internal/pkg/core/ssl-deployer/providers/aliyun-ga/aliyun_ga.go @@ -11,13 +11,12 @@ import ( aliga "github.com/alibabacloud-go/ga-20191120/v3/client" "github.com/alibabacloud-go/tea/tea" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/aliyun-cas" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/aliyun-cas" xslices "github.com/usual2970/certimate/internal/pkg/utils/slices" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 阿里云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 阿里云 AccessKeySecret。 @@ -36,51 +35,51 @@ type DeployerConfig struct { Domain string `json:"domain,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *aliga.Client - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *aliga.Client + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret) + client, err := createSDKClient(config.AccessKeyId, config.AccessKeySecret) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := createSslUploader(config.AccessKeyId, config.AccessKeySecret, config.ResourceGroupId) + sslmgr, err := createSSLManager(config.AccessKeyId, config.AccessKeySecret, config.ResourceGroupId) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 CAS - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -103,10 +102,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("unsupported resource type '%s'", d.config.ResourceType) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func (d *DeployerProvider) deployToAccelerator(ctx context.Context, cloudCertId string) error { +func (d *SSLDeployerProvider) deployToAccelerator(ctx context.Context, cloudCertId string) error { if d.config.AcceleratorId == "" { return errors.New("config `acceleratorId` is required") } @@ -176,7 +175,7 @@ func (d *DeployerProvider) deployToAccelerator(ctx context.Context, cloudCertId return nil } -func (d *DeployerProvider) deployToListener(ctx context.Context, cloudCertId string) error { +func (d *SSLDeployerProvider) deployToListener(ctx context.Context, cloudCertId string) error { if d.config.AcceleratorId == "" { return errors.New("config `acceleratorId` is required") } @@ -192,7 +191,7 @@ func (d *DeployerProvider) deployToListener(ctx context.Context, cloudCertId str return nil } -func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudAcceleratorId string, cloudListenerId string, cloudCertId string) error { +func (d *SSLDeployerProvider) updateListenerCertificate(ctx context.Context, cloudAcceleratorId string, cloudListenerId string, cloudCertId string) error { // 查询监听绑定的证书列表 // REF: https://help.aliyun.com/zh/ga/developer-reference/api-ga-2019-11-20-listlistenercertificates var listenerDefaultCertificate *aliga.ListListenerCertificatesResponseBodyCertificates @@ -201,8 +200,8 @@ func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudA for { listListenerCertificatesReq := &aliga.ListListenerCertificatesRequest{ RegionId: tea.String("cn-hangzhou"), - AcceleratorId: tea.String(d.config.AcceleratorId), - ListenerId: tea.String(d.config.ListenerId), + AcceleratorId: tea.String(cloudAcceleratorId), + ListenerId: tea.String(cloudListenerId), NextToken: listListenerCertificatesNextToken, MaxResults: tea.Int32(20), } @@ -299,7 +298,7 @@ func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudA return nil } -func createSdkClient(accessKeyId, accessKeySecret string) (*aliga.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret string) (*aliga.Client, error) { // 接入点一览 https://api.aliyun.com/product/Ga config := &aliopen.Config{ AccessKeyId: tea.String(accessKeyId), @@ -315,12 +314,12 @@ func createSdkClient(accessKeyId, accessKeySecret string) (*aliga.Client, error) return client, nil } -func createSslUploader(accessKeyId, accessKeySecret, resourceGroupId string) (uploader.Uploader, error) { - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ +func createSSLManager(accessKeyId, accessKeySecret, resourceGroupId string) (core.SSLManager, error) { + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: accessKeyId, AccessKeySecret: accessKeySecret, ResourceGroupId: resourceGroupId, Region: "cn-hangzhou", }) - return uploader, err + return sslmgr, err } diff --git a/internal/pkg/core/deployer/providers/aliyun-ga/aliyun_ga_test.go b/internal/pkg/core/ssl-deployer/providers/aliyun-ga/aliyun_ga_test.go similarity index 77% rename from internal/pkg/core/deployer/providers/aliyun-ga/aliyun_ga_test.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-ga/aliyun_ga_test.go index 611ddc41..39083abd 100644 --- a/internal/pkg/core/deployer/providers/aliyun-ga/aliyun_ga_test.go +++ b/internal/pkg/core/ssl-deployer/providers/aliyun-ga/aliyun_ga_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-ga" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aliyun-ga" ) var ( @@ -22,7 +22,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_ALIYUNGA_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_ALIYUNGA_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -37,13 +37,13 @@ func init() { Shell command to run this test: go test -v ./aliyun_ga_test.go -args \ - --CERTIMATE_DEPLOYER_ALIYUNGA_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_ALIYUNGA_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_ALIYUNGA_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_ALIYUNGA_ACCESSKEYSECRET="your-access-key-secret" \ - --CERTIMATE_DEPLOYER_ALIYUNGA_ACCELERATORID="your-ga-accelerator-id" \ - --CERTIMATE_DEPLOYER_ALIYUNGA_LISTENERID="your-ga-listener-id" \ - --CERTIMATE_DEPLOYER_ALIYUNGA_DOMAIN="your-ga-sni-domain" + --CERTIMATE_SSLDEPLOYER_ALIYUNGA_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNGA_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNGA_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNGA_ACCESSKEYSECRET="your-access-key-secret" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNGA_ACCELERATORID="your-ga-accelerator-id" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNGA_LISTENERID="your-ga-listener-id" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNGA_DOMAIN="your-ga-sni-domain" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -59,7 +59,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, ResourceType: provider.RESOURCE_TYPE_ACCELERATOR, @@ -93,7 +93,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, ResourceType: provider.RESOURCE_TYPE_LISTENER, diff --git a/internal/pkg/core/deployer/providers/aliyun-ga/consts.go b/internal/pkg/core/ssl-deployer/providers/aliyun-ga/consts.go similarity index 100% rename from internal/pkg/core/deployer/providers/aliyun-ga/consts.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-ga/consts.go diff --git a/internal/pkg/core/deployer/providers/aliyun-live/aliyun_live.go b/internal/pkg/core/ssl-deployer/providers/aliyun-live/aliyun_live.go similarity index 73% rename from internal/pkg/core/deployer/providers/aliyun-live/aliyun_live.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-live/aliyun_live.go index 0fab9485..5ad5a3b3 100644 --- a/internal/pkg/core/deployer/providers/aliyun-live/aliyun_live.go +++ b/internal/pkg/core/ssl-deployer/providers/aliyun-live/aliyun_live.go @@ -2,6 +2,7 @@ package aliyunlive import ( "context" + "errors" "fmt" "log/slog" "strings" @@ -10,11 +11,10 @@ import ( aliopen "github.com/alibabacloud-go/darabonba-openapi/v2/client" alilive "github.com/alibabacloud-go/live-20161101/client" "github.com/alibabacloud-go/tea/tea" - - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 阿里云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 阿里云 AccessKeySecret。 @@ -27,41 +27,44 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger sdkClient *alilive.Client } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret, config.Region) + client, err := createSDKClient(config.AccessKeyId, config.AccessKeySecret, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + if d.config.Domain == "" { + return nil, errors.New("config `domain` is required") + } + // "*.example.com" → ".example.com",适配阿里云 Live 要求的泛域名格式 domain := strings.TrimPrefix(d.config.Domain, "*") @@ -81,10 +84,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'live.SetLiveDomainCertificate': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(accessKeyId, accessKeySecret, region string) (*alilive.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (*alilive.Client, error) { // 接入点一览 https://api.aliyun.com/product/live var endpoint string switch region { diff --git a/internal/pkg/core/deployer/providers/aliyun-live/aliyun_live_test.go b/internal/pkg/core/ssl-deployer/providers/aliyun-live/aliyun_live_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/aliyun-live/aliyun_live_test.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-live/aliyun_live_test.go index 46608e38..8c6021bb 100644 --- a/internal/pkg/core/deployer/providers/aliyun-live/aliyun_live_test.go +++ b/internal/pkg/core/ssl-deployer/providers/aliyun-live/aliyun_live_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-live" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aliyun-live" ) var ( @@ -21,7 +21,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_ALIYUNLIVE_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_ALIYUNLIVE_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -35,12 +35,12 @@ func init() { Shell command to run this test: go test -v ./aliyun_live_test.go -args \ - --CERTIMATE_DEPLOYER_ALIYUNLIVE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_ALIYUNLIVE_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_ALIYUNLIVE_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_ALIYUNLIVE_ACCESSKEYSECRET="your-access-key-secret" \ - --CERTIMATE_DEPLOYER_ALIYUNLIVE_REGION="cn-hangzhou" \ - --CERTIMATE_DEPLOYER_ALIYUNLIVE_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_ALIYUNLIVE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNLIVE_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNLIVE_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNLIVE_ACCESSKEYSECRET="your-access-key-secret" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNLIVE_REGION="cn-hangzhou" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNLIVE_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -56,7 +56,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, Region: fRegion, diff --git a/internal/pkg/core/deployer/providers/aliyun-nlb/aliyun_nlb.go b/internal/pkg/core/ssl-deployer/providers/aliyun-nlb/aliyun_nlb.go similarity index 77% rename from internal/pkg/core/deployer/providers/aliyun-nlb/aliyun_nlb.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-nlb/aliyun_nlb.go index dd83f514..788f3260 100644 --- a/internal/pkg/core/deployer/providers/aliyun-nlb/aliyun_nlb.go +++ b/internal/pkg/core/ssl-deployer/providers/aliyun-nlb/aliyun_nlb.go @@ -11,12 +11,11 @@ import ( alinlb "github.com/alibabacloud-go/nlb-20220430/v2/client" "github.com/alibabacloud-go/tea/tea" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/aliyun-cas" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/aliyun-cas" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 阿里云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 阿里云 AccessKeySecret。 @@ -35,51 +34,51 @@ type DeployerConfig struct { ListenerId string `json:"listenerId,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *alinlb.Client - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *alinlb.Client + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret, config.Region) + client, err := createSDKClient(config.AccessKeyId, config.AccessKeySecret, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := createSslUploader(config.AccessKeyId, config.AccessKeySecret, config.ResourceGroupId, config.Region) + sslmgr, err := createSSLManager(config.AccessKeyId, config.AccessKeySecret, config.ResourceGroupId, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 CAS - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -102,10 +101,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("unsupported resource type '%s'", d.config.ResourceType) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId string) error { +func (d *SSLDeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId string) error { if d.config.LoadbalancerId == "" { return errors.New("config `loadbalancerId` is required") } @@ -184,7 +183,7 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId return nil } -func (d *DeployerProvider) deployToListener(ctx context.Context, cloudCertId string) error { +func (d *SSLDeployerProvider) deployToListener(ctx context.Context, cloudCertId string) error { if d.config.ListenerId == "" { return errors.New("config `listenerId` is required") } @@ -197,7 +196,7 @@ func (d *DeployerProvider) deployToListener(ctx context.Context, cloudCertId str return nil } -func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudListenerId string, cloudCertId string) error { +func (d *SSLDeployerProvider) updateListenerCertificate(ctx context.Context, cloudListenerId string, cloudCertId string) error { // 查询监听的属性 // REF: https://help.aliyun.com/zh/slb/network-load-balancer/developer-reference/api-nlb-2022-04-30-getlistenerattribute getListenerAttributeReq := &alinlb.GetListenerAttributeRequest{ @@ -224,7 +223,7 @@ func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudL return nil } -func createSdkClient(accessKeyId, accessKeySecret, region string) (*alinlb.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (*alinlb.Client, error) { // 接入点一览 https://api.aliyun.com/product/Nlb endpoint := strings.ReplaceAll(fmt.Sprintf("nlb.%s.aliyuncs.com", region), "..", ".") config := &aliopen.Config{ @@ -241,7 +240,7 @@ func createSdkClient(accessKeyId, accessKeySecret, region string) (*alinlb.Clien return client, nil } -func createSslUploader(accessKeyId, accessKeySecret, resourceGroupId, region string) (uploader.Uploader, error) { +func createSSLManager(accessKeyId, accessKeySecret, resourceGroupId, region string) (core.SSLManager, error) { casRegion := region if casRegion != "" { // 阿里云 CAS 服务接入点是独立于 NLB 服务的 @@ -254,11 +253,11 @@ func createSslUploader(accessKeyId, accessKeySecret, resourceGroupId, region str } } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: accessKeyId, AccessKeySecret: accessKeySecret, ResourceGroupId: resourceGroupId, Region: casRegion, }) - return uploader, err + return sslmgr, err } diff --git a/internal/pkg/core/deployer/providers/aliyun-nlb/aliyun_nlb_test.go b/internal/pkg/core/ssl-deployer/providers/aliyun-nlb/aliyun_nlb_test.go similarity index 77% rename from internal/pkg/core/deployer/providers/aliyun-nlb/aliyun_nlb_test.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-nlb/aliyun_nlb_test.go index f4d64219..533353ad 100644 --- a/internal/pkg/core/deployer/providers/aliyun-nlb/aliyun_nlb_test.go +++ b/internal/pkg/core/ssl-deployer/providers/aliyun-nlb/aliyun_nlb_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-nlb" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aliyun-nlb" ) var ( @@ -22,7 +22,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_ALIYUNNLB_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_ALIYUNNLB_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -37,13 +37,13 @@ func init() { Shell command to run this test: go test -v ./aliyun_nlb_test.go -args \ - --CERTIMATE_DEPLOYER_ALIYUNNLB_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_ALIYUNNLB_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_ALIYUNNLB_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_ALIYUNNLB_ACCESSKEYSECRET="your-access-key-secret" \ - --CERTIMATE_DEPLOYER_ALIYUNNLB_REGION="cn-hangzhou" \ - --CERTIMATE_DEPLOYER_ALIYUNNLB_LOADBALANCERID="your-nlb-instance-id" \ - --CERTIMATE_DEPLOYER_ALIYUNNLB_LISTENERID="your-nlb-listener-id" + --CERTIMATE_SSLDEPLOYER_ALIYUNNLB_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNNLB_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNNLB_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNNLB_ACCESSKEYSECRET="your-access-key-secret" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNNLB_REGION="cn-hangzhou" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNNLB_LOADBALANCERID="your-nlb-instance-id" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNNLB_LISTENERID="your-nlb-listener-id" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -59,7 +59,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("LOADBALANCERID: %v", fLoadbalancerId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, Region: fRegion, @@ -94,7 +94,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("LISTENERID: %v", fListenerId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, Region: fRegion, diff --git a/internal/pkg/core/deployer/providers/aliyun-nlb/consts.go b/internal/pkg/core/ssl-deployer/providers/aliyun-nlb/consts.go similarity index 100% rename from internal/pkg/core/deployer/providers/aliyun-nlb/consts.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-nlb/consts.go diff --git a/internal/pkg/core/deployer/providers/aliyun-oss/aliyun_oss.go b/internal/pkg/core/ssl-deployer/providers/aliyun-oss/aliyun_oss.go similarity index 73% rename from internal/pkg/core/deployer/providers/aliyun-oss/aliyun_oss.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-oss/aliyun_oss.go index 6a698cf0..e3c24a75 100644 --- a/internal/pkg/core/deployer/providers/aliyun-oss/aliyun_oss.go +++ b/internal/pkg/core/ssl-deployer/providers/aliyun-oss/aliyun_oss.go @@ -7,11 +7,10 @@ import ( "log/slog" "github.com/aliyun/aliyun-oss-go-sdk/oss" - - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 阿里云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 阿里云 AccessKeySecret。 @@ -26,41 +25,40 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger sdkClient *oss.Client } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret, config.Region) + client, err := createSDKClient(config.AccessKeyId, config.AccessKeySecret, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { if d.config.Bucket == "" { return nil, errors.New("config `bucket` is required") } @@ -84,10 +82,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'oss.PutBucketCnameWithCertificate': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(accessKeyId, accessKeySecret, region string) (*oss.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (*oss.Client, error) { // 接入点一览 https://api.aliyun.com/product/Oss var endpoint string switch region { diff --git a/internal/pkg/core/deployer/providers/aliyun-oss/aliyun_oss_test.go b/internal/pkg/core/ssl-deployer/providers/aliyun-oss/aliyun_oss_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/aliyun-oss/aliyun_oss_test.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-oss/aliyun_oss_test.go index 412f7d16..3a370e4f 100644 --- a/internal/pkg/core/deployer/providers/aliyun-oss/aliyun_oss_test.go +++ b/internal/pkg/core/ssl-deployer/providers/aliyun-oss/aliyun_oss_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-oss" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aliyun-oss" ) var ( @@ -22,7 +22,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_ALIYUNOSS_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_ALIYUNOSS_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -37,13 +37,13 @@ func init() { Shell command to run this test: go test -v ./aliyun_oss_test.go -args \ - --CERTIMATE_DEPLOYER_ALIYUNOSS_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_ALIYUNOSS_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_ALIYUNOSS_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_ALIYUNOSS_ACCESSKEYSECRET="your-access-key-secret" \ - --CERTIMATE_DEPLOYER_ALIYUNOSS_REGION="cn-hangzhou" \ - --CERTIMATE_DEPLOYER_ALIYUNOSS_BUCKET="your-oss-bucket" \ - --CERTIMATE_DEPLOYER_ALIYUNOSS_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_ALIYUNOSS_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNOSS_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNOSS_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNOSS_ACCESSKEYSECRET="your-access-key-secret" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNOSS_REGION="cn-hangzhou" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNOSS_BUCKET="your-oss-bucket" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNOSS_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -60,7 +60,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, Region: fRegion, diff --git a/internal/pkg/core/deployer/providers/aliyun-vod/aliyun_vod.go b/internal/pkg/core/ssl-deployer/providers/aliyun-vod/aliyun_vod.go similarity index 70% rename from internal/pkg/core/deployer/providers/aliyun-vod/aliyun_vod.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-vod/aliyun_vod.go index ab02fa89..0d172f85 100644 --- a/internal/pkg/core/deployer/providers/aliyun-vod/aliyun_vod.go +++ b/internal/pkg/core/ssl-deployer/providers/aliyun-vod/aliyun_vod.go @@ -2,6 +2,7 @@ package aliyunvod import ( "context" + "errors" "fmt" "log/slog" "strings" @@ -10,11 +11,10 @@ import ( aliopen "github.com/alibabacloud-go/darabonba-openapi/v2/client" "github.com/alibabacloud-go/tea/tea" alivod "github.com/alibabacloud-go/vod-20170321/v4/client" - - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 阿里云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 阿里云 AccessKeySecret。 @@ -27,41 +27,44 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger sdkClient *alivod.Client } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret, config.Region) + client, err := createSDKClient(config.AccessKeyId, config.AccessKeySecret, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + if d.config.Domain == "" { + return nil, errors.New("config `domain` is required") + } + // 设置域名证书 // REF: https://help.aliyun.com/zh/vod/developer-reference/api-vod-2017-03-21-setvoddomainsslcertificate setVodDomainSSLCertificateReq := &alivod.SetVodDomainSSLCertificateRequest{ @@ -78,10 +81,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'live.SetVodDomainSSLCertificate': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(accessKeyId, accessKeySecret, region string) (*alivod.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (*alivod.Client, error) { // 接入点一览 https://api.aliyun.com/product/vod endpoint := strings.ReplaceAll(fmt.Sprintf("vod.%s.aliyuncs.com", region), "..", ".") config := &aliopen.Config{ diff --git a/internal/pkg/core/deployer/providers/aliyun-vod/aliyun_vod_test.go b/internal/pkg/core/ssl-deployer/providers/aliyun-vod/aliyun_vod_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/aliyun-vod/aliyun_vod_test.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-vod/aliyun_vod_test.go index 4d523d98..16bce786 100644 --- a/internal/pkg/core/deployer/providers/aliyun-vod/aliyun_vod_test.go +++ b/internal/pkg/core/ssl-deployer/providers/aliyun-vod/aliyun_vod_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-vod" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aliyun-vod" ) var ( @@ -21,7 +21,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_ALIYUNVOD_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_ALIYUNVOD_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -35,12 +35,12 @@ func init() { Shell command to run this test: go test -v ./aliyun_vod_test.go -args \ - --CERTIMATE_DEPLOYER_ALIYUNVOD_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_ALIYUNVOD_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_ALIYUNVOD_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_ALIYUNVOD_ACCESSKEYSECRET="your-access-key-secret" \ - --CERTIMATE_DEPLOYER_ALIYUNVOD_REGION="cn-hangzhou" \ - --CERTIMATE_DEPLOYER_ALIYUNVOD_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_ALIYUNVOD_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNVOD_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNVOD_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNVOD_ACCESSKEYSECRET="your-access-key-secret" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNVOD_REGION="cn-hangzhou" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNVOD_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -56,7 +56,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, Region: fRegion, diff --git a/internal/pkg/core/deployer/providers/aliyun-waf/aliyun_waf.go b/internal/pkg/core/ssl-deployer/providers/aliyun-waf/aliyun_waf.go similarity index 86% rename from internal/pkg/core/deployer/providers/aliyun-waf/aliyun_waf.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-waf/aliyun_waf.go index b1c67c1c..3267e3aa 100644 --- a/internal/pkg/core/deployer/providers/aliyun-waf/aliyun_waf.go +++ b/internal/pkg/core/ssl-deployer/providers/aliyun-waf/aliyun_waf.go @@ -11,14 +11,13 @@ import ( "github.com/alibabacloud-go/tea/tea" aliwaf "github.com/alibabacloud-go/waf-openapi-20211001/v5/client" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/aliyun-cas" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/aliyun-cas" xslices "github.com/usual2970/certimate/internal/pkg/utils/slices" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 阿里云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 阿里云 AccessKeySecret。 @@ -35,49 +34,49 @@ type DeployerConfig struct { Domain string `json:"domain,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *aliwaf.Client - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *aliwaf.Client + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret, config.Region) + client, err := createSDKClient(config.AccessKeyId, config.AccessKeySecret, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := createSslUploader(config.AccessKeyId, config.AccessKeySecret, config.ResourceGroupId, config.Region) + sslmgr, err := createSSLManager(config.AccessKeyId, config.AccessKeySecret, config.ResourceGroupId, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { if d.config.InstanceId == "" { return nil, errors.New("config `instanceId` is required") } @@ -92,12 +91,12 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("unsupported service version '%s'", d.config.ServiceVersion) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func (d *DeployerProvider) deployToWAF3(ctx context.Context, certPEM string, privkeyPEM string) error { - // 上传证书到 CAS - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) +func (d *SSLDeployerProvider) deployToWAF3(ctx context.Context, certPEM string, privkeyPEM string) error { + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -175,7 +174,7 @@ func (d *DeployerProvider) deployToWAF3(ctx context.Context, certPEM string, pri return nil } -func createSdkClient(accessKeyId, accessKeySecret, region string) (*aliwaf.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (*aliwaf.Client, error) { // 接入点一览:https://api.aliyun.com/product/waf-openapi endpoint := strings.ReplaceAll(fmt.Sprintf("wafopenapi.%s.aliyuncs.com", region), "..", ".") config := &aliopen.Config{ @@ -192,7 +191,7 @@ func createSdkClient(accessKeyId, accessKeySecret, region string) (*aliwaf.Clien return client, nil } -func createSslUploader(accessKeyId, accessKeySecret, resourceGroupId, region string) (uploader.Uploader, error) { +func createSSLManager(accessKeyId, accessKeySecret, resourceGroupId, region string) (core.SSLManager, error) { casRegion := region if casRegion != "" { // 阿里云 CAS 服务接入点是独立于 WAF 服务的 @@ -205,13 +204,13 @@ func createSslUploader(accessKeyId, accessKeySecret, resourceGroupId, region str } } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: accessKeyId, AccessKeySecret: accessKeySecret, ResourceGroupId: resourceGroupId, Region: casRegion, }) - return uploader, err + return sslmgr, err } func assign(source *aliwaf.ModifyDomainRequest, target *aliwaf.DescribeDomainDetailResponseBody) *aliwaf.ModifyDomainRequest { diff --git a/internal/pkg/core/deployer/providers/aliyun-waf/aliyun_waf_test.go b/internal/pkg/core/ssl-deployer/providers/aliyun-waf/aliyun_waf_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/aliyun-waf/aliyun_waf_test.go rename to internal/pkg/core/ssl-deployer/providers/aliyun-waf/aliyun_waf_test.go index e1b92613..ec16dd28 100644 --- a/internal/pkg/core/deployer/providers/aliyun-waf/aliyun_waf_test.go +++ b/internal/pkg/core/ssl-deployer/providers/aliyun-waf/aliyun_waf_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-waf" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aliyun-waf" ) var ( @@ -21,7 +21,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_ALIYUNWAF_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_ALIYUNWAF_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -35,12 +35,12 @@ func init() { Shell command to run this test: go test -v ./aliyun_waf_test.go -args \ - --CERTIMATE_DEPLOYER_ALIYUNWAF_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_ALIYUNWAF_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_ALIYUNWAF_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_ALIYUNWAF_ACCESSKEYSECRET="your-access-key-secret" \ - --CERTIMATE_DEPLOYER_ALIYUNWAF_REGION="cn-hangzhou" \ - --CERTIMATE_DEPLOYER_ALIYUNWAF_INSTANCEID="your-waf-instance-id" + --CERTIMATE_SSLDEPLOYER_ALIYUNWAF_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNWAF_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNWAF_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNWAF_ACCESSKEYSECRET="your-access-key-secret" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNWAF_REGION="cn-hangzhou" \ + --CERTIMATE_SSLDEPLOYER_ALIYUNWAF_INSTANCEID="your-waf-instance-id" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -56,7 +56,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("INSTANCEID: %v", fInstanceId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, Region: fRegion, diff --git a/internal/pkg/core/deployer/providers/apisix/apisix.go b/internal/pkg/core/ssl-deployer/providers/apisix/apisix.go similarity index 72% rename from internal/pkg/core/deployer/providers/apisix/apisix.go rename to internal/pkg/core/ssl-deployer/providers/apisix/apisix.go index a64c54f4..d3c9a263 100644 --- a/internal/pkg/core/deployer/providers/apisix/apisix.go +++ b/internal/pkg/core/ssl-deployer/providers/apisix/apisix.go @@ -7,13 +7,13 @@ import ( "fmt" "log/slog" - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" apisixsdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/apisix" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // APISIX 服务地址。 ServerUrl string `json:"serverUrl"` // APISIX Admin API Key。 @@ -27,41 +27,40 @@ type DeployerConfig struct { CertificateId string `json:"certificateId,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger sdkClient *apisixsdk.Client } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.ServerUrl, config.ApiKey, config.AllowInsecureConnections) + client, err := createSDKClient(config.ServerUrl, config.ApiKey, config.AllowInsecureConnections) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { // 根据部署资源类型决定部署方式 switch d.config.ResourceType { case RESOURCE_TYPE_CERTIFICATE: @@ -73,10 +72,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("unsupported resource type '%s'", d.config.ResourceType) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func (d *DeployerProvider) deployToCertificate(ctx context.Context, certPEM string, privkeyPEM string) error { +func (d *SSLDeployerProvider) deployToCertificate(ctx context.Context, certPEM string, privkeyPEM string) error { if d.config.CertificateId == "" { return errors.New("config `certificateId` is required") } @@ -105,7 +104,7 @@ func (d *DeployerProvider) deployToCertificate(ctx context.Context, certPEM stri return nil } -func createSdkClient(serverUrl, apiKey string, skipTlsVerify bool) (*apisixsdk.Client, error) { +func createSDKClient(serverUrl, apiKey string, skipTlsVerify bool) (*apisixsdk.Client, error) { client, err := apisixsdk.NewClient(serverUrl, apiKey) if err != nil { return nil, err diff --git a/internal/pkg/core/deployer/providers/apisix/apisix_test.go b/internal/pkg/core/ssl-deployer/providers/apisix/apisix_test.go similarity index 73% rename from internal/pkg/core/deployer/providers/apisix/apisix_test.go rename to internal/pkg/core/ssl-deployer/providers/apisix/apisix_test.go index d7d7dffd..44cd2909 100644 --- a/internal/pkg/core/deployer/providers/apisix/apisix_test.go +++ b/internal/pkg/core/ssl-deployer/providers/apisix/apisix_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/apisix" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/apisix" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_APISIX_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_APISIX_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./apisix_test.go -args \ - --CERTIMATE_DEPLOYER_APISIX_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_APISIX_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_APISIX_SERVERURL="http://127.0.0.1:9080" \ - --CERTIMATE_DEPLOYER_APISIX_APIKEY="your-api-key" \ - --CERTIMATE_DEPLOYER_APISIX_CERTIFICATEID="your-cerficiate-id" + --CERTIMATE_SSLDEPLOYER_APISIX_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_APISIX_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_APISIX_SERVERURL="http://127.0.0.1:9080" \ + --CERTIMATE_SSLDEPLOYER_APISIX_APIKEY="your-api-key" \ + --CERTIMATE_SSLDEPLOYER_APISIX_CERTIFICATEID="your-cerficiate-id" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("CERTIFICATEID: %v", fCertificateId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ ServerUrl: fServerUrl, ApiKey: fApiKey, AllowInsecureConnections: true, diff --git a/internal/pkg/core/deployer/providers/apisix/consts.go b/internal/pkg/core/ssl-deployer/providers/apisix/consts.go similarity index 100% rename from internal/pkg/core/deployer/providers/apisix/consts.go rename to internal/pkg/core/ssl-deployer/providers/apisix/consts.go diff --git a/internal/pkg/core/deployer/providers/aws-acm/aws_acm.go b/internal/pkg/core/ssl-deployer/providers/aws-acm/aws_acm.go similarity index 64% rename from internal/pkg/core/deployer/providers/aws-acm/aws_acm.go rename to internal/pkg/core/ssl-deployer/providers/aws-acm/aws_acm.go index 55eddb2a..0c90cc92 100644 --- a/internal/pkg/core/deployer/providers/aws-acm/aws_acm.go +++ b/internal/pkg/core/ssl-deployer/providers/aws-acm/aws_acm.go @@ -2,6 +2,7 @@ package awsacm import ( "context" + "errors" "fmt" "log/slog" @@ -10,13 +11,12 @@ import ( awscred "github.com/aws/aws-sdk-go-v2/credentials" awsacm "github.com/aws/aws-sdk-go-v2/service/acm" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/aws-acm" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/aws-acm" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // AWS AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // AWS SecretAccessKey。 @@ -28,56 +28,56 @@ type DeployerConfig struct { CertificateArn string `json:"certificateArn,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *awsacm.Client - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *awsacm.Client + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.SecretAccessKey, config.Region) + client, err := createSDKClient(config.AccessKeyId, config.SecretAccessKey, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: config.AccessKeyId, SecretAccessKey: config.SecretAccessKey, Region: config.Region, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { if d.config.CertificateArn == "" { - // 上传证书到 ACM - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -105,10 +105,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE } } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(accessKeyId, secretAccessKey, region string) (*awsacm.Client, error) { +func createSDKClient(accessKeyId, secretAccessKey, region string) (*awsacm.Client, error) { cfg, err := awscfg.LoadDefaultConfig(context.TODO()) if err != nil { return nil, err diff --git a/internal/pkg/core/deployer/providers/aws-cloudfront/aws_cloudfront.go b/internal/pkg/core/ssl-deployer/providers/aws-cloudfront/aws_cloudfront.go similarity index 73% rename from internal/pkg/core/deployer/providers/aws-cloudfront/aws_cloudfront.go rename to internal/pkg/core/ssl-deployer/providers/aws-cloudfront/aws_cloudfront.go index e5a3f0b2..612dc7d9 100644 --- a/internal/pkg/core/deployer/providers/aws-cloudfront/aws_cloudfront.go +++ b/internal/pkg/core/ssl-deployer/providers/aws-cloudfront/aws_cloudfront.go @@ -12,13 +12,12 @@ import ( "github.com/aws/aws-sdk-go-v2/service/cloudfront" "github.com/aws/aws-sdk-go-v2/service/cloudfront/types" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploaderspacm "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/aws-acm" - uploaderspiam "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/aws-iam" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrspacm "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/aws-acm" + sslmgrspiam "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/aws-iam" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // AWS AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // AWS SecretAccessKey。 @@ -32,74 +31,74 @@ type DeployerConfig struct { CertificateSource string `json:"certificateSource"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *cloudfront.Client - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *cloudfront.Client + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.SecretAccessKey, config.Region) + client, err := createSDKClient(config.AccessKeyId, config.SecretAccessKey, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - var uploader uploader.Uploader + var sslmgr core.SSLManager if config.CertificateSource == "ACM" { - uploader, err = uploaderspacm.NewUploader(&uploaderspacm.UploaderConfig{ + sslmgr, err = sslmgrspacm.NewSSLManagerProvider(&sslmgrspacm.SSLManagerProviderConfig{ AccessKeyId: config.AccessKeyId, SecretAccessKey: config.SecretAccessKey, Region: config.Region, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } } else if config.CertificateSource == "IAM" { - uploader, err = uploaderspiam.NewUploader(&uploaderspiam.UploaderConfig{ + sslmgr, err = sslmgrspiam.NewSSLManagerProvider(&sslmgrspiam.SSLManagerProviderConfig{ AccessKeyId: config.AccessKeyId, SecretAccessKey: config.SecretAccessKey, Region: config.Region, CertificatePath: "/cloudfront/", }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } } else { return nil, fmt.Errorf("unsupported certificate source: '%s'", config.CertificateSource) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { if d.config.DistributionId == "" { return nil, errors.New("config `distribuitionId` is required") } - // 上传证书到 ACM/IAM - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -147,10 +146,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'cloudfront.UpdateDistribution': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(accessKeyId, secretAccessKey, region string) (*cloudfront.Client, error) { +func createSDKClient(accessKeyId, secretAccessKey, region string) (*cloudfront.Client, error) { cfg, err := awscfg.LoadDefaultConfig(context.TODO()) if err != nil { return nil, err diff --git a/internal/pkg/core/deployer/providers/aws-cloudfront/aws_cloudfront_test.go b/internal/pkg/core/ssl-deployer/providers/aws-cloudfront/aws_cloudfront_test.go similarity index 70% rename from internal/pkg/core/deployer/providers/aws-cloudfront/aws_cloudfront_test.go rename to internal/pkg/core/ssl-deployer/providers/aws-cloudfront/aws_cloudfront_test.go index 78228645..0db86e01 100644 --- a/internal/pkg/core/deployer/providers/aws-cloudfront/aws_cloudfront_test.go +++ b/internal/pkg/core/ssl-deployer/providers/aws-cloudfront/aws_cloudfront_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aws-cloudfront" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/aws-cloudfront" ) var ( @@ -21,7 +21,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_AWSCLOUDFRONT_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_AWSCLOUDFRONT_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -35,12 +35,12 @@ func init() { Shell command to run this test: go test -v ./aws_cloudfront_test.go -args \ - --CERTIMATE_DEPLOYER_AWSCLOUDFRONT_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_AWSCLOUDFRONT_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_AWSCLOUDFRONT_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_AWSCLOUDFRONT_SECRETACCESSKEY="your-secret-access-id" \ - --CERTIMATE_DEPLOYER_AWSCLOUDFRONT_REGION="us-east-1" \ - --CERTIMATE_DEPLOYER_AWSCLOUDFRONT_DISTRIBUTIONID="your-distribution-id" + --CERTIMATE_SSLDEPLOYER_AWSCLOUDFRONT_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_AWSCLOUDFRONT_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_AWSCLOUDFRONT_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_AWSCLOUDFRONT_SECRETACCESSKEY="your-secret-access-id" \ + --CERTIMATE_SSLDEPLOYER_AWSCLOUDFRONT_REGION="us-east-1" \ + --CERTIMATE_SSLDEPLOYER_AWSCLOUDFRONT_DISTRIBUTIONID="your-distribution-id" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -56,7 +56,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DISTRIBUTIONID: %v", fDistribuitionId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, SecretAccessKey: fSecretAccessKey, Region: fRegion, diff --git a/internal/pkg/core/ssl-deployer/providers/aws-iam/aws_iam.go b/internal/pkg/core/ssl-deployer/providers/aws-iam/aws_iam.go new file mode 100644 index 00000000..7d60ed4d --- /dev/null +++ b/internal/pkg/core/ssl-deployer/providers/aws-iam/aws_iam.go @@ -0,0 +1,75 @@ +package awsiam + +import ( + "context" + "errors" + "fmt" + "log/slog" + + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/aws-iam" +) + +type SSLDeployerProviderConfig struct { + // AWS AccessKeyId。 + AccessKeyId string `json:"accessKeyId"` + // AWS SecretAccessKey。 + SecretAccessKey string `json:"secretAccessKey"` + // AWS 区域。 + Region string `json:"region"` + // IAM 证书路径。 + // 选填。 + CertificatePath string `json:"certificatePath,omitempty"` +} + +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sslManager core.SSLManager +} + +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) + +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { + if config == nil { + return nil, errors.New("the configuration of the ssl deployer provider is nil") + } + + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ + AccessKeyId: config.AccessKeyId, + SecretAccessKey: config.SecretAccessKey, + Region: config.Region, + CertificatePath: config.CertificatePath, + }) + if err != nil { + return nil, fmt.Errorf("could not create ssl manager: %w", err) + } + + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sslManager: sslmgr, + }, nil +} + +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { + if logger == nil { + d.logger = slog.New(slog.DiscardHandler) + } else { + d.logger = logger + } + + d.sslManager.SetLogger(logger) +} + +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) + if err != nil { + return nil, fmt.Errorf("failed to upload certificate file: %w", err) + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) + } + + return &core.SSLDeployResult{}, nil +} diff --git a/internal/pkg/core/deployer/providers/azure-keyvault/azure_keyvault.go b/internal/pkg/core/ssl-deployer/providers/azure-keyvault/azure_keyvault.go similarity index 76% rename from internal/pkg/core/deployer/providers/azure-keyvault/azure_keyvault.go rename to internal/pkg/core/ssl-deployer/providers/azure-keyvault/azure_keyvault.go index 1f4d0d73..782c0409 100644 --- a/internal/pkg/core/deployer/providers/azure-keyvault/azure_keyvault.go +++ b/internal/pkg/core/ssl-deployer/providers/azure-keyvault/azure_keyvault.go @@ -13,14 +13,13 @@ import ( "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azcertificates" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/azure-keyvault" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/azure-keyvault" azenv "github.com/usual2970/certimate/internal/pkg/sdk3rd/azure/env" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // Azure TenantId。 TenantId string `json:"tenantId"` // Azure ClientId。 @@ -36,26 +35,26 @@ type DeployerConfig struct { CertificateName string `json:"certificateName,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *azcertificates.Client - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *azcertificates.Client + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.TenantId, config.ClientId, config.ClientSecret, config.CloudName, config.KeyVaultName) + client, err := createSDKClient(config.TenantId, config.ClientId, config.ClientSecret, config.CloudName, config.KeyVaultName) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ TenantId: config.TenantId, ClientId: config.ClientId, ClientSecret: config.ClientSecret, @@ -63,28 +62,28 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { KeyVaultName: config.KeyVaultName, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { // 解析证书内容 certX509, err := xcert.ParseCertificateFromPEM(certPEM) if err != nil { @@ -98,8 +97,8 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE } if d.config.CertificateName == "" { - // 上传证书到 KeyVault - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -119,7 +118,7 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE oldCertX509, err := x509.ParseCertificate(getCertificateResp.CER) if err == nil { if xcert.EqualCertificate(certX509, oldCertX509) { - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } } } @@ -145,10 +144,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE } } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(tenantId, clientId, clientSecret, cloudName, keyvaultName string) (*azcertificates.Client, error) { +func createSDKClient(tenantId, clientId, clientSecret, cloudName, keyvaultName string) (*azcertificates.Client, error) { env, err := azenv.GetCloudEnvConfiguration(cloudName) if err != nil { return nil, err diff --git a/internal/pkg/core/deployer/providers/baiducloud-appblb/baiducloud_appblb.go b/internal/pkg/core/ssl-deployer/providers/baiducloud-appblb/baiducloud_appblb.go similarity index 82% rename from internal/pkg/core/deployer/providers/baiducloud-appblb/baiducloud_appblb.go rename to internal/pkg/core/ssl-deployer/providers/baiducloud-appblb/baiducloud_appblb.go index 66d90fd1..11d4c366 100644 --- a/internal/pkg/core/deployer/providers/baiducloud-appblb/baiducloud_appblb.go +++ b/internal/pkg/core/ssl-deployer/providers/baiducloud-appblb/baiducloud_appblb.go @@ -11,13 +11,12 @@ import ( bceappblb "github.com/baidubce/bce-sdk-go/services/appblb" "github.com/google/uuid" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/baiducloud-cert" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/baiducloud-cert" xslices "github.com/usual2970/certimate/internal/pkg/utils/slices" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 百度智能云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 百度智能云 SecretAccessKey。 @@ -37,53 +36,52 @@ type DeployerConfig struct { Domain string `json:"domain,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *bceappblb.Client - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *bceappblb.Client + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.SecretAccessKey, config.Region) + client, err := createSDKClient(config.AccessKeyId, config.SecretAccessKey, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: config.AccessKeyId, SecretAccessKey: config.SecretAccessKey, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 CAS - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -106,10 +104,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("unsupported resource type '%s'", d.config.ResourceType) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId string) error { +func (d *SSLDeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId string) error { if d.config.LoadbalancerId == "" { return errors.New("config `loadbalancerId` is required") } @@ -171,7 +169,7 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId return nil } -func (d *DeployerProvider) deployToListener(ctx context.Context, cloudCertId string) error { +func (d *SSLDeployerProvider) deployToListener(ctx context.Context, cloudCertId string) error { if d.config.LoadbalancerId == "" { return errors.New("config `loadbalancerId` is required") } @@ -234,7 +232,7 @@ func (d *DeployerProvider) deployToListener(ctx context.Context, cloudCertId str return nil } -func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudLoadbalancerId string, cloudListenerType string, cloudListenerPort int32, cloudCertId string) error { +func (d *SSLDeployerProvider) updateListenerCertificate(ctx context.Context, cloudLoadbalancerId string, cloudListenerType string, cloudListenerPort int32, cloudCertId string) error { switch strings.ToUpper(cloudListenerType) { case "HTTPS": return d.updateHttpsListenerCertificate(ctx, cloudLoadbalancerId, cloudListenerPort, cloudCertId) @@ -245,7 +243,7 @@ func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudL } } -func (d *DeployerProvider) updateHttpsListenerCertificate(ctx context.Context, cloudLoadbalancerId string, cloudHttpsListenerPort int32, cloudCertId string) error { +func (d *SSLDeployerProvider) updateHttpsListenerCertificate(ctx context.Context, cloudLoadbalancerId string, cloudHttpsListenerPort int32, cloudCertId string) error { // 查询 HTTPS 监听器 // REF: https://cloud.baidu.com/doc/BLB/s/ujwvxnyux#describeapphttpslisteners%E6%9F%A5%E8%AF%A2https%E7%9B%91%E5%90%AC%E5%99%A8 describeAppHTTPSListenersReq := &bceappblb.DescribeAppListenerArgs{ @@ -310,7 +308,7 @@ func (d *DeployerProvider) updateHttpsListenerCertificate(ctx context.Context, c return nil } -func (d *DeployerProvider) updateSslListenerCertificate(ctx context.Context, cloudLoadbalancerId string, cloudHttpsListenerPort int32, cloudCertId string) error { +func (d *SSLDeployerProvider) updateSslListenerCertificate(ctx context.Context, cloudLoadbalancerId string, cloudHttpsListenerPort int32, cloudCertId string) error { // 更新 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{ @@ -327,7 +325,7 @@ func (d *DeployerProvider) updateSslListenerCertificate(ctx context.Context, clo return nil } -func createSdkClient(accessKeyId, secretAccessKey, region string) (*bceappblb.Client, error) { +func createSDKClient(accessKeyId, secretAccessKey, region string) (*bceappblb.Client, error) { endpoint := "" if region != "" { endpoint = fmt.Sprintf("blb.%s.baidubce.com", region) diff --git a/internal/pkg/core/deployer/providers/baiducloud-blb/baiducloud_blb_test.go b/internal/pkg/core/ssl-deployer/providers/baiducloud-appblb/baiducloud_appblb_test.go similarity index 67% rename from internal/pkg/core/deployer/providers/baiducloud-blb/baiducloud_blb_test.go rename to internal/pkg/core/ssl-deployer/providers/baiducloud-appblb/baiducloud_appblb_test.go index c96e4f0c..3ef17de6 100644 --- a/internal/pkg/core/deployer/providers/baiducloud-blb/baiducloud_blb_test.go +++ b/internal/pkg/core/ssl-deployer/providers/baiducloud-appblb/baiducloud_appblb_test.go @@ -1,4 +1,4 @@ -package baiducloudblb_test +package baiducloudappblb_test import ( "context" @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/baiducloud-blb" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/baiducloud-appblb" ) var ( @@ -22,7 +22,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_BAIDUCLOUDBLB_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_BAIDUCLOUDAPPBLB_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -36,14 +36,14 @@ func init() { /* Shell command to run this test: - go test -v ./baiducloud_blb_test.go -args \ - --CERTIMATE_DEPLOYER_BAIDUCLOUDBLB_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_BAIDUCLOUDBLB_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_BAIDUCLOUDBLB_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_BAIDUCLOUDBLB_SECRETACCESSKEY="your-secret-access-key" \ - --CERTIMATE_DEPLOYER_BAIDUCLOUDBLB_REGION="bj" \ - --CERTIMATE_DEPLOYER_BAIDUCLOUDBLB_LOADBALANCERID="your-blb-loadbalancer-id" \ - --CERTIMATE_DEPLOYER_BAIDUCLOUDBLB_DOMAIN="your-blb-sni-domain" + go test -v ./baiducloud_appblb_test.go -args \ + --CERTIMATE_SSLDEPLOYER_BAIDUCLOUDAPPBLB_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_BAIDUCLOUDAPPBLB_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_BAIDUCLOUDAPPBLB_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_BAIDUCLOUDAPPBLB_SECRETACCESSKEY="your-secret-access-key" \ + --CERTIMATE_SSLDEPLOYER_BAIDUCLOUDAPPBLB_REGION="bj" \ + --CERTIMATE_SSLDEPLOYER_BAIDUCLOUDAPPBLB_LOADBALANCERID="your-blb-loadbalancer-id" \ + --CERTIMATE_SSLDEPLOYER_BAIDUCLOUDAPPBLB_DOMAIN="your-blb-sni-domain" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -60,7 +60,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, SecretAccessKey: fSecretAccessKey, ResourceType: provider.RESOURCE_TYPE_LOADBALANCER, diff --git a/internal/pkg/core/deployer/providers/baiducloud-appblb/consts.go b/internal/pkg/core/ssl-deployer/providers/baiducloud-appblb/consts.go similarity index 100% rename from internal/pkg/core/deployer/providers/baiducloud-appblb/consts.go rename to internal/pkg/core/ssl-deployer/providers/baiducloud-appblb/consts.go diff --git a/internal/pkg/core/deployer/providers/baiducloud-blb/baiducloud_blb.go b/internal/pkg/core/ssl-deployer/providers/baiducloud-blb/baiducloud_blb.go similarity index 82% rename from internal/pkg/core/deployer/providers/baiducloud-blb/baiducloud_blb.go rename to internal/pkg/core/ssl-deployer/providers/baiducloud-blb/baiducloud_blb.go index cba07bfc..c4d22c1b 100644 --- a/internal/pkg/core/deployer/providers/baiducloud-blb/baiducloud_blb.go +++ b/internal/pkg/core/ssl-deployer/providers/baiducloud-blb/baiducloud_blb.go @@ -11,13 +11,12 @@ import ( bceblb "github.com/baidubce/bce-sdk-go/services/blb" "github.com/google/uuid" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/baiducloud-cert" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/baiducloud-cert" xslices "github.com/usual2970/certimate/internal/pkg/utils/slices" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 百度智能云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 百度智能云 SecretAccessKey。 @@ -37,53 +36,52 @@ type DeployerConfig struct { Domain string `json:"domain,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *bceblb.Client - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *bceblb.Client + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.SecretAccessKey, config.Region) + client, err := createSDKClient(config.AccessKeyId, config.SecretAccessKey, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: config.AccessKeyId, SecretAccessKey: config.SecretAccessKey, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 CAS - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -106,10 +104,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("unsupported resource type '%s'", d.config.ResourceType) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId string) error { +func (d *SSLDeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId string) error { if d.config.LoadbalancerId == "" { return errors.New("config `loadbalancerId` is required") } @@ -171,7 +169,7 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId return nil } -func (d *DeployerProvider) deployToListener(ctx context.Context, cloudCertId string) error { +func (d *SSLDeployerProvider) deployToListener(ctx context.Context, cloudCertId string) error { if d.config.LoadbalancerId == "" { return errors.New("config `loadbalancerId` is required") } @@ -234,7 +232,7 @@ func (d *DeployerProvider) deployToListener(ctx context.Context, cloudCertId str return nil } -func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudLoadbalancerId string, cloudListenerType string, cloudListenerPort int32, cloudCertId string) error { +func (d *SSLDeployerProvider) updateListenerCertificate(ctx context.Context, cloudLoadbalancerId string, cloudListenerType string, cloudListenerPort int32, cloudCertId string) error { switch strings.ToUpper(cloudListenerType) { case "HTTPS": return d.updateHttpsListenerCertificate(ctx, cloudLoadbalancerId, cloudListenerPort, cloudCertId) @@ -245,7 +243,7 @@ func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudL } } -func (d *DeployerProvider) updateHttpsListenerCertificate(ctx context.Context, cloudLoadbalancerId string, cloudHttpsListenerPort int32, cloudCertId string) error { +func (d *SSLDeployerProvider) updateHttpsListenerCertificate(ctx context.Context, cloudLoadbalancerId string, cloudHttpsListenerPort int32, cloudCertId string) error { // 查询 HTTPS 监听器 // REF: https://cloud.baidu.com/doc/BLB/s/yjwvxnvl6#describehttpslisteners%E6%9F%A5%E8%AF%A2https%E7%9B%91%E5%90%AC%E5%99%A8 describeHTTPSListenersReq := &bceblb.DescribeListenerArgs{ @@ -308,7 +306,7 @@ func (d *DeployerProvider) updateHttpsListenerCertificate(ctx context.Context, c return nil } -func (d *DeployerProvider) updateSslListenerCertificate(ctx context.Context, cloudLoadbalancerId string, cloudHttpsListenerPort int32, cloudCertId string) error { +func (d *SSLDeployerProvider) updateSslListenerCertificate(ctx context.Context, cloudLoadbalancerId string, cloudHttpsListenerPort int32, cloudCertId string) error { // 更新 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{ @@ -325,7 +323,7 @@ func (d *DeployerProvider) updateSslListenerCertificate(ctx context.Context, clo return nil } -func createSdkClient(accessKeyId, secretAccessKey, region string) (*bceblb.Client, error) { +func createSDKClient(accessKeyId, secretAccessKey, region string) (*bceblb.Client, error) { endpoint := "" if region != "" { endpoint = fmt.Sprintf("blb.%s.baidubce.com", region) diff --git a/internal/pkg/core/deployer/providers/baiducloud-appblb/baiducloud_appblb_test.go b/internal/pkg/core/ssl-deployer/providers/baiducloud-blb/baiducloud_blb_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/baiducloud-appblb/baiducloud_appblb_test.go rename to internal/pkg/core/ssl-deployer/providers/baiducloud-blb/baiducloud_blb_test.go index 1e60d5f0..21736cb6 100644 --- a/internal/pkg/core/deployer/providers/baiducloud-appblb/baiducloud_appblb_test.go +++ b/internal/pkg/core/ssl-deployer/providers/baiducloud-blb/baiducloud_blb_test.go @@ -1,4 +1,4 @@ -package baiducloudappblb_test +package baiducloudblb_test import ( "context" @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/baiducloud-appblb" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/baiducloud-blb" ) var ( @@ -22,7 +22,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_BAIDUCLOUDAPPBLB_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_BAIDUCLOUDBLB_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -36,14 +36,14 @@ func init() { /* Shell command to run this test: - go test -v ./baiducloud_appblb_test.go -args \ - --CERTIMATE_DEPLOYER_BAIDUCLOUDAPPBLB_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_BAIDUCLOUDAPPBLB_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_BAIDUCLOUDAPPBLB_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_BAIDUCLOUDAPPBLB_SECRETACCESSKEY="your-secret-access-key" \ - --CERTIMATE_DEPLOYER_BAIDUCLOUDAPPBLB_REGION="bj" \ - --CERTIMATE_DEPLOYER_BAIDUCLOUDAPPBLB_LOADBALANCERID="your-blb-loadbalancer-id" \ - --CERTIMATE_DEPLOYER_BAIDUCLOUDAPPBLB_DOMAIN="your-blb-sni-domain" + go test -v ./baiducloud_blb_test.go -args \ + --CERTIMATE_SSLDEPLOYER_BAIDUCLOUDBLB_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_BAIDUCLOUDBLB_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_BAIDUCLOUDBLB_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_BAIDUCLOUDBLB_SECRETACCESSKEY="your-secret-access-key" \ + --CERTIMATE_SSLDEPLOYER_BAIDUCLOUDBLB_REGION="bj" \ + --CERTIMATE_SSLDEPLOYER_BAIDUCLOUDBLB_LOADBALANCERID="your-blb-loadbalancer-id" \ + --CERTIMATE_SSLDEPLOYER_BAIDUCLOUDBLB_DOMAIN="your-blb-sni-domain" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -60,7 +60,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, SecretAccessKey: fSecretAccessKey, ResourceType: provider.RESOURCE_TYPE_LOADBALANCER, diff --git a/internal/pkg/core/deployer/providers/baiducloud-blb/consts.go b/internal/pkg/core/ssl-deployer/providers/baiducloud-blb/consts.go similarity index 100% rename from internal/pkg/core/deployer/providers/baiducloud-blb/consts.go rename to internal/pkg/core/ssl-deployer/providers/baiducloud-blb/consts.go diff --git a/internal/pkg/core/deployer/providers/baiducloud-cdn/baiducloud_cdn.go b/internal/pkg/core/ssl-deployer/providers/baiducloud-cdn/baiducloud_cdn.go similarity index 59% rename from internal/pkg/core/deployer/providers/baiducloud-cdn/baiducloud_cdn.go rename to internal/pkg/core/ssl-deployer/providers/baiducloud-cdn/baiducloud_cdn.go index ccd11f9b..e11dfa2b 100644 --- a/internal/pkg/core/deployer/providers/baiducloud-cdn/baiducloud_cdn.go +++ b/internal/pkg/core/ssl-deployer/providers/baiducloud-cdn/baiducloud_cdn.go @@ -2,17 +2,17 @@ package baiducloudcdn import ( "context" + "errors" "fmt" "log/slog" "time" bcecdn "github.com/baidubce/bce-sdk-go/services/cdn" bcecdnapi "github.com/baidubce/bce-sdk-go/services/cdn/api" - - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 百度智能云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 百度智能云 SecretAccessKey。 @@ -21,41 +21,44 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger sdkClient *bcecdn.Client } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.SecretAccessKey) + client, err := createSDKClient(config.AccessKeyId, config.SecretAccessKey) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + if d.config.Domain == "" { + return nil, errors.New("config `domain` is required") + } + // 修改域名证书 // REF: https://cloud.baidu.com/doc/CDN/s/qjzuz2hp8 putCertResp, err := d.sdkClient.PutCert( @@ -72,10 +75,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'cdn.PutCert': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(accessKeyId, secretAccessKey string) (*bcecdn.Client, error) { +func createSDKClient(accessKeyId, secretAccessKey string) (*bcecdn.Client, error) { client, err := bcecdn.NewClient(accessKeyId, secretAccessKey, "") if err != nil { return nil, err diff --git a/internal/pkg/core/deployer/providers/baiducloud-cdn/baiducloud_cdn_test.go b/internal/pkg/core/ssl-deployer/providers/baiducloud-cdn/baiducloud_cdn_test.go similarity index 70% rename from internal/pkg/core/deployer/providers/baiducloud-cdn/baiducloud_cdn_test.go rename to internal/pkg/core/ssl-deployer/providers/baiducloud-cdn/baiducloud_cdn_test.go index cef03392..fa481314 100644 --- a/internal/pkg/core/deployer/providers/baiducloud-cdn/baiducloud_cdn_test.go +++ b/internal/pkg/core/ssl-deployer/providers/baiducloud-cdn/baiducloud_cdn_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/baiducloud-cdn" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/baiducloud-cdn" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_BAIDUCLOUDCDN_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_BAIDUCLOUDCDN_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./baiducloud_cdn_test.go -args \ - --CERTIMATE_DEPLOYER_BAIDUCLOUDCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_BAIDUCLOUDCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_BAIDUCLOUDCDN_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_BAIDUCLOUDCDN_SECRETACCESSKEY="your-secret-access-key" \ - --CERTIMATE_DEPLOYER_BAIDUCLOUDCDN_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_BAIDUCLOUDCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_BAIDUCLOUDCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_BAIDUCLOUDCDN_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_BAIDUCLOUDCDN_SECRETACCESSKEY="your-secret-access-key" \ + --CERTIMATE_SSLDEPLOYER_BAIDUCLOUDCDN_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, SecretAccessKey: fSecretAccessKey, Domain: fDomain, diff --git a/internal/pkg/core/ssl-deployer/providers/baiducloud-cert/baiducloud_cert.go b/internal/pkg/core/ssl-deployer/providers/baiducloud-cert/baiducloud_cert.go new file mode 100644 index 00000000..5e7b8197 --- /dev/null +++ b/internal/pkg/core/ssl-deployer/providers/baiducloud-cert/baiducloud_cert.go @@ -0,0 +1,66 @@ +package baiducloudcert + +import ( + "context" + "errors" + "fmt" + "log/slog" + + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/baiducloud-cert" +) + +type SSLDeployerProviderConfig struct { + // 百度智能云 AccessKeyId。 + AccessKeyId string `json:"accessKeyId"` + // 百度智能云 SecretAccessKey。 + SecretAccessKey string `json:"secretAccessKey"` +} + +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sslManager core.SSLManager +} + +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) + +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { + if config == nil { + return nil, errors.New("the configuration of the ssl deployer provider is nil") + } + + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ + AccessKeyId: config.AccessKeyId, + SecretAccessKey: config.SecretAccessKey, + }) + if err != nil { + return nil, fmt.Errorf("could not create ssl manager: %w", err) + } + + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sslManager: sslmgr, + }, nil +} + +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { + if logger == nil { + d.logger = slog.New(slog.DiscardHandler) + } else { + d.logger = logger + } +} + +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) + if err != nil { + return nil, fmt.Errorf("failed to upload certificate file: %w", err) + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) + } + + return &core.SSLDeployResult{}, nil +} diff --git a/internal/pkg/core/deployer/providers/baishan-cdn/baishan_cdn.go b/internal/pkg/core/ssl-deployer/providers/baishan-cdn/baishan_cdn.go similarity index 84% rename from internal/pkg/core/deployer/providers/baishan-cdn/baishan_cdn.go rename to internal/pkg/core/ssl-deployer/providers/baishan-cdn/baishan_cdn.go index daaafdc1..af16ce73 100644 --- a/internal/pkg/core/deployer/providers/baishan-cdn/baishan_cdn.go +++ b/internal/pkg/core/ssl-deployer/providers/baishan-cdn/baishan_cdn.go @@ -10,12 +10,12 @@ import ( "strings" "time" - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" bssdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/baishan" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 白山云 API Token。 ApiToken string `json:"apiToken"` // 加速域名(支持泛域名)。 @@ -25,41 +25,40 @@ type DeployerConfig struct { CertificateId string `json:"certificateId,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger sdkClient *bssdk.Client } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.ApiToken) + client, err := createSDKClient(config.ApiToken) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { if d.config.Domain == "" { return nil, errors.New("config `domain` is required") } @@ -140,9 +139,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE } } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(apiToken string) (*bssdk.Client, error) { +func createSDKClient(apiToken string) (*bssdk.Client, error) { return bssdk.NewClient(apiToken) } diff --git a/internal/pkg/core/deployer/providers/baishan-cdn/baishan_cdn_test.go b/internal/pkg/core/ssl-deployer/providers/baishan-cdn/baishan_cdn_test.go similarity index 70% rename from internal/pkg/core/deployer/providers/baishan-cdn/baishan_cdn_test.go rename to internal/pkg/core/ssl-deployer/providers/baishan-cdn/baishan_cdn_test.go index 8e3a16b8..0e7917c5 100644 --- a/internal/pkg/core/deployer/providers/baishan-cdn/baishan_cdn_test.go +++ b/internal/pkg/core/ssl-deployer/providers/baishan-cdn/baishan_cdn_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/baishan-cdn" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/baishan-cdn" ) var ( @@ -19,7 +19,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_BAISHANCDN_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_BAISHANCDN_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -31,10 +31,10 @@ func init() { Shell command to run this test: go test -v ./baishan_cdn_test.go -args \ - --CERTIMATE_DEPLOYER_BAISHANCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_BAISHANCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_BAISHANCDN_APITOKEN="your-api-token" \ - --CERTIMATE_DEPLOYER_BAISHANCDN_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_BAISHANCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_BAISHANCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_BAISHANCDN_APITOKEN="your-api-token" \ + --CERTIMATE_SSLDEPLOYER_BAISHANCDN_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -48,7 +48,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ ApiToken: fApiToken, Domain: fDomain, }) diff --git a/internal/pkg/core/deployer/providers/baotapanel-console/baotapanel_console.go b/internal/pkg/core/ssl-deployer/providers/baotapanel-console/baotapanel_console.go similarity index 69% rename from internal/pkg/core/deployer/providers/baotapanel-console/baotapanel_console.go rename to internal/pkg/core/ssl-deployer/providers/baotapanel-console/baotapanel_console.go index 2edbd4a7..302d59c5 100644 --- a/internal/pkg/core/deployer/providers/baotapanel-console/baotapanel_console.go +++ b/internal/pkg/core/ssl-deployer/providers/baotapanel-console/baotapanel_console.go @@ -3,14 +3,15 @@ package baotapanelconsole import ( "context" "crypto/tls" + "errors" "fmt" "log/slog" - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" btsdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/btpanel" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 宝塔面板服务地址。 ServerUrl string `json:"serverUrl"` // 宝塔面板接口密钥。 @@ -21,41 +22,40 @@ type DeployerConfig struct { AutoRestart bool `json:"autoRestart"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger sdkClient *btsdk.Client } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.ServerUrl, config.ApiKey, config.AllowInsecureConnections) + client, err := createSDKClient(config.ServerUrl, config.ApiKey, config.AllowInsecureConnections) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { // 设置面板 SSL 证书 configSavePanelSSLReq := &btsdk.ConfigSavePanelSSLRequest{ PrivateKey: privkeyPEM, @@ -77,10 +77,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE d.logger.Debug("sdk request 'bt.SystemServiceAdmin'", slog.Any("request", systemServiceAdminReq), slog.Any("response", systemServiceAdminResp)) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(serverUrl, apiKey string, skipTlsVerify bool) (*btsdk.Client, error) { +func createSDKClient(serverUrl, apiKey string, skipTlsVerify bool) (*btsdk.Client, error) { client, err := btsdk.NewClient(serverUrl, apiKey) if err != nil { return nil, err diff --git a/internal/pkg/core/deployer/providers/baotapanel-console/baotapanel_console_test.go b/internal/pkg/core/ssl-deployer/providers/baotapanel-console/baotapanel_console_test.go similarity index 70% rename from internal/pkg/core/deployer/providers/baotapanel-console/baotapanel_console_test.go rename to internal/pkg/core/ssl-deployer/providers/baotapanel-console/baotapanel_console_test.go index 2fd4cc5b..33a73d11 100644 --- a/internal/pkg/core/deployer/providers/baotapanel-console/baotapanel_console_test.go +++ b/internal/pkg/core/ssl-deployer/providers/baotapanel-console/baotapanel_console_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/baotapanel-console" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/baotapanel-console" ) var ( @@ -19,7 +19,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_BAOTAPANELCONSOLE_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_BAOTAPANELCONSOLE_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -31,10 +31,10 @@ func init() { Shell command to run this test: go test -v ./baotapanel_console_test.go -args \ - --CERTIMATE_DEPLOYER_BAOTAPANELCONSOLE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_BAOTAPANELCONSOLE_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_BAOTAPANELCONSOLE_SERVERURL="http://127.0.0.1:8888" \ - --CERTIMATE_DEPLOYER_BAOTAPANELCONSOLE_APIKEY="your-api-key" + --CERTIMATE_SSLDEPLOYER_BAOTAPANELCONSOLE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_BAOTAPANELCONSOLE_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_BAOTAPANELCONSOLE_SERVERURL="http://127.0.0.1:8888" \ + --CERTIMATE_SSLDEPLOYER_BAOTAPANELCONSOLE_APIKEY="your-api-key" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -48,7 +48,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("APIKEY: %v", fApiKey), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ ServerUrl: fServerUrl, ApiKey: fApiKey, AllowInsecureConnections: true, diff --git a/internal/pkg/core/deployer/providers/baotapanel-site/baotapanel_site.go b/internal/pkg/core/ssl-deployer/providers/baotapanel-site/baotapanel_site.go similarity index 79% rename from internal/pkg/core/deployer/providers/baotapanel-site/baotapanel_site.go rename to internal/pkg/core/ssl-deployer/providers/baotapanel-site/baotapanel_site.go index eca35af1..11f7bb76 100644 --- a/internal/pkg/core/deployer/providers/baotapanel-site/baotapanel_site.go +++ b/internal/pkg/core/ssl-deployer/providers/baotapanel-site/baotapanel_site.go @@ -7,12 +7,12 @@ import ( "fmt" "log/slog" - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" btsdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/btpanel" xslices "github.com/usual2970/certimate/internal/pkg/utils/slices" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 宝塔面板服务地址。 ServerUrl string `json:"serverUrl"` // 宝塔面板接口密钥。 @@ -27,41 +27,40 @@ type DeployerConfig struct { SiteNames []string `json:"siteNames,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger sdkClient *btsdk.Client } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.ServerUrl, config.ApiKey, config.AllowInsecureConnections) + client, err := createSDKClient(config.ServerUrl, config.ApiKey, config.AllowInsecureConnections) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { switch d.config.SiteType { case "php": { @@ -120,10 +119,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("unsupported site type '%s'", d.config.SiteType) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(serverUrl, apiKey string, skipTlsVerify bool) (*btsdk.Client, error) { +func createSDKClient(serverUrl, apiKey string, skipTlsVerify bool) (*btsdk.Client, error) { client, err := btsdk.NewClient(serverUrl, apiKey) if err != nil { return nil, err diff --git a/internal/pkg/core/deployer/providers/baotapanel-site/baotapanel_site_test.go b/internal/pkg/core/ssl-deployer/providers/baotapanel-site/baotapanel_site_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/baotapanel-site/baotapanel_site_test.go rename to internal/pkg/core/ssl-deployer/providers/baotapanel-site/baotapanel_site_test.go index 9e4659ea..a774a21f 100644 --- a/internal/pkg/core/deployer/providers/baotapanel-site/baotapanel_site_test.go +++ b/internal/pkg/core/ssl-deployer/providers/baotapanel-site/baotapanel_site_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/baotapanel-site" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/baotapanel-site" ) var ( @@ -21,7 +21,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_BAOTAPANELSITE_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_BAOTAPANELSITE_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -35,12 +35,12 @@ func init() { Shell command to run this test: go test -v ./baotapanel_site_test.go -args \ - --CERTIMATE_DEPLOYER_BAOTAPANELSITE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_BAOTAPANELSITE_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_BAOTAPANELSITE_SERVERURL="http://127.0.0.1:8888" \ - --CERTIMATE_DEPLOYER_BAOTAPANELSITE_APIKEY="your-api-key" \ - --CERTIMATE_DEPLOYER_BAOTAPANELSITE_SITETYPE="php" \ - --CERTIMATE_DEPLOYER_BAOTAPANELSITE_SITENAME="your-site-name" + --CERTIMATE_SSLDEPLOYER_BAOTAPANELSITE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_BAOTAPANELSITE_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_BAOTAPANELSITE_SERVERURL="http://127.0.0.1:8888" \ + --CERTIMATE_SSLDEPLOYER_BAOTAPANELSITE_APIKEY="your-api-key" \ + --CERTIMATE_SSLDEPLOYER_BAOTAPANELSITE_SITETYPE="php" \ + --CERTIMATE_SSLDEPLOYER_BAOTAPANELSITE_SITENAME="your-site-name" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -56,7 +56,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("SITENAME: %v", fSiteName), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ ServerUrl: fServerUrl, ApiKey: fApiKey, AllowInsecureConnections: true, diff --git a/internal/pkg/core/deployer/providers/baotawaf-console/baotawaf_console.go b/internal/pkg/core/ssl-deployer/providers/baotawaf-console/baotawaf_console.go similarity index 63% rename from internal/pkg/core/deployer/providers/baotawaf-console/baotawaf_console.go rename to internal/pkg/core/ssl-deployer/providers/baotawaf-console/baotawaf_console.go index 0f81aab7..eaeb4aca 100644 --- a/internal/pkg/core/deployer/providers/baotawaf-console/baotawaf_console.go +++ b/internal/pkg/core/ssl-deployer/providers/baotawaf-console/baotawaf_console.go @@ -3,15 +3,16 @@ package baotapanelconsole import ( "context" "crypto/tls" + "errors" "fmt" "log/slog" - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" btwafsdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/btwaf" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 堡塔云 WAF 服务地址。 ServerUrl string `json:"serverUrl"` // 堡塔云 WAF 接口密钥。 @@ -20,41 +21,40 @@ type DeployerConfig struct { AllowInsecureConnections bool `json:"allowInsecureConnections,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger sdkClient *btwafsdk.Client } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.ServerUrl, config.ApiKey, config.AllowInsecureConnections) + client, err := createSDKClient(config.ServerUrl, config.ApiKey, config.AllowInsecureConnections) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { // 设置面板 SSL configSetCertReq := &btwafsdk.ConfigSetCertRequest{ CertContent: xtypes.ToPtr(certPEM), @@ -66,10 +66,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'bt.ConfigSetCert': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(serverUrl, apiKey string, skipTlsVerify bool) (*btwafsdk.Client, error) { +func createSDKClient(serverUrl, apiKey string, skipTlsVerify bool) (*btwafsdk.Client, error) { client, err := btwafsdk.NewClient(serverUrl, apiKey) if err != nil { return nil, err diff --git a/internal/pkg/core/deployer/providers/baotawaf-console/baotawaf_console_test.go b/internal/pkg/core/ssl-deployer/providers/baotawaf-console/baotawaf_console_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/baotawaf-console/baotawaf_console_test.go rename to internal/pkg/core/ssl-deployer/providers/baotawaf-console/baotawaf_console_test.go index b3804fb5..f4462c1f 100644 --- a/internal/pkg/core/deployer/providers/baotawaf-console/baotawaf_console_test.go +++ b/internal/pkg/core/ssl-deployer/providers/baotawaf-console/baotawaf_console_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/baotawaf-console" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/baotawaf-console" ) var ( @@ -21,7 +21,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_BAOTAWAFCONSOLE_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_BAOTAWAFCONSOLE_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,10 +33,10 @@ func init() { Shell command to run this test: go test -v ./baotawaf_console_test.go -args \ - --CERTIMATE_DEPLOYER_BAOTAWAFCONSOLE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_BAOTAWAFCONSOLE_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_BAOTAWAFCONSOLE_SERVERURL="http://127.0.0.1:8888" \ - --CERTIMATE_DEPLOYER_BAOTAWAFCONSOLE_APIKEY="your-api-key" + --CERTIMATE_SSLDEPLOYER_BAOTAWAFCONSOLE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_BAOTAWAFCONSOLE_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_BAOTAWAFCONSOLE_SERVERURL="http://127.0.0.1:8888" \ + --CERTIMATE_SSLDEPLOYER_BAOTAWAFCONSOLE_APIKEY="your-api-key" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -50,7 +50,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("APIKEY: %v", fApiKey), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ ServerUrl: fServerUrl, ApiKey: fApiKey, AllowInsecureConnections: true, diff --git a/internal/pkg/core/deployer/providers/baotawaf-site/baotawaf_site.go b/internal/pkg/core/ssl-deployer/providers/baotawaf-site/baotawaf_site.go similarity index 79% rename from internal/pkg/core/deployer/providers/baotawaf-site/baotawaf_site.go rename to internal/pkg/core/ssl-deployer/providers/baotawaf-site/baotawaf_site.go index 8cb71441..3309b30a 100644 --- a/internal/pkg/core/deployer/providers/baotawaf-site/baotawaf_site.go +++ b/internal/pkg/core/ssl-deployer/providers/baotawaf-site/baotawaf_site.go @@ -7,12 +7,12 @@ import ( "fmt" "log/slog" - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" btwafsdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/btwaf" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 堡塔云 WAF 服务地址。 ServerUrl string `json:"serverUrl"` // 堡塔云 WAF 接口密钥。 @@ -26,41 +26,40 @@ type DeployerConfig struct { SitePort int32 `json:"sitePort,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger sdkClient *btwafsdk.Client } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.ServerUrl, config.ApiKey, config.AllowInsecureConnections) + client, err := createSDKClient(config.ServerUrl, config.ApiKey, config.AllowInsecureConnections) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { if d.config.SiteName == "" { return nil, errors.New("config `siteName` is required") } @@ -129,10 +128,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'bt.ModifySite': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(serverUrl, apiKey string, skipTlsVerify bool) (*btwafsdk.Client, error) { +func createSDKClient(serverUrl, apiKey string, skipTlsVerify bool) (*btwafsdk.Client, error) { client, err := btwafsdk.NewClient(serverUrl, apiKey) if err != nil { return nil, err diff --git a/internal/pkg/core/deployer/providers/baotawaf-site/baotawaf_site_test.go b/internal/pkg/core/ssl-deployer/providers/baotawaf-site/baotawaf_site_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/baotawaf-site/baotawaf_site_test.go rename to internal/pkg/core/ssl-deployer/providers/baotawaf-site/baotawaf_site_test.go index e9b4b836..8058734d 100644 --- a/internal/pkg/core/deployer/providers/baotawaf-site/baotawaf_site_test.go +++ b/internal/pkg/core/ssl-deployer/providers/baotawaf-site/baotawaf_site_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/baotawaf-site" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/baotawaf-site" ) var ( @@ -21,7 +21,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_BAOTAWAFSITE_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_BAOTAWAFSITE_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -35,12 +35,12 @@ func init() { Shell command to run this test: go test -v ./baotawaf_site_test.go -args \ - --CERTIMATE_DEPLOYER_BAOTAWAFSITE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_BAOTAWAFSITE_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_BAOTAWAFSITE_SERVERURL="http://127.0.0.1:8888" \ - --CERTIMATE_DEPLOYER_BAOTAWAFSITE_APIKEY="your-api-key" \ - --CERTIMATE_DEPLOYER_BAOTAWAFSITE_SITENAME="your-site-name" \ - --CERTIMATE_DEPLOYER_BAOTAWAFSITE_SITEPORT=443 + --CERTIMATE_SSLDEPLOYER_BAOTAWAFSITE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_BAOTAWAFSITE_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_BAOTAWAFSITE_SERVERURL="http://127.0.0.1:8888" \ + --CERTIMATE_SSLDEPLOYER_BAOTAWAFSITE_APIKEY="your-api-key" \ + --CERTIMATE_SSLDEPLOYER_BAOTAWAFSITE_SITENAME="your-site-name" \ + --CERTIMATE_SSLDEPLOYER_BAOTAWAFSITE_SITEPORT=443 */ func TestDeploy(t *testing.T) { flag.Parse() @@ -56,7 +56,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("SITEPORT: %v", fSitePort), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ ServerUrl: fServerUrl, ApiKey: fApiKey, AllowInsecureConnections: true, diff --git a/internal/pkg/core/deployer/providers/bunny-cdn/bunny_cdn.go b/internal/pkg/core/ssl-deployer/providers/bunny-cdn/bunny_cdn.go similarity index 59% rename from internal/pkg/core/deployer/providers/bunny-cdn/bunny_cdn.go rename to internal/pkg/core/ssl-deployer/providers/bunny-cdn/bunny_cdn.go index c59a6dd9..be985c03 100644 --- a/internal/pkg/core/deployer/providers/bunny-cdn/bunny_cdn.go +++ b/internal/pkg/core/ssl-deployer/providers/bunny-cdn/bunny_cdn.go @@ -3,14 +3,15 @@ package bunnycdn import ( "context" "encoding/base64" + "errors" "fmt" "log/slog" - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" bunnysdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/bunny" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // Bunny API Key。 ApiKey string `json:"apiKey"` // Bunny Pull Zone ID。 @@ -19,44 +20,46 @@ type DeployerConfig struct { Hostname string `json:"hostname"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger sdkClient *bunnysdk.Client } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.ApiKey) + client, err := createSDKClient(config.ApiKey) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { if d.config.PullZoneId == "" { return nil, fmt.Errorf("config `pullZoneId` is required") } + if d.config.Hostname == "" { + return nil, fmt.Errorf("config `hostname` is required") + } // 上传证书 createCertificateReq := &bunnysdk.AddCustomCertificateRequest{ @@ -70,9 +73,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'bunny.AddCustomCertificate': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(apiKey string) (*bunnysdk.Client, error) { +func createSDKClient(apiKey string) (*bunnysdk.Client, error) { return bunnysdk.NewClient(apiKey) } diff --git a/internal/pkg/core/deployer/providers/bunny-cdn/bunny_cdn_test.go b/internal/pkg/core/ssl-deployer/providers/bunny-cdn/bunny_cdn_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/bunny-cdn/bunny_cdn_test.go rename to internal/pkg/core/ssl-deployer/providers/bunny-cdn/bunny_cdn_test.go index 83fbb0f6..22279001 100644 --- a/internal/pkg/core/deployer/providers/bunny-cdn/bunny_cdn_test.go +++ b/internal/pkg/core/ssl-deployer/providers/bunny-cdn/bunny_cdn_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/bunny-cdn" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/bunny-cdn" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_BUNNYCDN_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_BUNNYCDN_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./bunny_cdn_test.go -args \ - --CERTIMATE_DEPLOYER_BUNNYCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_BUNNYCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_BUNNYCDN_APITOKEN="your-api-token" \ - --CERTIMATE_DEPLOYER_BUNNYCDN_PULLZONEID="your-pull-zone-id" \ - --CERTIMATE_DEPLOYER_BUNNYCDN_HOSTNAME="example.com" + --CERTIMATE_SSLDEPLOYER_BUNNYCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_BUNNYCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_BUNNYCDN_APITOKEN="your-api-token" \ + --CERTIMATE_SSLDEPLOYER_BUNNYCDN_PULLZONEID="your-pull-zone-id" \ + --CERTIMATE_SSLDEPLOYER_BUNNYCDN_HOSTNAME="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("HOSTNAME: %v", fHostName), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ ApiKey: fApiKey, PullZoneId: fPullZoneId, Hostname: fHostName, diff --git a/internal/pkg/core/deployer/providers/byteplus-cdn/byteplus_cdn.go b/internal/pkg/core/ssl-deployer/providers/byteplus-cdn/byteplus_cdn.go similarity index 71% rename from internal/pkg/core/deployer/providers/byteplus-cdn/byteplus_cdn.go rename to internal/pkg/core/ssl-deployer/providers/byteplus-cdn/byteplus_cdn.go index a11bbaf7..dd4051a9 100644 --- a/internal/pkg/core/deployer/providers/byteplus-cdn/byteplus_cdn.go +++ b/internal/pkg/core/ssl-deployer/providers/byteplus-cdn/byteplus_cdn.go @@ -9,12 +9,11 @@ import ( bpcdn "github.com/byteplus-sdk/byteplus-sdk-golang/service/cdn" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/byteplus-cdn" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/byteplus-cdn" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // BytePlus AccessKey。 AccessKey string `json:"accessKey"` // BytePlus SecretKey。 @@ -23,53 +22,53 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *bpcdn.CDN - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *bpcdn.CDN + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } client := bpcdn.NewInstance() client.Client.SetAccessKey(config.AccessKey) client.Client.SetSecretKey(config.SecretKey) - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKey: config.AccessKey, SecretKey: config.SecretKey, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 CDN - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -141,5 +140,5 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE } } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } diff --git a/internal/pkg/core/deployer/providers/byteplus-cdn/byteplus_cdn_test.go b/internal/pkg/core/ssl-deployer/providers/byteplus-cdn/byteplus_cdn_test.go similarity index 70% rename from internal/pkg/core/deployer/providers/byteplus-cdn/byteplus_cdn_test.go rename to internal/pkg/core/ssl-deployer/providers/byteplus-cdn/byteplus_cdn_test.go index 34e657cb..6587e533 100644 --- a/internal/pkg/core/deployer/providers/byteplus-cdn/byteplus_cdn_test.go +++ b/internal/pkg/core/ssl-deployer/providers/byteplus-cdn/byteplus_cdn_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/byteplus-cdn" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/byteplus-cdn" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_BYTEPLUSCDN_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_BYTEPLUSCDN_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./byteplus_cdn_test.go -args \ - --CERTIMATE_DEPLOYER_BYTEPLUSCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_BYTEPLUSCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_BYTEPLUSCDN_ACCESSKEY="your-access-key" \ - --CERTIMATE_DEPLOYER_BYTEPLUSCDN_SECRETKEY="your-secret-key" \ - --CERTIMATE_DEPLOYER_BYTEPLUSCDN_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_BYTEPLUSCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_BYTEPLUSCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_BYTEPLUSCDN_ACCESSKEY="your-access-key" \ + --CERTIMATE_SSLDEPLOYER_BYTEPLUSCDN_SECRETKEY="your-secret-key" \ + --CERTIMATE_SSLDEPLOYER_BYTEPLUSCDN_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKey: fAccessKey, SecretKey: fSecretKey, Domain: fDomain, diff --git a/internal/pkg/core/deployer/providers/cachefly/cachefly.go b/internal/pkg/core/ssl-deployer/providers/cachefly/cachefly.go similarity index 59% rename from internal/pkg/core/deployer/providers/cachefly/cachefly.go rename to internal/pkg/core/ssl-deployer/providers/cachefly/cachefly.go index 823eb0b2..31e8b339 100644 --- a/internal/pkg/core/deployer/providers/cachefly/cachefly.go +++ b/internal/pkg/core/ssl-deployer/providers/cachefly/cachefly.go @@ -2,54 +2,54 @@ package cachefly import ( "context" + "errors" "fmt" "log/slog" - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" cacheflysdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/cachefly" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // CacheFly API Token。 ApiToken string `json:"apiToken"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger sdkClient *cacheflysdk.Client } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.ApiToken) + client, err := createSDKClient(config.ApiToken) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { // 上传证书 // REF: https://api.cachefly.com/api/2.5/docs#tag/Certificates/paths/~1certificates/post createCertificateReq := &cacheflysdk.CreateCertificateRequest{ @@ -62,9 +62,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'cachefly.CreateCertificate': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(apiToken string) (*cacheflysdk.Client, error) { +func createSDKClient(apiToken string) (*cacheflysdk.Client, error) { return cacheflysdk.NewClient(apiToken) } diff --git a/internal/pkg/core/deployer/providers/cachefly/cachefly_test.go b/internal/pkg/core/ssl-deployer/providers/cachefly/cachefly_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/cachefly/cachefly_test.go rename to internal/pkg/core/ssl-deployer/providers/cachefly/cachefly_test.go index 802d8b49..144cfcf8 100644 --- a/internal/pkg/core/deployer/providers/cachefly/cachefly_test.go +++ b/internal/pkg/core/ssl-deployer/providers/cachefly/cachefly_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/cachefly" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/cachefly" ) var ( @@ -18,7 +18,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_CACHEFLY_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_CACHEFLY_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -29,9 +29,9 @@ func init() { Shell command to run this test: go test -v ./cachefly_test.go -args \ - --CERTIMATE_DEPLOYER_CACHEFLY_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_CACHEFLY_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_CACHEFLY_APITOKEN="your-api-token" + --CERTIMATE_SSLDEPLOYER_CACHEFLY_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_CACHEFLY_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_CACHEFLY_APITOKEN="your-api-token" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -44,7 +44,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("APITOKEN: %v", fApiToken), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ ApiToken: fApiToken, }) if err != nil { diff --git a/internal/pkg/core/deployer/providers/cdnfly/cdnfly.go b/internal/pkg/core/ssl-deployer/providers/cdnfly/cdnfly.go similarity index 82% rename from internal/pkg/core/deployer/providers/cdnfly/cdnfly.go rename to internal/pkg/core/ssl-deployer/providers/cdnfly/cdnfly.go index c21b509a..98bd4463 100644 --- a/internal/pkg/core/deployer/providers/cdnfly/cdnfly.go +++ b/internal/pkg/core/ssl-deployer/providers/cdnfly/cdnfly.go @@ -9,12 +9,12 @@ import ( "log/slog" "time" - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" cdnflysdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/cdnfly" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // Cdnfly 服务地址。 ServerUrl string `json:"serverUrl"` // Cdnfly 用户端 API Key。 @@ -33,41 +33,40 @@ type DeployerConfig struct { CertificateId string `json:"certificateId,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger sdkClient *cdnflysdk.Client } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.ServerUrl, config.ApiKey, config.ApiSecret, config.AllowInsecureConnections) + client, err := createSDKClient(config.ServerUrl, config.ApiKey, config.ApiSecret, config.AllowInsecureConnections) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { // 根据部署资源类型决定部署方式 switch d.config.ResourceType { case RESOURCE_TYPE_SITE: @@ -84,10 +83,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("unsupported resource type '%s'", d.config.ResourceType) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func (d *DeployerProvider) deployToSite(ctx context.Context, certPEM string, privkeyPEM string) error { +func (d *SSLDeployerProvider) deployToSite(ctx context.Context, certPEM string, privkeyPEM string) error { if d.config.SiteId == "" { return errors.New("config `siteId` is required") } @@ -132,7 +131,7 @@ func (d *DeployerProvider) deployToSite(ctx context.Context, certPEM string, pri return nil } -func (d *DeployerProvider) deployToCertificate(ctx context.Context, certPEM string, privkeyPEM string) error { +func (d *SSLDeployerProvider) deployToCertificate(ctx context.Context, certPEM string, privkeyPEM string) error { if d.config.CertificateId == "" { return errors.New("config `certificateId` is required") } @@ -153,7 +152,7 @@ func (d *DeployerProvider) deployToCertificate(ctx context.Context, certPEM stri return nil } -func createSdkClient(serverUrl, apiKey, apiSecret string, skipTlsVerify bool) (*cdnflysdk.Client, error) { +func createSDKClient(serverUrl, apiKey, apiSecret string, skipTlsVerify bool) (*cdnflysdk.Client, error) { client, err := cdnflysdk.NewClient(serverUrl, apiKey, apiSecret) if err != nil { return nil, err diff --git a/internal/pkg/core/deployer/providers/cdnfly/cdnfly_test.go b/internal/pkg/core/ssl-deployer/providers/cdnfly/cdnfly_test.go similarity index 73% rename from internal/pkg/core/deployer/providers/cdnfly/cdnfly_test.go rename to internal/pkg/core/ssl-deployer/providers/cdnfly/cdnfly_test.go index 73128183..7d1883d6 100644 --- a/internal/pkg/core/deployer/providers/cdnfly/cdnfly_test.go +++ b/internal/pkg/core/ssl-deployer/providers/cdnfly/cdnfly_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/cdnfly" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/cdnfly" ) var ( @@ -21,7 +21,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_CDNFLY_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_CDNFLY_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -35,12 +35,12 @@ func init() { Shell command to run this test: go test -v ./cdnfly_test.go -args \ - --CERTIMATE_DEPLOYER_CDNFLY_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_CDNFLY_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_CDNFLY_SERVERURL="http://127.0.0.1:88" \ - --CERTIMATE_DEPLOYER_CDNFLY_APIKEY="your-api-key" \ - --CERTIMATE_DEPLOYER_CDNFLY_APISECRET="your-api-secret" \ - --CERTIMATE_DEPLOYER_CDNFLY_CERTIFICATEID="your-cert-id" + --CERTIMATE_SSLDEPLOYER_CDNFLY_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_CDNFLY_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_CDNFLY_SERVERURL="http://127.0.0.1:88" \ + --CERTIMATE_SSLDEPLOYER_CDNFLY_APIKEY="your-api-key" \ + --CERTIMATE_SSLDEPLOYER_CDNFLY_APISECRET="your-api-secret" \ + --CERTIMATE_SSLDEPLOYER_CDNFLY_CERTIFICATEID="your-cert-id" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -56,7 +56,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("CERTIFICATEID: %v", fCertificateId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ ServerUrl: fServerUrl, ApiKey: fApiKey, ApiSecret: fApiSecret, diff --git a/internal/pkg/core/deployer/providers/cdnfly/consts.go b/internal/pkg/core/ssl-deployer/providers/cdnfly/consts.go similarity index 100% rename from internal/pkg/core/deployer/providers/cdnfly/consts.go rename to internal/pkg/core/ssl-deployer/providers/cdnfly/consts.go diff --git a/internal/pkg/core/deployer/providers/ctcccloud-ao/ctcccloud_ao.go b/internal/pkg/core/ssl-deployer/providers/ctcccloud-ao/ctcccloud_ao.go similarity index 64% rename from internal/pkg/core/deployer/providers/ctcccloud-ao/ctcccloud_ao.go rename to internal/pkg/core/ssl-deployer/providers/ctcccloud-ao/ctcccloud_ao.go index 3c236184..95a921e2 100644 --- a/internal/pkg/core/deployer/providers/ctcccloud-ao/ctcccloud_ao.go +++ b/internal/pkg/core/ssl-deployer/providers/ctcccloud-ao/ctcccloud_ao.go @@ -6,14 +6,13 @@ import ( "fmt" "log/slog" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/ctcccloud-ao" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/ctcccloud-ao" ctyunao "github.com/usual2970/certimate/internal/pkg/sdk3rd/ctyun/ao" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 天翼云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 天翼云 SecretAccessKey。 @@ -22,57 +21,56 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *ctyunao.Client - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *ctyunao.Client + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.SecretAccessKey) + client, err := createSDKClient(config.AccessKeyId, config.SecretAccessKey) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: config.AccessKeyId, SecretAccessKey: config.SecretAccessKey, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { if d.config.Domain == "" { return nil, errors.New("config `domain` is required") } - // 上传证书到 AccessOne - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -105,9 +103,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'cdn.ModifyDomainConfig': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(accessKeyId, secretAccessKey string) (*ctyunao.Client, error) { +func createSDKClient(accessKeyId, secretAccessKey string) (*ctyunao.Client, error) { return ctyunao.NewClient(accessKeyId, secretAccessKey) } diff --git a/internal/pkg/core/deployer/providers/ctcccloud-ao/ctcccloud_ao_test.go b/internal/pkg/core/ssl-deployer/providers/ctcccloud-ao/ctcccloud_ao_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/ctcccloud-ao/ctcccloud_ao_test.go rename to internal/pkg/core/ssl-deployer/providers/ctcccloud-ao/ctcccloud_ao_test.go index 3cc42cb3..95d2a5a4 100644 --- a/internal/pkg/core/deployer/providers/ctcccloud-ao/ctcccloud_ao_test.go +++ b/internal/pkg/core/ssl-deployer/providers/ctcccloud-ao/ctcccloud_ao_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/ctcccloud-ao" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/ctcccloud-ao" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_CTCCCLOUDAO_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_CTCCCLOUDAO_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./ctcccloud_ao_test.go -args \ - --CERTIMATE_DEPLOYER_CTCCCLOUDAO_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_CTCCCLOUDAO_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_CTCCCLOUDAO_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_CTCCCLOUDAO_SECRETACCESSKEY="your-secret-access-key" \ - --CERTIMATE_DEPLOYER_CTCCCLOUDAO_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDAO_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDAO_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDAO_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDAO_SECRETACCESSKEY="your-secret-access-key" \ + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDAO_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, SecretAccessKey: fSecretAccessKey, Domain: fDomain, diff --git a/internal/pkg/core/deployer/providers/ctcccloud-cdn/ctcccloud_cdn.go b/internal/pkg/core/ssl-deployer/providers/ctcccloud-cdn/ctcccloud_cdn.go similarity index 62% rename from internal/pkg/core/deployer/providers/ctcccloud-cdn/ctcccloud_cdn.go rename to internal/pkg/core/ssl-deployer/providers/ctcccloud-cdn/ctcccloud_cdn.go index 17e849d0..f782a8d1 100644 --- a/internal/pkg/core/deployer/providers/ctcccloud-cdn/ctcccloud_cdn.go +++ b/internal/pkg/core/ssl-deployer/providers/ctcccloud-cdn/ctcccloud_cdn.go @@ -6,14 +6,13 @@ import ( "fmt" "log/slog" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/ctcccloud-cdn" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/ctcccloud-cdn" ctyuncdn "github.com/usual2970/certimate/internal/pkg/sdk3rd/ctyun/cdn" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 天翼云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 天翼云 SecretAccessKey。 @@ -22,57 +21,56 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *ctyuncdn.Client - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *ctyuncdn.Client + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.SecretAccessKey) + client, err := createSDKClient(config.AccessKeyId, config.SecretAccessKey) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: config.AccessKeyId, SecretAccessKey: config.SecretAccessKey, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { if d.config.Domain == "" { return nil, errors.New("config `domain` is required") } - // 上传证书到 CDN - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -103,9 +101,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'cdn.UpdateDomain': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(accessKeyId, secretAccessKey string) (*ctyuncdn.Client, error) { +func createSDKClient(accessKeyId, secretAccessKey string) (*ctyuncdn.Client, error) { return ctyuncdn.NewClient(accessKeyId, secretAccessKey) } diff --git a/internal/pkg/core/deployer/providers/ctcccloud-cdn/ctcccloud_cdn_test.go b/internal/pkg/core/ssl-deployer/providers/ctcccloud-cdn/ctcccloud_cdn_test.go similarity index 70% rename from internal/pkg/core/deployer/providers/ctcccloud-cdn/ctcccloud_cdn_test.go rename to internal/pkg/core/ssl-deployer/providers/ctcccloud-cdn/ctcccloud_cdn_test.go index 7a754305..41ffeb81 100644 --- a/internal/pkg/core/deployer/providers/ctcccloud-cdn/ctcccloud_cdn_test.go +++ b/internal/pkg/core/ssl-deployer/providers/ctcccloud-cdn/ctcccloud_cdn_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/ctcccloud-cdn" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/ctcccloud-cdn" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_CTCCCLOUDCDN_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_CTCCCLOUDCDN_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./ctcccloud_cdn_test.go -args \ - --CERTIMATE_DEPLOYER_CTCCCLOUDCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_CTCCCLOUDCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_CTCCCLOUDCDN_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_CTCCCLOUDCDN_SECRETACCESSKEY="your-secret-access-key" \ - --CERTIMATE_DEPLOYER_CTCCCLOUDCDN_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDCDN_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDCDN_SECRETACCESSKEY="your-secret-access-key" \ + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDCDN_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, SecretAccessKey: fSecretAccessKey, Domain: fDomain, diff --git a/internal/pkg/core/ssl-deployer/providers/ctcccloud-cms/ctcccloud_cms.go b/internal/pkg/core/ssl-deployer/providers/ctcccloud-cms/ctcccloud_cms.go new file mode 100644 index 00000000..d92fe5c7 --- /dev/null +++ b/internal/pkg/core/ssl-deployer/providers/ctcccloud-cms/ctcccloud_cms.go @@ -0,0 +1,66 @@ +package ctcccloudcms + +import ( + "context" + "errors" + "fmt" + "log/slog" + + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/ctcccloud-cms" +) + +type SSLDeployerProviderConfig struct { + // 天翼云 AccessKeyId。 + AccessKeyId string `json:"accessKeyId"` + // 天翼云 SecretAccessKey。 + SecretAccessKey string `json:"secretAccessKey"` +} + +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sslManager core.SSLManager +} + +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) + +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { + if config == nil { + return nil, errors.New("the configuration of the ssl deployer provider is nil") + } + + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ + AccessKeyId: config.AccessKeyId, + SecretAccessKey: config.SecretAccessKey, + }) + if err != nil { + return nil, fmt.Errorf("could not create ssl manager: %w", err) + } + + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sslManager: sslmgr, + }, nil +} + +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { + if logger == nil { + d.logger = slog.New(slog.DiscardHandler) + } else { + d.logger = logger + } +} + +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) + if err != nil { + return nil, fmt.Errorf("failed to upload certificate file: %w", err) + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) + } + + return &core.SSLDeployResult{}, nil +} diff --git a/internal/pkg/core/deployer/providers/ctcccloud-cms/ctcccloud_cms_test.go b/internal/pkg/core/ssl-deployer/providers/ctcccloud-cms/ctcccloud_cms_test.go similarity index 70% rename from internal/pkg/core/deployer/providers/ctcccloud-cms/ctcccloud_cms_test.go rename to internal/pkg/core/ssl-deployer/providers/ctcccloud-cms/ctcccloud_cms_test.go index 65c3dade..82824a30 100644 --- a/internal/pkg/core/deployer/providers/ctcccloud-cms/ctcccloud_cms_test.go +++ b/internal/pkg/core/ssl-deployer/providers/ctcccloud-cms/ctcccloud_cms_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/ctcccloud-cms" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/ctcccloud-cms" ) var ( @@ -19,7 +19,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_CTCCCLOUDCMS_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_CTCCCLOUDCMS_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -31,10 +31,10 @@ func init() { Shell command to run this test: go test -v ./ctcccloud_cms_test.go -args \ - --CERTIMATE_DEPLOYER_CTCCCLOUDCMS_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_CTCCCLOUDCMS_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_CTCCCLOUDCMS_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_CTCCCLOUDCMS_SECRETACCESSKEY="your-secret-access-key" + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDCMS_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDCMS_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDCMS_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDCMS_SECRETACCESSKEY="your-secret-access-key" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -48,7 +48,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("SECRETACCESSKEY: %v", fSecretAccessKey), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, SecretAccessKey: fSecretAccessKey, }) diff --git a/internal/pkg/core/deployer/providers/ctcccloud-elb/consts.go b/internal/pkg/core/ssl-deployer/providers/ctcccloud-elb/consts.go similarity index 100% rename from internal/pkg/core/deployer/providers/ctcccloud-elb/consts.go rename to internal/pkg/core/ssl-deployer/providers/ctcccloud-elb/consts.go diff --git a/internal/pkg/core/deployer/providers/ctcccloud-elb/ctcccloud_elb.go b/internal/pkg/core/ssl-deployer/providers/ctcccloud-elb/ctcccloud_elb.go similarity index 72% rename from internal/pkg/core/deployer/providers/ctcccloud-elb/ctcccloud_elb.go rename to internal/pkg/core/ssl-deployer/providers/ctcccloud-elb/ctcccloud_elb.go index d6490dc2..18018c9d 100644 --- a/internal/pkg/core/deployer/providers/ctcccloud-elb/ctcccloud_elb.go +++ b/internal/pkg/core/ssl-deployer/providers/ctcccloud-elb/ctcccloud_elb.go @@ -7,14 +7,13 @@ import ( "log/slog" "strings" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/ctcccloud-elb" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/ctcccloud-elb" ctyunelb "github.com/usual2970/certimate/internal/pkg/sdk3rd/ctyun/elb" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 天翼云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 天翼云 SecretAccessKey。 @@ -31,54 +30,53 @@ type DeployerConfig struct { ListenerId string `json:"listenerId,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *ctyunelb.Client - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *ctyunelb.Client + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.SecretAccessKey) + client, err := createSDKClient(config.AccessKeyId, config.SecretAccessKey) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: config.AccessKeyId, SecretAccessKey: config.SecretAccessKey, RegionId: config.RegionId, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 ELB - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -101,10 +99,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("unsupported resource type '%s'", d.config.ResourceType) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId string) error { +func (d *SSLDeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId string) error { if d.config.LoadbalancerId == "" { return errors.New("config `loadbalancerId` is required") } @@ -164,7 +162,7 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId return nil } -func (d *DeployerProvider) deployToListener(ctx context.Context, cloudCertId string) error { +func (d *SSLDeployerProvider) deployToListener(ctx context.Context, cloudCertId string) error { if d.config.ListenerId == "" { return errors.New("config `listenerId` is required") } @@ -177,7 +175,7 @@ func (d *DeployerProvider) deployToListener(ctx context.Context, cloudCertId str return nil } -func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudListenerId string, cloudCertId string) error { +func (d *SSLDeployerProvider) updateListenerCertificate(ctx context.Context, cloudListenerId string, cloudCertId string) error { // 更新监听器 // REF: https://eop.ctyun.cn/ebp/ctapiDocument/search?sid=24&api=5652&data=88&isNormal=1&vid=82 setLoadBalancerHTTPSListenerAttributeReq := &ctyunelb.UpdateListenerRequest{ @@ -194,6 +192,6 @@ func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudL return nil } -func createSdkClient(accessKeyId, secretAccessKey string) (*ctyunelb.Client, error) { +func createSDKClient(accessKeyId, secretAccessKey string) (*ctyunelb.Client, error) { return ctyunelb.NewClient(accessKeyId, secretAccessKey) } diff --git a/internal/pkg/core/deployer/providers/ctcccloud-elb/ctcccloud_elb_test.go b/internal/pkg/core/ssl-deployer/providers/ctcccloud-elb/ctcccloud_elb_test.go similarity index 76% rename from internal/pkg/core/deployer/providers/ctcccloud-elb/ctcccloud_elb_test.go rename to internal/pkg/core/ssl-deployer/providers/ctcccloud-elb/ctcccloud_elb_test.go index 86a23a2f..85ee4e51 100644 --- a/internal/pkg/core/deployer/providers/ctcccloud-elb/ctcccloud_elb_test.go +++ b/internal/pkg/core/ssl-deployer/providers/ctcccloud-elb/ctcccloud_elb_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/ctcccloud-elb" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/ctcccloud-elb" ) var ( @@ -22,7 +22,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_CTCCCLOUDELB_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_CTCCCLOUDELB_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -37,13 +37,13 @@ func init() { Shell command to run this test: go test -v ./ctcccloud_elb_test.go -args \ - --CERTIMATE_DEPLOYER_CTCCCLOUDELB_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_CTCCCLOUDELB_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_CTCCCLOUDELB_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_CTCCCLOUDELB_SECRETACCESSKEY="your-secret-access-key" \ - --CERTIMATE_DEPLOYER_CTCCCLOUDELB_REGIONID="your-region-id" \ - --CERTIMATE_DEPLOYER_CTCCCLOUDELB_LOADBALANCERID="your-elb-instance-id" \ - --CERTIMATE_DEPLOYER_CTCCCLOUDELB_LISTENERID="your-elb-listener-id" + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDELB_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDELB_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDELB_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDELB_SECRETACCESSKEY="your-secret-access-key" \ + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDELB_REGIONID="your-region-id" \ + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDELB_LOADBALANCERID="your-elb-instance-id" \ + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDELB_LISTENERID="your-elb-listener-id" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -59,7 +59,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("LOADBALANCERID: %v", fLoadbalancerId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, SecretAccessKey: fSecretAccessKey, RegionId: fRegionId, @@ -93,7 +93,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("LISTENERID: %v", fListenerId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, SecretAccessKey: fSecretAccessKey, RegionId: fRegionId, diff --git a/internal/pkg/core/deployer/providers/ctcccloud-icdn/ctcccloud_icdn.go b/internal/pkg/core/ssl-deployer/providers/ctcccloud-icdn/ctcccloud_icdn.go similarity index 62% rename from internal/pkg/core/deployer/providers/ctcccloud-icdn/ctcccloud_icdn.go rename to internal/pkg/core/ssl-deployer/providers/ctcccloud-icdn/ctcccloud_icdn.go index 1077dc1d..1d21e048 100644 --- a/internal/pkg/core/deployer/providers/ctcccloud-icdn/ctcccloud_icdn.go +++ b/internal/pkg/core/ssl-deployer/providers/ctcccloud-icdn/ctcccloud_icdn.go @@ -6,14 +6,13 @@ import ( "fmt" "log/slog" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/ctcccloud-icdn" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/ctcccloud-icdn" ctyunicdn "github.com/usual2970/certimate/internal/pkg/sdk3rd/ctyun/icdn" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 天翼云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 天翼云 SecretAccessKey。 @@ -22,57 +21,56 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *ctyunicdn.Client - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *ctyunicdn.Client + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.SecretAccessKey) + client, err := createSDKClient(config.AccessKeyId, config.SecretAccessKey) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: config.AccessKeyId, SecretAccessKey: config.SecretAccessKey, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { if d.config.Domain == "" { return nil, errors.New("config `domain` is required") } - // 上传证书到 ICDN - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -103,9 +101,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'icdn.UpdateDomain': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(accessKeyId, secretAccessKey string) (*ctyunicdn.Client, error) { +func createSDKClient(accessKeyId, secretAccessKey string) (*ctyunicdn.Client, error) { return ctyunicdn.NewClient(accessKeyId, secretAccessKey) } diff --git a/internal/pkg/core/deployer/providers/ctcccloud-icdn/ctcccloud_icdn_test.go b/internal/pkg/core/ssl-deployer/providers/ctcccloud-icdn/ctcccloud_icdn_test.go similarity index 70% rename from internal/pkg/core/deployer/providers/ctcccloud-icdn/ctcccloud_icdn_test.go rename to internal/pkg/core/ssl-deployer/providers/ctcccloud-icdn/ctcccloud_icdn_test.go index df514ea6..2f48bb0c 100644 --- a/internal/pkg/core/deployer/providers/ctcccloud-icdn/ctcccloud_icdn_test.go +++ b/internal/pkg/core/ssl-deployer/providers/ctcccloud-icdn/ctcccloud_icdn_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/ctcccloud-icdn" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/ctcccloud-icdn" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_CTCCCLOUDCDN_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_CTCCCLOUDCDN_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./ctcccloud_cdn_test.go -args \ - --CERTIMATE_DEPLOYER_CTCCCLOUDCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_CTCCCLOUDCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_CTCCCLOUDCDN_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_CTCCCLOUDCDN_SECRETACCESSKEY="your-secret-access-key" \ - --CERTIMATE_DEPLOYER_CTCCCLOUDCDN_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDCDN_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDCDN_SECRETACCESSKEY="your-secret-access-key" \ + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDCDN_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, SecretAccessKey: fSecretAccessKey, Domain: fDomain, diff --git a/internal/pkg/core/deployer/providers/ctcccloud-lvdn/ctcccloud_lvdn.go b/internal/pkg/core/ssl-deployer/providers/ctcccloud-lvdn/ctcccloud_lvdn.go similarity index 63% rename from internal/pkg/core/deployer/providers/ctcccloud-lvdn/ctcccloud_lvdn.go rename to internal/pkg/core/ssl-deployer/providers/ctcccloud-lvdn/ctcccloud_lvdn.go index 188703b2..a5edcef5 100644 --- a/internal/pkg/core/deployer/providers/ctcccloud-lvdn/ctcccloud_lvdn.go +++ b/internal/pkg/core/ssl-deployer/providers/ctcccloud-lvdn/ctcccloud_lvdn.go @@ -6,14 +6,13 @@ import ( "fmt" "log/slog" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/ctcccloud-lvdn" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/ctcccloud-lvdn" ctyunlvdn "github.com/usual2970/certimate/internal/pkg/sdk3rd/ctyun/lvdn" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 天翼云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 天翼云 SecretAccessKey。 @@ -22,57 +21,56 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *ctyunlvdn.Client - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *ctyunlvdn.Client + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.SecretAccessKey) + client, err := createSDKClient(config.AccessKeyId, config.SecretAccessKey) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: config.AccessKeyId, SecretAccessKey: config.SecretAccessKey, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { if d.config.Domain == "" { return nil, errors.New("config `domain` is required") } - // 上传证书到 CDN - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -105,9 +103,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'lvdn.UpdateDomain': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(accessKeyId, secretAccessKey string) (*ctyunlvdn.Client, error) { +func createSDKClient(accessKeyId, secretAccessKey string) (*ctyunlvdn.Client, error) { return ctyunlvdn.NewClient(accessKeyId, secretAccessKey) } diff --git a/internal/pkg/core/deployer/providers/ctcccloud-lvdn/ctcccloud_lvdn_test.go b/internal/pkg/core/ssl-deployer/providers/ctcccloud-lvdn/ctcccloud_lvdn_test.go similarity index 70% rename from internal/pkg/core/deployer/providers/ctcccloud-lvdn/ctcccloud_lvdn_test.go rename to internal/pkg/core/ssl-deployer/providers/ctcccloud-lvdn/ctcccloud_lvdn_test.go index 84257a0f..82cc2258 100644 --- a/internal/pkg/core/deployer/providers/ctcccloud-lvdn/ctcccloud_lvdn_test.go +++ b/internal/pkg/core/ssl-deployer/providers/ctcccloud-lvdn/ctcccloud_lvdn_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/ctcccloud-lvdn" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/ctcccloud-lvdn" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_CTCCCLOUDLVDN_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_CTCCCLOUDLVDN_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./ctcccloud_lvdn_test.go -args \ - --CERTIMATE_DEPLOYER_CTCCCLOUDLVDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_CTCCCLOUDLVDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_CTCCCLOUDLVDN_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_CTCCCLOUDLVDN_SECRETACCESSKEY="your-secret-access-key" \ - --CERTIMATE_DEPLOYER_CTCCCLOUDLVDN_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDLVDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDLVDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDLVDN_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDLVDN_SECRETACCESSKEY="your-secret-access-key" \ + --CERTIMATE_SSLDEPLOYER_CTCCCLOUDLVDN_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, SecretAccessKey: fSecretAccessKey, Domain: fDomain, diff --git a/internal/pkg/core/deployer/providers/dogecloud-cdn/dogecloud_cdn.go b/internal/pkg/core/ssl-deployer/providers/dogecloud-cdn/dogecloud_cdn.go similarity index 51% rename from internal/pkg/core/deployer/providers/dogecloud-cdn/dogecloud_cdn.go rename to internal/pkg/core/ssl-deployer/providers/dogecloud-cdn/dogecloud_cdn.go index 1c5e650e..b2f9679c 100644 --- a/internal/pkg/core/deployer/providers/dogecloud-cdn/dogecloud_cdn.go +++ b/internal/pkg/core/ssl-deployer/providers/dogecloud-cdn/dogecloud_cdn.go @@ -2,17 +2,17 @@ package dogecloudcdn import ( "context" + "errors" "fmt" "log/slog" "strconv" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/dogecloud" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/dogecloud" dogesdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/dogecloud" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 多吉云 AccessKey。 AccessKey string `json:"accessKey"` // 多吉云 SecretKey。 @@ -21,58 +21,58 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *dogesdk.Client - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *dogesdk.Client + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKey, config.SecretKey) + client, err := createSDKClient(config.AccessKey, config.SecretKey) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKey: config.AccessKey, SecretKey: config.SecretKey, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { if d.config.Domain == "" { return nil, fmt.Errorf("config `domain` is required") } - // 上传证书到 CDN - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -92,9 +92,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'cdn.BindCdnCert': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(accessKey, secretKey string) (*dogesdk.Client, error) { +func createSDKClient(accessKey, secretKey string) (*dogesdk.Client, error) { return dogesdk.NewClient(accessKey, secretKey) } diff --git a/internal/pkg/core/deployer/providers/dogecloud-cdn/dogecloud_cdn_test.go b/internal/pkg/core/ssl-deployer/providers/dogecloud-cdn/dogecloud_cdn_test.go similarity index 70% rename from internal/pkg/core/deployer/providers/dogecloud-cdn/dogecloud_cdn_test.go rename to internal/pkg/core/ssl-deployer/providers/dogecloud-cdn/dogecloud_cdn_test.go index b2484b0b..2d4d864b 100644 --- a/internal/pkg/core/deployer/providers/dogecloud-cdn/dogecloud_cdn_test.go +++ b/internal/pkg/core/ssl-deployer/providers/dogecloud-cdn/dogecloud_cdn_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/dogecloud-cdn" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/dogecloud-cdn" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_DOGECLOUDCDN_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_DOGECLOUDCDN_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./dogecloud_cdn_test.go -args \ - --CERTIMATE_DEPLOYER_DOGECLOUDCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_DOGECLOUDCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_DOGECLOUDCDN_ACCESSKEY="your-access-key" \ - --CERTIMATE_DEPLOYER_DOGECLOUDCDN_SECRETKEY="your-secret-key" \ - --CERTIMATE_DEPLOYER_DOGECLOUDCDN_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_DOGECLOUDCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_DOGECLOUDCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_DOGECLOUDCDN_ACCESSKEY="your-access-key" \ + --CERTIMATE_SSLDEPLOYER_DOGECLOUDCDN_SECRETKEY="your-secret-key" \ + --CERTIMATE_SSLDEPLOYER_DOGECLOUDCDN_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKey: fAccessKey, SecretKey: fSecretKey, Domain: fDomain, diff --git a/internal/pkg/core/deployer/providers/edgio-applications/edgio_applications.go b/internal/pkg/core/ssl-deployer/providers/edgio-applications/edgio_applications.go similarity index 66% rename from internal/pkg/core/deployer/providers/edgio-applications/edgio_applications.go rename to internal/pkg/core/ssl-deployer/providers/edgio-applications/edgio_applications.go index 003d43e4..40901fd4 100644 --- a/internal/pkg/core/deployer/providers/edgio-applications/edgio_applications.go +++ b/internal/pkg/core/ssl-deployer/providers/edgio-applications/edgio_applications.go @@ -2,17 +2,18 @@ package edgioapplications import ( "context" + "errors" "fmt" "log/slog" edgio "github.com/Edgio/edgio-api/applications/v7" edgiodtos "github.com/Edgio/edgio-api/applications/v7/dtos" - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // Edgio ClientId。 ClientId string `json:"clientId"` // Edgio ClientSecret。 @@ -21,41 +22,40 @@ type DeployerConfig struct { EnvironmentId string `json:"environmentId"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger sdkClient *edgio.EdgioClient } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.ClientId, config.ClientSecret) + client, err := createSDKClient(config.ClientId, config.ClientSecret) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { // 提取服务器证书和中间证书 serverCertPEM, intermediaCertPEM, err := xcert.ExtractCertificatesFromPEM(certPEM) if err != nil { @@ -76,10 +76,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'edgio.UploadTlsCert': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(clientId, clientSecret string) (*edgio.EdgioClient, error) { +func createSDKClient(clientId, clientSecret string) (*edgio.EdgioClient, error) { client := edgio.NewEdgioClient(clientId, clientSecret, "", "") return client, nil } diff --git a/internal/pkg/core/deployer/providers/edgio-applications/edgio_applications_test.go b/internal/pkg/core/ssl-deployer/providers/edgio-applications/edgio_applications_test.go similarity index 69% rename from internal/pkg/core/deployer/providers/edgio-applications/edgio_applications_test.go rename to internal/pkg/core/ssl-deployer/providers/edgio-applications/edgio_applications_test.go index 23f9c56e..0c7916cf 100644 --- a/internal/pkg/core/deployer/providers/edgio-applications/edgio_applications_test.go +++ b/internal/pkg/core/ssl-deployer/providers/edgio-applications/edgio_applications_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/edgio-applications" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/edgio-applications" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_EDGIOAPPLICATIONS_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_EDGIOAPPLICATIONS_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./edgio_applications_test.go -args \ - --CERTIMATE_DEPLOYER_EDGIOAPPLICATIONS_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_EDGIOAPPLICATIONS_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_EDGIOAPPLICATIONS_CLIENTID="your-client-id" \ - --CERTIMATE_DEPLOYER_EDGIOAPPLICATIONS_CLIENTSECRET="your-client-secret" \ - --CERTIMATE_DEPLOYER_EDGIOAPPLICATIONS_ENVIRONMENTID="your-enviroment-id" + --CERTIMATE_SSLDEPLOYER_EDGIOAPPLICATIONS_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_EDGIOAPPLICATIONS_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_EDGIOAPPLICATIONS_CLIENTID="your-client-id" \ + --CERTIMATE_SSLDEPLOYER_EDGIOAPPLICATIONS_CLIENTSECRET="your-client-secret" \ + --CERTIMATE_SSLDEPLOYER_EDGIOAPPLICATIONS_ENVIRONMENTID="your-enviroment-id" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("ENVIRONMENTID: %v", fEnvironmentId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ ClientId: fClientId, ClientSecret: fClientSecret, EnvironmentId: fEnvironmentId, diff --git a/internal/pkg/core/deployer/providers/flexcdn/consts.go b/internal/pkg/core/ssl-deployer/providers/flexcdn/consts.go similarity index 100% rename from internal/pkg/core/deployer/providers/flexcdn/consts.go rename to internal/pkg/core/ssl-deployer/providers/flexcdn/consts.go diff --git a/internal/pkg/core/deployer/providers/flexcdn/flexcdn.go b/internal/pkg/core/ssl-deployer/providers/flexcdn/flexcdn.go similarity index 76% rename from internal/pkg/core/deployer/providers/flexcdn/flexcdn.go rename to internal/pkg/core/ssl-deployer/providers/flexcdn/flexcdn.go index 0a977d54..0d3e089f 100644 --- a/internal/pkg/core/deployer/providers/flexcdn/flexcdn.go +++ b/internal/pkg/core/ssl-deployer/providers/flexcdn/flexcdn.go @@ -9,12 +9,12 @@ import ( "log/slog" "time" - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" flexcdnsdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/flexcdn" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // FlexCDN 服务地址。 ServerUrl string `json:"serverUrl"` // FlexCDN 用户角色。 @@ -33,41 +33,40 @@ type DeployerConfig struct { CertificateId int64 `json:"certificateId,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger sdkClient *flexcdnsdk.Client } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.ServerUrl, config.ApiRole, config.AccessKeyId, config.AccessKey, config.AllowInsecureConnections) + client, err := createSDKClient(config.ServerUrl, config.ApiRole, config.AccessKeyId, config.AccessKey, config.AllowInsecureConnections) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { // 根据部署资源类型决定部署方式 switch d.config.ResourceType { case RESOURCE_TYPE_CERTIFICATE: @@ -79,10 +78,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("unsupported resource type '%s'", d.config.ResourceType) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func (d *DeployerProvider) deployToCertificate(ctx context.Context, certPEM string, privkeyPEM string) error { +func (d *SSLDeployerProvider) deployToCertificate(ctx context.Context, certPEM string, privkeyPEM string) error { if d.config.CertificateId == 0 { return errors.New("config `certificateId` is required") } @@ -118,7 +117,7 @@ func (d *DeployerProvider) deployToCertificate(ctx context.Context, certPEM stri return nil } -func createSdkClient(serverUrl, apiRole, accessKeyId, accessKey string, skipTlsVerify bool) (*flexcdnsdk.Client, error) { +func createSDKClient(serverUrl, apiRole, accessKeyId, accessKey string, skipTlsVerify bool) (*flexcdnsdk.Client, error) { client, err := flexcdnsdk.NewClient(serverUrl, apiRole, accessKeyId, accessKey) if err != nil { return nil, err diff --git a/internal/pkg/core/deployer/providers/flexcdn/flexcdn_test.go b/internal/pkg/core/ssl-deployer/providers/flexcdn/flexcdn_test.go similarity index 73% rename from internal/pkg/core/deployer/providers/flexcdn/flexcdn_test.go rename to internal/pkg/core/ssl-deployer/providers/flexcdn/flexcdn_test.go index 6725140a..8c1b0c5e 100644 --- a/internal/pkg/core/deployer/providers/flexcdn/flexcdn_test.go +++ b/internal/pkg/core/ssl-deployer/providers/flexcdn/flexcdn_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/flexcdn" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/flexcdn" ) var ( @@ -21,7 +21,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_FLEXCDN_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_FLEXCDN_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -35,12 +35,12 @@ func init() { Shell command to run this test: go test -v ./flexcdn_test.go -args \ - --CERTIMATE_DEPLOYER_FLEXCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_FLEXCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_FLEXCDN_SERVERURL="http://127.0.0.1:7788" \ - --CERTIMATE_DEPLOYER_FLEXCDN_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_FLEXCDN_ACCESSKEY="your-access-key" \ - --CERTIMATE_DEPLOYER_FLEXCDN_CERTIFICATEID="your-cerficiate-id" + --CERTIMATE_SSLDEPLOYER_FLEXCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_FLEXCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_FLEXCDN_SERVERURL="http://127.0.0.1:7788" \ + --CERTIMATE_SSLDEPLOYER_FLEXCDN_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_FLEXCDN_ACCESSKEY="your-access-key" \ + --CERTIMATE_SSLDEPLOYER_FLEXCDN_CERTIFICATEID="your-cerficiate-id" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -56,7 +56,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("CERTIFICATEID: %v", fCertificateId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ ServerUrl: fServerUrl, ApiRole: "user", AccessKeyId: fAccessKeyId, diff --git a/internal/pkg/core/deployer/providers/gcore-cdn/gcore_cdn.go b/internal/pkg/core/ssl-deployer/providers/gcore-cdn/gcore_cdn.go similarity index 76% rename from internal/pkg/core/deployer/providers/gcore-cdn/gcore_cdn.go rename to internal/pkg/core/ssl-deployer/providers/gcore-cdn/gcore_cdn.go index 88feb79e..4f11c345 100644 --- a/internal/pkg/core/deployer/providers/gcore-cdn/gcore_cdn.go +++ b/internal/pkg/core/ssl-deployer/providers/gcore-cdn/gcore_cdn.go @@ -12,13 +12,12 @@ import ( "github.com/G-Core/gcorelabscdn-go/resources" "github.com/G-Core/gcorelabscdn-go/sslcerts" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/gcore-cdn" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/gcore-cdn" gcoresdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/gcore" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // Gcore API Token。 ApiToken string `json:"apiToken"` // CDN 资源 ID。 @@ -28,56 +27,56 @@ type DeployerConfig struct { CertificateId int64 `json:"certificateId,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClients *wSdkClients - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClients *wSDKClients + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -type wSdkClients struct { +type wSDKClients struct { Resources *resources.Service SSLCerts *sslcerts.Service } -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - clients, err := createSdkClients(config.ApiToken) + clients, err := createSDKClients(config.ApiToken) if err != nil { - return nil, fmt.Errorf("failed to create sdk clients: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ ApiToken: config.ApiToken, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClients: clients, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClients: clients, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { if d.config.ResourceId == 0 { return nil, errors.New("config `resourceId` is required") } @@ -85,8 +84,8 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE // 如果原证书 ID 为空,则创建证书;否则更新证书。 var cloudCertId int64 if d.config.CertificateId == 0 { - // 上传证书到 CDN - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -153,10 +152,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'resources.Update': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClients(apiToken string) (*wSdkClients, error) { +func createSDKClients(apiToken string) (*wSDKClients, error) { if apiToken == "" { return nil, errors.New("invalid gcore api token") } @@ -167,7 +166,7 @@ func createSdkClients(apiToken string) (*wSdkClients, error) { ) resourcesSrv := resources.NewService(requester) sslCertsSrv := sslcerts.NewService(requester) - return &wSdkClients{ + return &wSDKClients{ Resources: resourcesSrv, SSLCerts: sslCertsSrv, }, nil diff --git a/internal/pkg/core/deployer/providers/gcore-cdn/gcore_cdn_test.go b/internal/pkg/core/ssl-deployer/providers/gcore-cdn/gcore_cdn_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/gcore-cdn/gcore_cdn_test.go rename to internal/pkg/core/ssl-deployer/providers/gcore-cdn/gcore_cdn_test.go index 808d724d..5ce68e3b 100644 --- a/internal/pkg/core/deployer/providers/gcore-cdn/gcore_cdn_test.go +++ b/internal/pkg/core/ssl-deployer/providers/gcore-cdn/gcore_cdn_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/gcore-cdn" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/gcore-cdn" ) var ( @@ -19,7 +19,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_GCORECDN_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_GCORECDN_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -31,10 +31,10 @@ func init() { Shell command to run this test: go test -v ./gcore_cdn_test.go -args \ - --CERTIMATE_DEPLOYER_GCORECDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_GCORECDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_GCORECDN_APITOKEN="your-api-token" \ - --CERTIMATE_DEPLOYER_GCORECDN_RESOURCEID="your-cdn-resource-id" + --CERTIMATE_SSLDEPLOYER_GCORECDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_GCORECDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_GCORECDN_APITOKEN="your-api-token" \ + --CERTIMATE_SSLDEPLOYER_GCORECDN_RESOURCEID="your-cdn-resource-id" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -48,7 +48,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("RESOURCEID: %v", fResourceId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ ApiToken: fApiToken, ResourceId: fResourceId, }) diff --git a/internal/pkg/core/deployer/providers/goedge/consts.go b/internal/pkg/core/ssl-deployer/providers/goedge/consts.go similarity index 100% rename from internal/pkg/core/deployer/providers/goedge/consts.go rename to internal/pkg/core/ssl-deployer/providers/goedge/consts.go diff --git a/internal/pkg/core/deployer/providers/goedge/goedge.go b/internal/pkg/core/ssl-deployer/providers/goedge/goedge.go similarity index 76% rename from internal/pkg/core/deployer/providers/goedge/goedge.go rename to internal/pkg/core/ssl-deployer/providers/goedge/goedge.go index 2457293e..03a40477 100644 --- a/internal/pkg/core/deployer/providers/goedge/goedge.go +++ b/internal/pkg/core/ssl-deployer/providers/goedge/goedge.go @@ -9,12 +9,12 @@ import ( "log/slog" "time" - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" goedgesdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/goedge" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // GoEdge 服务地址。 ServerUrl string `json:"serverUrl"` // GoEdge 用户角色。 @@ -33,41 +33,40 @@ type DeployerConfig struct { CertificateId int64 `json:"certificateId,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger sdkClient *goedgesdk.Client } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.ServerUrl, config.ApiRole, config.AccessKeyId, config.AccessKey, config.AllowInsecureConnections) + client, err := createSDKClient(config.ServerUrl, config.ApiRole, config.AccessKeyId, config.AccessKey, config.AllowInsecureConnections) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { // 根据部署资源类型决定部署方式 switch d.config.ResourceType { case RESOURCE_TYPE_CERTIFICATE: @@ -79,10 +78,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("unsupported resource type '%s'", d.config.ResourceType) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func (d *DeployerProvider) deployToCertificate(ctx context.Context, certPEM string, privkeyPEM string) error { +func (d *SSLDeployerProvider) deployToCertificate(ctx context.Context, certPEM string, privkeyPEM string) error { if d.config.CertificateId == 0 { return errors.New("config `certificateId` is required") } @@ -118,7 +117,7 @@ func (d *DeployerProvider) deployToCertificate(ctx context.Context, certPEM stri return nil } -func createSdkClient(serverUrl, apiRole, accessKeyId, accessKey string, skipTlsVerify bool) (*goedgesdk.Client, error) { +func createSDKClient(serverUrl, apiRole, accessKeyId, accessKey string, skipTlsVerify bool) (*goedgesdk.Client, error) { client, err := goedgesdk.NewClient(serverUrl, apiRole, accessKeyId, accessKey) if err != nil { return nil, err diff --git a/internal/pkg/core/deployer/providers/goedge/goedge_test.go b/internal/pkg/core/ssl-deployer/providers/goedge/goedge_test.go similarity index 73% rename from internal/pkg/core/deployer/providers/goedge/goedge_test.go rename to internal/pkg/core/ssl-deployer/providers/goedge/goedge_test.go index ae03db1d..c3525cf8 100644 --- a/internal/pkg/core/deployer/providers/goedge/goedge_test.go +++ b/internal/pkg/core/ssl-deployer/providers/goedge/goedge_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/goedge" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/goedge" ) var ( @@ -21,7 +21,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_GOEDGE_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_GOEDGE_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -35,12 +35,12 @@ func init() { Shell command to run this test: go test -v ./goedge_test.go -args \ - --CERTIMATE_DEPLOYER_GOEDGE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_GOEDGE_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_GOEDGE_SERVERURL="http://127.0.0.1:7788" \ - --CERTIMATE_DEPLOYER_GOEDGE_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_GOEDGE_ACCESSKEY="your-access-key" \ - --CERTIMATE_DEPLOYER_GOEDGE_CERTIFICATEID="your-cerficiate-id" + --CERTIMATE_SSLDEPLOYER_GOEDGE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_GOEDGE_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_GOEDGE_SERVERURL="http://127.0.0.1:7788" \ + --CERTIMATE_SSLDEPLOYER_GOEDGE_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_GOEDGE_ACCESSKEY="your-access-key" \ + --CERTIMATE_SSLDEPLOYER_GOEDGE_CERTIFICATEID="your-cerficiate-id" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -56,7 +56,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("CERTIFICATEID: %v", fCertificateId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ ServerUrl: fServerUrl, ApiRole: "user", AccessKeyId: fAccessKeyId, diff --git a/internal/pkg/core/deployer/providers/huaweicloud-cdn/huaweicloud_cdn.go b/internal/pkg/core/ssl-deployer/providers/huaweicloud-cdn/huaweicloud_cdn.go similarity index 78% rename from internal/pkg/core/deployer/providers/huaweicloud-cdn/huaweicloud_cdn.go rename to internal/pkg/core/ssl-deployer/providers/huaweicloud-cdn/huaweicloud_cdn.go index f76370a2..cba25f97 100644 --- a/internal/pkg/core/deployer/providers/huaweicloud-cdn/huaweicloud_cdn.go +++ b/internal/pkg/core/ssl-deployer/providers/huaweicloud-cdn/huaweicloud_cdn.go @@ -2,6 +2,7 @@ package huaweicloudcdn import ( "context" + "errors" "fmt" "log/slog" @@ -10,13 +11,12 @@ import ( hccdnmodel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cdn/v2/model" hccdnregion "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cdn/v2/region" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/huaweicloud-scm" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/huaweicloud-scm" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 华为云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 华为云 SecretAccessKey。 @@ -29,59 +29,63 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *hccdn.CdnClient - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *hccdn.CdnClient + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient( + client, err := createSDKClient( config.AccessKeyId, config.SecretAccessKey, config.Region, ) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: config.AccessKeyId, SecretAccessKey: config.SecretAccessKey, EnterpriseProjectId: config.EnterpriseProjectId, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 SCM - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + if d.config.Domain == "" { + return nil, fmt.Errorf("config `domain` is required") + } + + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -122,10 +126,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'cdn.UploadDomainMultiCertificates': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(accessKeyId, secretAccessKey, region string) (*hccdn.CdnClient, error) { +func createSDKClient(accessKeyId, secretAccessKey, region string) (*hccdn.CdnClient, error) { if region == "" { region = "cn-north-1" // CDN 服务默认区域:华北一北京 } diff --git a/internal/pkg/core/deployer/providers/huaweicloud-cdn/huaweicloud_cdn_test.go b/internal/pkg/core/ssl-deployer/providers/huaweicloud-cdn/huaweicloud_cdn_test.go similarity index 70% rename from internal/pkg/core/deployer/providers/huaweicloud-cdn/huaweicloud_cdn_test.go rename to internal/pkg/core/ssl-deployer/providers/huaweicloud-cdn/huaweicloud_cdn_test.go index cb4ab1a4..633ddcc5 100644 --- a/internal/pkg/core/deployer/providers/huaweicloud-cdn/huaweicloud_cdn_test.go +++ b/internal/pkg/core/ssl-deployer/providers/huaweicloud-cdn/huaweicloud_cdn_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/huaweicloud-cdn" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/huaweicloud-cdn" ) var ( @@ -21,7 +21,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_HUAWEICLOUDCDN_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_HUAWEICLOUDCDN_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -35,12 +35,12 @@ func init() { Shell command to run this test: go test -v ./huaweicloud_cdn_test.go -args \ - --CERTIMATE_DEPLOYER_HUAWEICLOUDCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_HUAWEICLOUDCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_HUAWEICLOUDCDN_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_HUAWEICLOUDCDN_SECRETACCESSKEY="your-secret-access-key" \ - --CERTIMATE_DEPLOYER_HUAWEICLOUDCDN_REGION="cn-north-1" \ - --CERTIMATE_DEPLOYER_HUAWEICLOUDCDN_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_HUAWEICLOUDCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_HUAWEICLOUDCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_HUAWEICLOUDCDN_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_HUAWEICLOUDCDN_SECRETACCESSKEY="your-secret-access-key" \ + --CERTIMATE_SSLDEPLOYER_HUAWEICLOUDCDN_REGION="cn-north-1" \ + --CERTIMATE_SSLDEPLOYER_HUAWEICLOUDCDN_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -56,7 +56,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, SecretAccessKey: fSecretAccessKey, Region: fRegion, diff --git a/internal/pkg/core/deployer/providers/huaweicloud-elb/consts.go b/internal/pkg/core/ssl-deployer/providers/huaweicloud-elb/consts.go similarity index 100% rename from internal/pkg/core/deployer/providers/huaweicloud-elb/consts.go rename to internal/pkg/core/ssl-deployer/providers/huaweicloud-elb/consts.go diff --git a/internal/pkg/core/deployer/providers/huaweicloud-elb/huaweicloud_elb.go b/internal/pkg/core/ssl-deployer/providers/huaweicloud-elb/huaweicloud_elb.go similarity index 85% rename from internal/pkg/core/deployer/providers/huaweicloud-elb/huaweicloud_elb.go rename to internal/pkg/core/ssl-deployer/providers/huaweicloud-elb/huaweicloud_elb.go index 675e7648..dafa5894 100644 --- a/internal/pkg/core/deployer/providers/huaweicloud-elb/huaweicloud_elb.go +++ b/internal/pkg/core/ssl-deployer/providers/huaweicloud-elb/huaweicloud_elb.go @@ -16,13 +16,12 @@ import ( hciamregion "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/iam/v3/region" "golang.org/x/exp/slices" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/huaweicloud-elb" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/huaweicloud-elb" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 华为云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 华为云 SecretAccessKey。 @@ -44,54 +43,54 @@ type DeployerConfig struct { ListenerId string `json:"listenerId,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *hcelb.ElbClient - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *hcelb.ElbClient + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.SecretAccessKey, config.Region) + client, err := createSDKClient(config.AccessKeyId, config.SecretAccessKey, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: config.AccessKeyId, SecretAccessKey: config.SecretAccessKey, EnterpriseProjectId: config.EnterpriseProjectId, Region: config.Region, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { // 根据部署资源类型决定部署方式 switch d.config.ResourceType { case RESOURCE_TYPE_CERTIFICATE: @@ -113,10 +112,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("unsupported resource type '%s'", d.config.ResourceType) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func (d *DeployerProvider) deployToCertificate(ctx context.Context, certPEM string, privkeyPEM string) error { +func (d *SSLDeployerProvider) deployToCertificate(ctx context.Context, certPEM string, privkeyPEM string) error { if d.config.CertificateId == "" { return errors.New("config `certificateId` is required") } @@ -141,7 +140,7 @@ func (d *DeployerProvider) deployToCertificate(ctx context.Context, certPEM stri return nil } -func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, certPEM string, privkeyPEM string) error { +func (d *SSLDeployerProvider) deployToLoadbalancer(ctx context.Context, certPEM string, privkeyPEM string) error { if d.config.LoadbalancerId == "" { return errors.New("config `loadbalancerId` is required") } @@ -197,8 +196,8 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, certPEM str } } - // 上传证书到 SCM - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -231,13 +230,13 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, certPEM str return nil } -func (d *DeployerProvider) deployToListener(ctx context.Context, certPEM string, privkeyPEM string) error { +func (d *SSLDeployerProvider) deployToListener(ctx context.Context, certPEM string, privkeyPEM string) error { if d.config.ListenerId == "" { return errors.New("config `listenerId` is required") } - // 上传证书到 SCM - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -252,7 +251,7 @@ func (d *DeployerProvider) deployToListener(ctx context.Context, certPEM string, return nil } -func (d *DeployerProvider) modifyListenerCertificate(ctx context.Context, cloudListenerId string, cloudCertId string) error { +func (d *SSLDeployerProvider) modifyListenerCertificate(ctx context.Context, cloudListenerId string, cloudCertId string) error { // 查询监听器详情 // REF: https://support.huaweicloud.com/api-elb/ShowListener.html showListenerReq := &hcelbmodel.ShowListenerRequest{ @@ -331,7 +330,7 @@ func (d *DeployerProvider) modifyListenerCertificate(ctx context.Context, cloudL return nil } -func createSdkClient(accessKeyId, secretAccessKey, region string) (*hcelb.ElbClient, error) { +func createSDKClient(accessKeyId, secretAccessKey, region string) (*hcelb.ElbClient, error) { projectId, err := getSdkProjectId(accessKeyId, secretAccessKey, region) if err != nil { return nil, err diff --git a/internal/pkg/core/deployer/providers/huaweicloud-elb/huaweicloud_elb_test.go b/internal/pkg/core/ssl-deployer/providers/huaweicloud-elb/huaweicloud_elb_test.go similarity index 78% rename from internal/pkg/core/deployer/providers/huaweicloud-elb/huaweicloud_elb_test.go rename to internal/pkg/core/ssl-deployer/providers/huaweicloud-elb/huaweicloud_elb_test.go index 42fee652..d032c958 100644 --- a/internal/pkg/core/deployer/providers/huaweicloud-elb/huaweicloud_elb_test.go +++ b/internal/pkg/core/ssl-deployer/providers/huaweicloud-elb/huaweicloud_elb_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/huaweicloud-elb" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/huaweicloud-elb" ) var ( @@ -23,7 +23,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_HUAWEICLOUDELB_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_HUAWEICLOUDELB_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -39,14 +39,14 @@ func init() { Shell command to run this test: go test -v ./huaweicloud_elb_test.go -args \ - --CERTIMATE_DEPLOYER_HUAWEICLOUDELB_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_HUAWEICLOUDELB_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_HUAWEICLOUDELB_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_HUAWEICLOUDELB_SECRETACCESSKEY="your-secret-access-key" \ - --CERTIMATE_DEPLOYER_HUAWEICLOUDELB_REGION="cn-north-1" \ - --CERTIMATE_DEPLOYER_HUAWEICLOUDELB_CERTIFICATEID="your-elb-cert-id" \ - --CERTIMATE_DEPLOYER_HUAWEICLOUDELB_LOADBALANCERID="your-elb-loadbalancer-id" \ - --CERTIMATE_DEPLOYER_HUAWEICLOUDELB_LISTENERID="your-elb-listener-id" + --CERTIMATE_SSLDEPLOYER_HUAWEICLOUDELB_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_HUAWEICLOUDELB_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_HUAWEICLOUDELB_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_HUAWEICLOUDELB_SECRETACCESSKEY="your-secret-access-key" \ + --CERTIMATE_SSLDEPLOYER_HUAWEICLOUDELB_REGION="cn-north-1" \ + --CERTIMATE_SSLDEPLOYER_HUAWEICLOUDELB_CERTIFICATEID="your-elb-cert-id" \ + --CERTIMATE_SSLDEPLOYER_HUAWEICLOUDELB_LOADBALANCERID="your-elb-loadbalancer-id" \ + --CERTIMATE_SSLDEPLOYER_HUAWEICLOUDELB_LISTENERID="your-elb-listener-id" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -62,7 +62,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("CERTIFICATEID: %v", fCertificateId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, SecretAccessKey: fSecretAccessKey, Region: fRegion, @@ -96,7 +96,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("LOADBALANCERID: %v", fLoadbalancerId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, SecretAccessKey: fSecretAccessKey, Region: fRegion, @@ -130,7 +130,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("LISTENERID: %v", fListenerId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, SecretAccessKey: fSecretAccessKey, Region: fRegion, diff --git a/internal/pkg/core/ssl-deployer/providers/huaweicloud-scm/huaweicloud_scm.go b/internal/pkg/core/ssl-deployer/providers/huaweicloud-scm/huaweicloud_scm.go new file mode 100644 index 00000000..e083ed67 --- /dev/null +++ b/internal/pkg/core/ssl-deployer/providers/huaweicloud-scm/huaweicloud_scm.go @@ -0,0 +1,71 @@ +package huaweicloudscm + +import ( + "context" + "errors" + "fmt" + "log/slog" + + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/huaweicloud-scm" +) + +type SSLDeployerProviderConfig struct { + // 华为云 AccessKeyId。 + AccessKeyId string `json:"accessKeyId"` + // 华为云 SecretAccessKey。 + SecretAccessKey string `json:"secretAccessKey"` + // 华为云企业项目 ID。 + EnterpriseProjectId string `json:"enterpriseProjectId,omitempty"` +} + +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sslManager core.SSLManager +} + +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) + +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { + if config == nil { + return nil, errors.New("the configuration of the ssl deployer provider is nil") + } + + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ + AccessKeyId: config.AccessKeyId, + SecretAccessKey: config.SecretAccessKey, + EnterpriseProjectId: config.EnterpriseProjectId, + }) + if err != nil { + return nil, fmt.Errorf("could not create ssl manager: %w", err) + } + + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sslManager: sslmgr, + }, nil +} + +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { + if logger == nil { + d.logger = slog.New(slog.DiscardHandler) + } else { + d.logger = logger + } + + d.sslManager.SetLogger(logger) +} + +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) + if err != nil { + return nil, fmt.Errorf("failed to upload certificate file: %w", err) + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) + } + + return &core.SSLDeployResult{}, nil +} diff --git a/internal/pkg/core/deployer/providers/huaweicloud-waf/consts.go b/internal/pkg/core/ssl-deployer/providers/huaweicloud-waf/consts.go similarity index 100% rename from internal/pkg/core/deployer/providers/huaweicloud-waf/consts.go rename to internal/pkg/core/ssl-deployer/providers/huaweicloud-waf/consts.go diff --git a/internal/pkg/core/deployer/providers/huaweicloud-waf/huaweicloud_waf.go b/internal/pkg/core/ssl-deployer/providers/huaweicloud-waf/huaweicloud_waf.go similarity index 84% rename from internal/pkg/core/deployer/providers/huaweicloud-waf/huaweicloud_waf.go rename to internal/pkg/core/ssl-deployer/providers/huaweicloud-waf/huaweicloud_waf.go index 8eafa294..e726ce1e 100644 --- a/internal/pkg/core/deployer/providers/huaweicloud-waf/huaweicloud_waf.go +++ b/internal/pkg/core/ssl-deployer/providers/huaweicloud-waf/huaweicloud_waf.go @@ -16,13 +16,12 @@ import ( hcwafmodel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/waf/v1/model" hcwafregion "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/waf/v1/region" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/huaweicloud-waf" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/huaweicloud-waf" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 华为云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 华为云 SecretAccessKey。 @@ -41,56 +40,56 @@ type DeployerConfig struct { Domain string `json:"domain,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *hcwaf.WafClient - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *hcwaf.WafClient + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.SecretAccessKey, config.Region) + client, err := createSDKClient(config.AccessKeyId, config.SecretAccessKey, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: config.AccessKeyId, SecretAccessKey: config.SecretAccessKey, EnterpriseProjectId: config.EnterpriseProjectId, Region: config.Region, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 WAF - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -118,10 +117,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("unsupported resource type '%s'", d.config.ResourceType) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func (d *DeployerProvider) deployToCertificate(ctx context.Context, certPEM string, privkeyPEM string) error { +func (d *SSLDeployerProvider) deployToCertificate(ctx context.Context, certPEM string, privkeyPEM string) error { if d.config.CertificateId == "" { return errors.New("config `certificateId` is required") } @@ -158,13 +157,13 @@ func (d *DeployerProvider) deployToCertificate(ctx context.Context, certPEM stri return nil } -func (d *DeployerProvider) deployToCloudServer(ctx context.Context, certPEM string, privkeyPEM string) error { +func (d *SSLDeployerProvider) deployToCloudServer(ctx context.Context, certPEM string, privkeyPEM string) error { if d.config.Domain == "" { return errors.New("config `domain` is required") } - // 上传证书到 WAF - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -233,13 +232,13 @@ func (d *DeployerProvider) deployToCloudServer(ctx context.Context, certPEM stri return nil } -func (d *DeployerProvider) deployToPremiumHost(ctx context.Context, certPEM string, privkeyPEM string) error { +func (d *SSLDeployerProvider) deployToPremiumHost(ctx context.Context, certPEM string, privkeyPEM string) error { if d.config.Domain == "" { return errors.New("config `domain` is required") } - // 上传证书到 WAF - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -308,7 +307,7 @@ func (d *DeployerProvider) deployToPremiumHost(ctx context.Context, certPEM stri return nil } -func createSdkClient(accessKeyId, secretAccessKey, region string) (*hcwaf.WafClient, error) { +func createSDKClient(accessKeyId, secretAccessKey, region string) (*hcwaf.WafClient, error) { projectId, err := getSdkProjectId(accessKeyId, secretAccessKey, region) if err != nil { return nil, err diff --git a/internal/pkg/core/deployer/providers/huaweicloud-waf/huaweicloud_waf_test.go b/internal/pkg/core/ssl-deployer/providers/huaweicloud-waf/huaweicloud_waf_test.go similarity index 70% rename from internal/pkg/core/deployer/providers/huaweicloud-waf/huaweicloud_waf_test.go rename to internal/pkg/core/ssl-deployer/providers/huaweicloud-waf/huaweicloud_waf_test.go index 4f6b5654..becc6cba 100644 --- a/internal/pkg/core/deployer/providers/huaweicloud-waf/huaweicloud_waf_test.go +++ b/internal/pkg/core/ssl-deployer/providers/huaweicloud-waf/huaweicloud_waf_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/huaweicloud-waf" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/huaweicloud-waf" ) var ( @@ -22,7 +22,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_HUAWEICLOUDWAF_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_HUAWEICLOUDWAF_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -37,13 +37,13 @@ func init() { Shell command to run this test: go test -v ./huaweicloud_waf_test.go -args \ - --CERTIMATE_DEPLOYER_HUAWEICLOUDWAF_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_HUAWEICLOUDWAF_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_HUAWEICLOUDWAF_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_HUAWEICLOUDWAF_SECRETACCESSKEY="your-secret-access-key" \ - --CERTIMATE_DEPLOYER_HUAWEICLOUDWAF_REGION="cn-north-1" \ - --CERTIMATE_DEPLOYER_HUAWEICLOUDWAF_RESOURCETYPE="premium" \ - --CERTIMATE_DEPLOYER_HUAWEICLOUDWAF_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_HUAWEICLOUDWAF_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_HUAWEICLOUDWAF_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_HUAWEICLOUDWAF_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_HUAWEICLOUDWAF_SECRETACCESSKEY="your-secret-access-key" \ + --CERTIMATE_SSLDEPLOYER_HUAWEICLOUDWAF_REGION="cn-north-1" \ + --CERTIMATE_SSLDEPLOYER_HUAWEICLOUDWAF_RESOURCETYPE="premium" \ + --CERTIMATE_SSLDEPLOYER_HUAWEICLOUDWAF_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -59,7 +59,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("RESOURCETYPE: %v", fResourceType), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, SecretAccessKey: fSecretAccessKey, Region: fRegion, diff --git a/internal/pkg/core/deployer/providers/jdcloud-alb/consts.go b/internal/pkg/core/ssl-deployer/providers/jdcloud-alb/consts.go similarity index 100% rename from internal/pkg/core/deployer/providers/jdcloud-alb/consts.go rename to internal/pkg/core/ssl-deployer/providers/jdcloud-alb/consts.go diff --git a/internal/pkg/core/deployer/providers/jdcloud-alb/jdcloud_alb.go b/internal/pkg/core/ssl-deployer/providers/jdcloud-alb/jdcloud_alb.go similarity index 81% rename from internal/pkg/core/deployer/providers/jdcloud-alb/jdcloud_alb.go rename to internal/pkg/core/ssl-deployer/providers/jdcloud-alb/jdcloud_alb.go index f2db2168..8d7813b3 100644 --- a/internal/pkg/core/deployer/providers/jdcloud-alb/jdcloud_alb.go +++ b/internal/pkg/core/ssl-deployer/providers/jdcloud-alb/jdcloud_alb.go @@ -13,13 +13,12 @@ import ( jdlbclient "github.com/jdcloud-api/jdcloud-sdk-go/services/lb/client" jdlbmodel "github.com/jdcloud-api/jdcloud-sdk-go/services/lb/models" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/jdcloud-ssl" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/jdcloud-ssl" xslices "github.com/usual2970/certimate/internal/pkg/utils/slices" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 京东云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 京东云 AccessKeySecret。 @@ -39,54 +38,54 @@ type DeployerConfig struct { Domain string `json:"domain,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *jdlbclient.LbClient - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *jdlbclient.LbClient + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret) + client, err := createSDKClient(config.AccessKeyId, config.AccessKeySecret) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: config.AccessKeyId, AccessKeySecret: config.AccessKeySecret, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 SSL - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -109,10 +108,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("unsupported resource type '%s'", d.config.ResourceType) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId string) error { +func (d *SSLDeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId string) error { if d.config.LoadbalancerId == "" { return errors.New("config `loadbalancerId` is required") } @@ -188,7 +187,7 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId return nil } -func (d *DeployerProvider) deployToListener(ctx context.Context, cloudCertId string) error { +func (d *SSLDeployerProvider) deployToListener(ctx context.Context, cloudCertId string) error { if d.config.ListenerId == "" { return errors.New("config `listenerId` is required") } @@ -201,7 +200,7 @@ func (d *DeployerProvider) deployToListener(ctx context.Context, cloudCertId str return nil } -func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudListenerId string, cloudCertId string) error { +func (d *SSLDeployerProvider) updateListenerCertificate(ctx context.Context, cloudListenerId string, cloudCertId string) error { // 查询监听器详情 // REF: https://docs.jdcloud.com/cn/load-balancer/api/describelistener describeListenerReq := jdlbapi.NewDescribeListenerRequest(d.config.RegionId, cloudListenerId) @@ -256,7 +255,7 @@ func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudL return nil } -func createSdkClient(accessKeyId, accessKeySecret string) (*jdlbclient.LbClient, error) { +func createSDKClient(accessKeyId, accessKeySecret string) (*jdlbclient.LbClient, error) { clientCredentials := jdcore.NewCredentials(accessKeyId, accessKeySecret) client := jdlbclient.NewLbClient(clientCredentials) client.SetLogger(jdcore.NewDefaultLogger(jdcore.LogWarn)) diff --git a/internal/pkg/core/deployer/providers/jdcloud-alb/jdcloud_alb_test.go b/internal/pkg/core/ssl-deployer/providers/jdcloud-alb/jdcloud_alb_test.go similarity index 76% rename from internal/pkg/core/deployer/providers/jdcloud-alb/jdcloud_alb_test.go rename to internal/pkg/core/ssl-deployer/providers/jdcloud-alb/jdcloud_alb_test.go index b6c063e2..57f284e2 100644 --- a/internal/pkg/core/deployer/providers/jdcloud-alb/jdcloud_alb_test.go +++ b/internal/pkg/core/ssl-deployer/providers/jdcloud-alb/jdcloud_alb_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/jdcloud-alb" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/jdcloud-alb" ) var ( @@ -22,7 +22,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_JDCLOUDALB_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_JDCLOUDALB_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -37,13 +37,13 @@ func init() { Shell command to run this test: go test -v ./jdcloud_alb_test.go -args \ - --CERTIMATE_DEPLOYER_JDCLOUDALB_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_JDCLOUDALB_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_JDCLOUDALB_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_JDCLOUDALB_ACCESSKEYSECRET="your-secret-access-key" \ - --CERTIMATE_DEPLOYER_JDCLOUDALB_REGION_ID="cn-north-1" \ - --CERTIMATE_DEPLOYER_JDCLOUDALB_LOADBALANCERID="your-alb-loadbalancer-id" \ - --CERTIMATE_DEPLOYER_JDCLOUDALB_LISTENERID="your-alb-listener-id" + --CERTIMATE_SSLDEPLOYER_JDCLOUDALB_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_JDCLOUDALB_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_JDCLOUDALB_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_JDCLOUDALB_ACCESSKEYSECRET="your-secret-access-key" \ + --CERTIMATE_SSLDEPLOYER_JDCLOUDALB_REGION_ID="cn-north-1" \ + --CERTIMATE_SSLDEPLOYER_JDCLOUDALB_LOADBALANCERID="your-alb-loadbalancer-id" \ + --CERTIMATE_SSLDEPLOYER_JDCLOUDALB_LISTENERID="your-alb-listener-id" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -59,7 +59,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("LOADBALANCERID: %v", fLoadbalancerId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, RegionId: fRegionId, @@ -93,7 +93,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("LISTENERID: %v", fListenerId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, RegionId: fRegionId, diff --git a/internal/pkg/core/deployer/providers/jdcloud-cdn/jdcloud_cdn.go b/internal/pkg/core/ssl-deployer/providers/jdcloud-cdn/jdcloud_cdn.go similarity index 61% rename from internal/pkg/core/deployer/providers/jdcloud-cdn/jdcloud_cdn.go rename to internal/pkg/core/ssl-deployer/providers/jdcloud-cdn/jdcloud_cdn.go index 7da0000b..6fc3e8cc 100644 --- a/internal/pkg/core/deployer/providers/jdcloud-cdn/jdcloud_cdn.go +++ b/internal/pkg/core/ssl-deployer/providers/jdcloud-cdn/jdcloud_cdn.go @@ -2,6 +2,7 @@ package jdcloudcdn import ( "context" + "errors" "fmt" "log/slog" @@ -9,12 +10,11 @@ import ( jdcdnapi "github.com/jdcloud-api/jdcloud-sdk-go/services/cdn/apis" jdcdnclient "github.com/jdcloud-api/jdcloud-sdk-go/services/cdn/client" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/jdcloud-ssl" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/jdcloud-ssl" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 京东云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 京东云 AccessKeySecret。 @@ -23,52 +23,56 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *jdcdnclient.CdnClient - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *jdcdnclient.CdnClient + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret) + client, err := createSDKClient(config.AccessKeyId, config.AccessKeySecret) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: config.AccessKeyId, AccessKeySecret: config.AccessKeySecret, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + if d.config.Domain == "" { + return nil, fmt.Errorf("config `domain` is required") + } + // 查询域名配置信息 // REF: https://docs.jdcloud.com/cn/cdn/api/querydomainconfig queryDomainConfigReq := jdcdnapi.NewQueryDomainConfigRequest(d.config.Domain) @@ -78,8 +82,8 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'cdn.QueryDomainConfig': %w", err) } - // 上传证书到 SSL - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -101,10 +105,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'cdn.SetHttpType': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(accessKeyId, accessKeySecret string) (*jdcdnclient.CdnClient, error) { +func createSDKClient(accessKeyId, accessKeySecret string) (*jdcdnclient.CdnClient, error) { clientCredentials := jdcore.NewCredentials(accessKeyId, accessKeySecret) client := jdcdnclient.NewCdnClient(clientCredentials) client.SetLogger(jdcore.NewDefaultLogger(jdcore.LogWarn)) diff --git a/internal/pkg/core/deployer/providers/jdcloud-cdn/jdcloud_cdn_test.go b/internal/pkg/core/ssl-deployer/providers/jdcloud-cdn/jdcloud_cdn_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/jdcloud-cdn/jdcloud_cdn_test.go rename to internal/pkg/core/ssl-deployer/providers/jdcloud-cdn/jdcloud_cdn_test.go index 1bed5d15..421f372d 100644 --- a/internal/pkg/core/deployer/providers/jdcloud-cdn/jdcloud_cdn_test.go +++ b/internal/pkg/core/ssl-deployer/providers/jdcloud-cdn/jdcloud_cdn_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/jdcloud-cdn" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/jdcloud-cdn" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_JDCLOUDCDN_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_JDCLOUDCDN_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./jdcloud_cdn_test.go -args \ - --CERTIMATE_DEPLOYER_JDCLOUDCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_JDCLOUDCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_JDCLOUDCDN_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_JDCLOUDCDN_ACCESSKEYSECRET="your-secret-access-key" \ - --CERTIMATE_DEPLOYER_JDCLOUDCDN_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_JDCLOUDCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_JDCLOUDCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_JDCLOUDCDN_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_JDCLOUDCDN_ACCESSKEYSECRET="your-secret-access-key" \ + --CERTIMATE_SSLDEPLOYER_JDCLOUDCDN_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, Domain: fDomain, diff --git a/internal/pkg/core/deployer/providers/jdcloud-live/jdcloud_live.go b/internal/pkg/core/ssl-deployer/providers/jdcloud-live/jdcloud_live.go similarity index 64% rename from internal/pkg/core/deployer/providers/jdcloud-live/jdcloud_live.go rename to internal/pkg/core/ssl-deployer/providers/jdcloud-live/jdcloud_live.go index 666ce101..775172c0 100644 --- a/internal/pkg/core/deployer/providers/jdcloud-live/jdcloud_live.go +++ b/internal/pkg/core/ssl-deployer/providers/jdcloud-live/jdcloud_live.go @@ -2,17 +2,17 @@ package jdcloudlive import ( "context" + "errors" "fmt" "log/slog" jdcore "github.com/jdcloud-api/jdcloud-sdk-go/core" jdliveapi "github.com/jdcloud-api/jdcloud-sdk-go/services/live/apis" jdliveclient "github.com/jdcloud-api/jdcloud-sdk-go/services/live/client" - - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 京东云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 京东云 AccessKeySecret。 @@ -21,41 +21,44 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger sdkClient *jdliveclient.LiveClient } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret) + client, err := createSDKClient(config.AccessKeyId, config.AccessKeySecret) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + if d.config.Domain == "" { + return nil, fmt.Errorf("config `domain` is required") + } + // 设置直播证书 // REF: https://docs.jdcloud.com/cn/live-video/api/setlivedomaincertificate setLiveDomainCertificateReq := jdliveapi.NewSetLiveDomainCertificateRequest(d.config.Domain, "on") @@ -67,10 +70,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'live.SetLiveDomainCertificate': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(accessKeyId, accessKeySecret string) (*jdliveclient.LiveClient, error) { +func createSDKClient(accessKeyId, accessKeySecret string) (*jdliveclient.LiveClient, error) { clientCredentials := jdcore.NewCredentials(accessKeyId, accessKeySecret) client := jdliveclient.NewLiveClient(clientCredentials) client.SetLogger(jdcore.NewDefaultLogger(jdcore.LogWarn)) diff --git a/internal/pkg/core/deployer/providers/jdcloud-live/jdcloud_live_test.go b/internal/pkg/core/ssl-deployer/providers/jdcloud-live/jdcloud_live_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/jdcloud-live/jdcloud_live_test.go rename to internal/pkg/core/ssl-deployer/providers/jdcloud-live/jdcloud_live_test.go index d544690d..ad3d1943 100644 --- a/internal/pkg/core/deployer/providers/jdcloud-live/jdcloud_live_test.go +++ b/internal/pkg/core/ssl-deployer/providers/jdcloud-live/jdcloud_live_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/jdcloud-live" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/jdcloud-live" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_JDCLOUDLIVE_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_JDCLOUDLIVE_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./jdcloud_live_test.go -args \ - --CERTIMATE_DEPLOYER_JDCLOUDLIVE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_JDCLOUDLIVE_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_JDCLOUDLIVE_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_JDCLOUDLIVE_ACCESSKEYSECRET="your-secret-access-key" \ - --CERTIMATE_DEPLOYER_JDCLOUDLIVE_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_JDCLOUDLIVE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_JDCLOUDLIVE_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_JDCLOUDLIVE_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_JDCLOUDLIVE_ACCESSKEYSECRET="your-secret-access-key" \ + --CERTIMATE_SSLDEPLOYER_JDCLOUDLIVE_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, Domain: fDomain, diff --git a/internal/pkg/core/deployer/providers/jdcloud-vod/jdcloud_vod.go b/internal/pkg/core/ssl-deployer/providers/jdcloud-vod/jdcloud_vod.go similarity index 79% rename from internal/pkg/core/deployer/providers/jdcloud-vod/jdcloud_vod.go rename to internal/pkg/core/ssl-deployer/providers/jdcloud-vod/jdcloud_vod.go index 19e5e286..52b94cbf 100644 --- a/internal/pkg/core/deployer/providers/jdcloud-vod/jdcloud_vod.go +++ b/internal/pkg/core/ssl-deployer/providers/jdcloud-vod/jdcloud_vod.go @@ -11,11 +11,10 @@ import ( jdcore "github.com/jdcloud-api/jdcloud-sdk-go/core" jdvodapi "github.com/jdcloud-api/jdcloud-sdk-go/services/vod/apis" jdvodclient "github.com/jdcloud-api/jdcloud-sdk-go/services/vod/client" - - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 京东云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 京东云 AccessKeySecret。 @@ -24,41 +23,40 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger sdkClient *jdvodclient.VodClient } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret) + client, err := createSDKClient(config.AccessKeyId, config.AccessKeySecret) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { // 查询域名列表 // REF: https://docs.jdcloud.com/cn/video-on-demand/api/listdomains var domainId int @@ -121,10 +119,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'vod.SetHttpSsl': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(accessKeyId, accessKeySecret string) (*jdvodclient.VodClient, error) { +func createSDKClient(accessKeyId, accessKeySecret string) (*jdvodclient.VodClient, error) { clientCredentials := jdcore.NewCredentials(accessKeyId, accessKeySecret) client := jdvodclient.NewVodClient(clientCredentials) client.SetLogger(jdcore.NewDefaultLogger(jdcore.LogWarn)) diff --git a/internal/pkg/core/deployer/providers/jdcloud-vod/jdcloud_vod_test.go b/internal/pkg/core/ssl-deployer/providers/jdcloud-vod/jdcloud_vod_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/jdcloud-vod/jdcloud_vod_test.go rename to internal/pkg/core/ssl-deployer/providers/jdcloud-vod/jdcloud_vod_test.go index b8c38b1d..36cc6b70 100644 --- a/internal/pkg/core/deployer/providers/jdcloud-vod/jdcloud_vod_test.go +++ b/internal/pkg/core/ssl-deployer/providers/jdcloud-vod/jdcloud_vod_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/jdcloud-vod" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/jdcloud-vod" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_JDCLOUDVOD_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_JDCLOUDVOD_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./jdcloud_vod_test.go -args \ - --CERTIMATE_DEPLOYER_JDCLOUDVOD_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_JDCLOUDVOD_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_JDCLOUDVOD_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_JDCLOUDVOD_ACCESSKEYSECRET="your-secret-access-key" \ - --CERTIMATE_DEPLOYER_JDCLOUDVOD_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_JDCLOUDVOD_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_JDCLOUDVOD_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_JDCLOUDVOD_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_JDCLOUDVOD_ACCESSKEYSECRET="your-secret-access-key" \ + --CERTIMATE_SSLDEPLOYER_JDCLOUDVOD_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, Domain: fDomain, diff --git a/internal/pkg/core/deployer/providers/k8s-secret/k8s_secret.go b/internal/pkg/core/ssl-deployer/providers/k8s-secret/k8s_secret.go similarity index 87% rename from internal/pkg/core/deployer/providers/k8s-secret/k8s_secret.go rename to internal/pkg/core/ssl-deployer/providers/k8s-secret/k8s_secret.go index 90833709..b9260ebb 100644 --- a/internal/pkg/core/deployer/providers/k8s-secret/k8s_secret.go +++ b/internal/pkg/core/ssl-deployer/providers/k8s-secret/k8s_secret.go @@ -13,11 +13,11 @@ import ( "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // kubeconfig 文件内容。 KubeConfig string `json:"kubeConfig,omitempty"` // Kubernetes 命名空间。 @@ -32,34 +32,33 @@ type DeployerConfig struct { SecretDataKeyForKey string `json:"secretDataKeyForKey,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - return &DeployerProvider{ + return &SSLDeployerProvider{ logger: slog.Default(), config: config, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { if d.config.Namespace == "" { return nil, errors.New("config `namespace` is required") } @@ -119,7 +118,7 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE if err != nil { return nil, fmt.Errorf("failed to create k8s secret: %w", err) } else { - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } } @@ -143,7 +142,7 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to update k8s secret: %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } func createK8sClient(kubeConfig string) (*kubernetes.Clientset, error) { diff --git a/internal/pkg/core/deployer/providers/k8s-secret/k8s_secret_test.go b/internal/pkg/core/ssl-deployer/providers/k8s-secret/k8s_secret_test.go similarity index 73% rename from internal/pkg/core/deployer/providers/k8s-secret/k8s_secret_test.go rename to internal/pkg/core/ssl-deployer/providers/k8s-secret/k8s_secret_test.go index 90bdf4ab..364eff04 100644 --- a/internal/pkg/core/deployer/providers/k8s-secret/k8s_secret_test.go +++ b/internal/pkg/core/ssl-deployer/providers/k8s-secret/k8s_secret_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/k8s-secret" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/k8s-secret" ) var ( @@ -21,7 +21,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_K8SSECRET_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_K8SSECRET_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -35,12 +35,12 @@ func init() { Shell command to run this test: go test -v ./k8s_secret_test.go -args \ - --CERTIMATE_DEPLOYER_K8SSECRET_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_K8SSECRET_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_K8SSECRET_NAMESPACE="default" \ - --CERTIMATE_DEPLOYER_K8SSECRET_SECRETNAME="secret" \ - --CERTIMATE_DEPLOYER_K8SSECRET_SECRETDATAKEYFORCRT="tls.crt" \ - --CERTIMATE_DEPLOYER_K8SSECRET_SECRETDATAKEYFORKEY="tls.key" + --CERTIMATE_SSLDEPLOYER_K8SSECRET_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_K8SSECRET_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_K8SSECRET_NAMESPACE="default" \ + --CERTIMATE_SSLDEPLOYER_K8SSECRET_SECRETNAME="secret" \ + --CERTIMATE_SSLDEPLOYER_K8SSECRET_SECRETDATAKEYFORCRT="tls.crt" \ + --CERTIMATE_SSLDEPLOYER_K8SSECRET_SECRETDATAKEYFORKEY="tls.key" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -56,7 +56,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("SECRETDATAKEYFORKEY: %v", fSecretDataKeyForKey), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ Namespace: fNamespace, SecretName: fSecretName, SecretDataKeyForCrt: fSecretDataKeyForCrt, diff --git a/internal/pkg/core/deployer/providers/lecdn/consts.go b/internal/pkg/core/ssl-deployer/providers/lecdn/consts.go similarity index 100% rename from internal/pkg/core/deployer/providers/lecdn/consts.go rename to internal/pkg/core/ssl-deployer/providers/lecdn/consts.go diff --git a/internal/pkg/core/deployer/providers/lecdn/lecdn.go b/internal/pkg/core/ssl-deployer/providers/lecdn/lecdn.go similarity index 81% rename from internal/pkg/core/deployer/providers/lecdn/lecdn.go rename to internal/pkg/core/ssl-deployer/providers/lecdn/lecdn.go index accfc0e7..e381aa85 100644 --- a/internal/pkg/core/deployer/providers/lecdn/lecdn.go +++ b/internal/pkg/core/ssl-deployer/providers/lecdn/lecdn.go @@ -8,12 +8,12 @@ import ( "log/slog" "time" - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" leclientsdkv3 "github.com/usual2970/certimate/internal/pkg/sdk3rd/lecdn/client-v3" lemastersdkv3 "github.com/usual2970/certimate/internal/pkg/sdk3rd/lecdn/master-v3" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // LeCDN 服务地址。 ServerUrl string `json:"serverUrl"` // LeCDN 版本。 @@ -38,41 +38,40 @@ type DeployerConfig struct { ClientId int64 `json:"clientId,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger sdkClient any } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.ServerUrl, config.ApiVersion, config.ApiRole, config.Username, config.Password, config.AllowInsecureConnections) + client, err := createSDKClient(config.ServerUrl, config.ApiVersion, config.ApiRole, config.Username, config.Password, config.AllowInsecureConnections) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { // 根据部署资源类型决定部署方式 switch d.config.ResourceType { case RESOURCE_TYPE_CERTIFICATE: @@ -84,10 +83,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("unsupported resource type '%s'", d.config.ResourceType) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func (d *DeployerProvider) deployToCertificate(ctx context.Context, certPEM string, privkeyPEM string) error { +func (d *SSLDeployerProvider) deployToCertificate(ctx context.Context, certPEM string, privkeyPEM string) error { if d.config.CertificateId == 0 { return errors.New("config `certificateId` is required") } @@ -144,7 +143,7 @@ const ( sdkRoleMaster = "master" ) -func createSdkClient(serverUrl, apiVersion, apiRole, username, password string, skipTlsVerify bool) (any, error) { +func createSDKClient(serverUrl, apiVersion, apiRole, username, password string, skipTlsVerify bool) (any, error) { if apiVersion == sdkVersionV3 && apiRole == sdkRoleClient { // v3 版客户端 client, err := leclientsdkv3.NewClient(serverUrl, username, password) diff --git a/internal/pkg/core/deployer/providers/lecdn/lecdn_test.go b/internal/pkg/core/ssl-deployer/providers/lecdn/lecdn_test.go similarity index 76% rename from internal/pkg/core/deployer/providers/lecdn/lecdn_test.go rename to internal/pkg/core/ssl-deployer/providers/lecdn/lecdn_test.go index fda880c4..4cd07071 100644 --- a/internal/pkg/core/deployer/providers/lecdn/lecdn_test.go +++ b/internal/pkg/core/ssl-deployer/providers/lecdn/lecdn_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/lecdn" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/lecdn" ) var ( @@ -22,7 +22,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_LECDN_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_LECDN_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -37,12 +37,12 @@ func init() { Shell command to run this test: go test -v ./lecdn_test.go -args \ - --CERTIMATE_DEPLOYER_LECDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_LECDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_LECDN_SERVERURL="http://127.0.0.1:5090" \ - --CERTIMATE_DEPLOYER_LECDN_USERNAME="your-username" \ - --CERTIMATE_DEPLOYER_LECDN_PASSWORD="your-password" \ - --CERTIMATE_DEPLOYER_LECDN_CERTIFICATEID="your-cerficiate-id" + --CERTIMATE_SSLDEPLOYER_LECDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_LECDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_LECDN_SERVERURL="http://127.0.0.1:5090" \ + --CERTIMATE_SSLDEPLOYER_LECDN_USERNAME="your-username" \ + --CERTIMATE_SSLDEPLOYER_LECDN_PASSWORD="your-password" \ + --CERTIMATE_SSLDEPLOYER_LECDN_CERTIFICATEID="your-cerficiate-id" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -59,7 +59,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("CERTIFICATEID: %v", fCertificateId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ ServerUrl: fServerUrl, ApiVersion: fApiVersion, ApiRole: "user", diff --git a/internal/pkg/core/deployer/providers/local/defines.go b/internal/pkg/core/ssl-deployer/providers/local/defines.go similarity index 100% rename from internal/pkg/core/deployer/providers/local/defines.go rename to internal/pkg/core/ssl-deployer/providers/local/defines.go diff --git a/internal/pkg/core/deployer/providers/local/local.go b/internal/pkg/core/ssl-deployer/providers/local/local.go similarity index 89% rename from internal/pkg/core/deployer/providers/local/local.go rename to internal/pkg/core/ssl-deployer/providers/local/local.go index fcfc6775..3c9c6bc3 100644 --- a/internal/pkg/core/deployer/providers/local/local.go +++ b/internal/pkg/core/ssl-deployer/providers/local/local.go @@ -3,17 +3,18 @@ package local import ( "bytes" "context" + "errors" "fmt" "log/slog" "os/exec" "runtime" - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" xfile "github.com/usual2970/certimate/internal/pkg/utils/file" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // Shell 执行环境。 // 零值时根据操作系统决定。 ShellEnv ShellEnvType `json:"shellEnv,omitempty"` @@ -47,34 +48,33 @@ type DeployerConfig struct { JksStorepass string `json:"jksStorepass,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { // 提取服务器证书和中间证书 serverCertPEM, intermediaCertPEM, err := xcert.ExtractCertificatesFromPEM(certPEM) if err != nil { @@ -154,7 +154,7 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE } } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } func execCommand(shellEnv ShellEnvType, command string) (string, string, error) { diff --git a/internal/pkg/core/deployer/providers/local/local_test.go b/internal/pkg/core/ssl-deployer/providers/local/local_test.go similarity index 80% rename from internal/pkg/core/deployer/providers/local/local_test.go rename to internal/pkg/core/ssl-deployer/providers/local/local_test.go index 4225864b..474d67f9 100644 --- a/internal/pkg/core/deployer/providers/local/local_test.go +++ b/internal/pkg/core/ssl-deployer/providers/local/local_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/local" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/local" ) var ( @@ -26,7 +26,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_LOCAL_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_LOCAL_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -45,17 +45,17 @@ func init() { Shell command to run this test: go test -v ./local_test.go -args \ - --CERTIMATE_DEPLOYER_LOCAL_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_LOCAL_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_LOCAL_OUTPUTCERTPATH="/path/to/your-output-cert" \ - --CERTIMATE_DEPLOYER_LOCAL_OUTPUTKEYPATH="/path/to/your-output-key" \ - --CERTIMATE_DEPLOYER_LOCAL_PFXPASSWORD="your-pfx-password" \ - --CERTIMATE_DEPLOYER_LOCAL_JKSALIAS="your-jks-alias" \ - --CERTIMATE_DEPLOYER_LOCAL_JKSKEYPASS="your-jks-keypass" \ - --CERTIMATE_DEPLOYER_LOCAL_JKSSTOREPASS="your-jks-storepass" \ - --CERTIMATE_DEPLOYER_LOCAL_SHELLENV="sh" \ - --CERTIMATE_DEPLOYER_LOCAL_PRECOMMAND="echo 'hello world'" \ - --CERTIMATE_DEPLOYER_LOCAL_POSTCOMMAND="echo 'bye-bye world'" + --CERTIMATE_SSLDEPLOYER_LOCAL_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_LOCAL_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_LOCAL_OUTPUTCERTPATH="/path/to/your-output-cert" \ + --CERTIMATE_SSLDEPLOYER_LOCAL_OUTPUTKEYPATH="/path/to/your-output-key" \ + --CERTIMATE_SSLDEPLOYER_LOCAL_PFXPASSWORD="your-pfx-password" \ + --CERTIMATE_SSLDEPLOYER_LOCAL_JKSALIAS="your-jks-alias" \ + --CERTIMATE_SSLDEPLOYER_LOCAL_JKSKEYPASS="your-jks-keypass" \ + --CERTIMATE_SSLDEPLOYER_LOCAL_JKSSTOREPASS="your-jks-storepass" \ + --CERTIMATE_SSLDEPLOYER_LOCAL_SHELLENV="sh" \ + --CERTIMATE_SSLDEPLOYER_LOCAL_PRECOMMAND="echo 'hello world'" \ + --CERTIMATE_SSLDEPLOYER_LOCAL_POSTCOMMAND="echo 'bye-bye world'" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -72,7 +72,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("POSTCOMMAND: %v", fPostCommand), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ OutputFormat: provider.OUTPUT_FORMAT_PEM, OutputCertPath: fOutputCertPath + ".pem", OutputKeyPath: fOutputKeyPath + ".pem", @@ -123,7 +123,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("PFXPASSWORD: %v", fPfxPassword), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ OutputFormat: provider.OUTPUT_FORMAT_PFX, OutputCertPath: fOutputCertPath + ".pfx", PfxPassword: fPfxPassword, @@ -164,7 +164,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("JKSSTOREPASS: %v", fJksStorepass), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ OutputFormat: provider.OUTPUT_FORMAT_JKS, OutputCertPath: fOutputCertPath + ".jks", JksAlias: fJksAlias, diff --git a/internal/pkg/core/deployer/providers/netlify-site/netlify_site.go b/internal/pkg/core/ssl-deployer/providers/netlify-site/netlify_site.go similarity index 67% rename from internal/pkg/core/deployer/providers/netlify-site/netlify_site.go rename to internal/pkg/core/ssl-deployer/providers/netlify-site/netlify_site.go index e45df168..8734c198 100644 --- a/internal/pkg/core/deployer/providers/netlify-site/netlify_site.go +++ b/internal/pkg/core/ssl-deployer/providers/netlify-site/netlify_site.go @@ -6,53 +6,52 @@ import ( "fmt" "log/slog" - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" netlifysdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/netlify" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // netlify API Token。 ApiToken string `json:"apiToken"` // netlify 网站 ID。 SiteId string `json:"siteId"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger sdkClient *netlifysdk.Client } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.ApiToken) + client, err := createSDKClient(config.ApiToken) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { if d.config.SiteId == "" { return nil, errors.New("config `siteId` is required") } @@ -76,9 +75,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'netlify.provisionSiteTLSCertificate': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(apiToken string) (*netlifysdk.Client, error) { +func createSDKClient(apiToken string) (*netlifysdk.Client, error) { return netlifysdk.NewClient(apiToken) } diff --git a/internal/pkg/core/deployer/providers/netlify-site/netlify_site_test.go b/internal/pkg/core/ssl-deployer/providers/netlify-site/netlify_site_test.go similarity index 70% rename from internal/pkg/core/deployer/providers/netlify-site/netlify_site_test.go rename to internal/pkg/core/ssl-deployer/providers/netlify-site/netlify_site_test.go index e693c1a3..7616f4ff 100644 --- a/internal/pkg/core/deployer/providers/netlify-site/netlify_site_test.go +++ b/internal/pkg/core/ssl-deployer/providers/netlify-site/netlify_site_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/netlify-site" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/netlify-site" ) var ( @@ -19,7 +19,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_NETLIFYSITE_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_NETLIFYSITE_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -31,10 +31,10 @@ func init() { Shell command to run this test: go test -v ./netlify_site_test.go -args \ - --CERTIMATE_DEPLOYER_NETLIFYSITE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_NETLIFYSITE_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_NETLIFYSITE_APITOKEN="your-api-token" \ - --CERTIMATE_DEPLOYER_NETLIFYSITE_SITEID="your-site-id" + --CERTIMATE_SSLDEPLOYER_NETLIFYSITE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_NETLIFYSITE_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_NETLIFYSITE_APITOKEN="your-api-token" \ + --CERTIMATE_SSLDEPLOYER_NETLIFYSITE_SITEID="your-site-id" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -48,7 +48,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("SITEID: %v", fSiteId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ ApiToken: fApiToken, SiteId: fSiteId, }) diff --git a/internal/pkg/core/deployer/providers/proxmoxve/proxmoxve.go b/internal/pkg/core/ssl-deployer/providers/proxmoxve/proxmoxve.go similarity index 75% rename from internal/pkg/core/deployer/providers/proxmoxve/proxmoxve.go rename to internal/pkg/core/ssl-deployer/providers/proxmoxve/proxmoxve.go index 6c8badb5..7f3abdfb 100644 --- a/internal/pkg/core/deployer/providers/proxmoxve/proxmoxve.go +++ b/internal/pkg/core/ssl-deployer/providers/proxmoxve/proxmoxve.go @@ -12,11 +12,11 @@ import ( "github.com/luthermonson/go-proxmox" - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" xhttp "github.com/usual2970/certimate/internal/pkg/utils/http" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // Proxmox VE 服务地址。 ServerUrl string `json:"serverUrl"` // Proxmox VE API Token。 @@ -31,41 +31,40 @@ type DeployerConfig struct { AutoRestart bool `json:"autoRestart"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger sdkClient *proxmox.Client } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.ServerUrl, config.ApiToken, config.ApiTokenSecret, config.AllowInsecureConnections) + client, err := createSDKClient(config.ServerUrl, config.ApiToken, config.ApiTokenSecret, config.AllowInsecureConnections) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { if d.config.NodeName == "" { return nil, errors.New("config `nodeName` is required") } @@ -89,10 +88,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to upload custom certificate to node '%s': %w", node.Name, err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(serverUrl, apiToken, apiTokenSecret string, skipTlsVerify bool) (*proxmox.Client, error) { +func createSDKClient(serverUrl, apiToken, apiTokenSecret string, skipTlsVerify bool) (*proxmox.Client, error) { if _, err := url.Parse(serverUrl); err != nil { return nil, errors.New("invalid pve server url") } diff --git a/internal/pkg/core/deployer/providers/proxmoxve/proxmoxve_test.go b/internal/pkg/core/ssl-deployer/providers/proxmoxve/proxmoxve_test.go similarity index 72% rename from internal/pkg/core/deployer/providers/proxmoxve/proxmoxve_test.go rename to internal/pkg/core/ssl-deployer/providers/proxmoxve/proxmoxve_test.go index 8ae02f3b..66e232ea 100644 --- a/internal/pkg/core/deployer/providers/proxmoxve/proxmoxve_test.go +++ b/internal/pkg/core/ssl-deployer/providers/proxmoxve/proxmoxve_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/proxmoxve" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/proxmoxve" ) var ( @@ -21,7 +21,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_PROXMOXVE_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_PROXMOXVE_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -35,12 +35,12 @@ func init() { Shell command to run this test: go test -v ./proxmoxve_test.go -args \ - --CERTIMATE_DEPLOYER_PROXMOXVE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_PROXMOXVE_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_PROXMOXVE_SERVERURL="http://127.0.0.1:8006" \ - --CERTIMATE_DEPLOYER_PROXMOXVE_APITOKEN="your-api-token" \ - --CERTIMATE_DEPLOYER_PROXMOXVE_APITOKENSECRET="your-api-token-secret" \ - --CERTIMATE_DEPLOYER_PROXMOXVE_NODENAME="your-cluster-node-name" + --CERTIMATE_SSLDEPLOYER_PROXMOXVE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_PROXMOXVE_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_PROXMOXVE_SERVERURL="http://127.0.0.1:8006" \ + --CERTIMATE_SSLDEPLOYER_PROXMOXVE_APITOKEN="your-api-token" \ + --CERTIMATE_SSLDEPLOYER_PROXMOXVE_APITOKENSECRET="your-api-token-secret" \ + --CERTIMATE_SSLDEPLOYER_PROXMOXVE_NODENAME="your-cluster-node-name" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -56,7 +56,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("NODENAME: %v", fNodeName), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ ServerUrl: fServerUrl, ApiToken: fApiToken, ApiTokenSecret: fApiTokenSecret, diff --git a/internal/pkg/core/deployer/providers/qiniu-cdn/qiniu_cdn.go b/internal/pkg/core/ssl-deployer/providers/qiniu-cdn/qiniu_cdn.go similarity index 66% rename from internal/pkg/core/deployer/providers/qiniu-cdn/qiniu_cdn.go rename to internal/pkg/core/ssl-deployer/providers/qiniu-cdn/qiniu_cdn.go index 6df43dfc..b4975ba5 100644 --- a/internal/pkg/core/deployer/providers/qiniu-cdn/qiniu_cdn.go +++ b/internal/pkg/core/ssl-deployer/providers/qiniu-cdn/qiniu_cdn.go @@ -2,19 +2,19 @@ package qiniucdn import ( "context" + "errors" "fmt" "log/slog" "strings" "github.com/qiniu/go-sdk/v7/auth" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/qiniu-sslcert" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/qiniu-sslcert" qiniusdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/qiniu" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 七牛云 AccessKey。 AccessKey string `json:"accessKey"` // 七牛云 SecretKey。 @@ -23,51 +23,55 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *qiniusdk.CdnManager - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *qiniusdk.CdnManager + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } client := qiniusdk.NewCdnManager(auth.New(config.AccessKey, config.SecretKey)) - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKey: config.AccessKey, SecretKey: config.SecretKey, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 CDN - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + if d.config.Domain == "" { + return nil, fmt.Errorf("config `domain` is required") + } + + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -101,5 +105,5 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE } } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } diff --git a/internal/pkg/core/deployer/providers/qiniu-cdn/qiniu_cdn_test.go b/internal/pkg/core/ssl-deployer/providers/qiniu-cdn/qiniu_cdn_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/qiniu-cdn/qiniu_cdn_test.go rename to internal/pkg/core/ssl-deployer/providers/qiniu-cdn/qiniu_cdn_test.go index 51c1201c..3aa43426 100644 --- a/internal/pkg/core/deployer/providers/qiniu-cdn/qiniu_cdn_test.go +++ b/internal/pkg/core/ssl-deployer/providers/qiniu-cdn/qiniu_cdn_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/qiniu-cdn" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/qiniu-cdn" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_QINIUCDN_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_QINIUCDN_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./qiniu_cdn_test.go -args \ - --CERTIMATE_DEPLOYER_QINIUCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_QINIUCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_QINIUCDN_ACCESSKEY="your-access-key" \ - --CERTIMATE_DEPLOYER_QINIUCDN_SECRETKEY="your-secret-key" \ - --CERTIMATE_DEPLOYER_QINIUCDN_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_QINIUCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_QINIUCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_QINIUCDN_ACCESSKEY="your-access-key" \ + --CERTIMATE_SSLDEPLOYER_QINIUCDN_SECRETKEY="your-secret-key" \ + --CERTIMATE_SSLDEPLOYER_QINIUCDN_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKey: fAccessKey, SecretKey: fSecretKey, Domain: fDomain, diff --git a/internal/pkg/core/deployer/providers/qiniu-pili/qiniu_pili.go b/internal/pkg/core/ssl-deployer/providers/qiniu-pili/qiniu_pili.go similarity index 51% rename from internal/pkg/core/deployer/providers/qiniu-pili/qiniu_pili.go rename to internal/pkg/core/ssl-deployer/providers/qiniu-pili/qiniu_pili.go index ec6cfc4b..3da0f30f 100644 --- a/internal/pkg/core/deployer/providers/qiniu-pili/qiniu_pili.go +++ b/internal/pkg/core/ssl-deployer/providers/qiniu-pili/qiniu_pili.go @@ -2,17 +2,17 @@ package qiniupili import ( "context" + "errors" "fmt" "log/slog" "github.com/qiniu/go-sdk/v7/pili" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/qiniu-sslcert" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/qiniu-sslcert" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 七牛云 AccessKey。 AccessKey string `json:"accessKey"` // 七牛云 SecretKey。 @@ -23,51 +23,55 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *pili.Manager - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *pili.Manager + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } manager := pili.NewManager(pili.ManagerConfig{AccessKey: config.AccessKey, SecretKey: config.SecretKey}) - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKey: config.AccessKey, SecretKey: config.SecretKey, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: manager, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: manager, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 CDN - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + if d.config.Domain == "" { + return nil, fmt.Errorf("config `domain` is required") + } + + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -87,5 +91,5 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'pili.SetDomainCert': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } diff --git a/internal/pkg/core/deployer/providers/qiniu-pili/qiniu_pili_test.go b/internal/pkg/core/ssl-deployer/providers/qiniu-pili/qiniu_pili_test.go similarity index 70% rename from internal/pkg/core/deployer/providers/qiniu-pili/qiniu_pili_test.go rename to internal/pkg/core/ssl-deployer/providers/qiniu-pili/qiniu_pili_test.go index 1c165e0e..f43e97e5 100644 --- a/internal/pkg/core/deployer/providers/qiniu-pili/qiniu_pili_test.go +++ b/internal/pkg/core/ssl-deployer/providers/qiniu-pili/qiniu_pili_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/qiniu-pili" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/qiniu-pili" ) var ( @@ -21,7 +21,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_QINIUPILI_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_QINIUPILI_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -35,12 +35,12 @@ func init() { Shell command to run this test: go test -v ./qiniu_pili_test.go -args \ - --CERTIMATE_DEPLOYER_QINIUPILI_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_QINIUPILI_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_QINIUPILI_ACCESSKEY="your-access-key" \ - --CERTIMATE_DEPLOYER_QINIUPILI_SECRETKEY="your-secret-key" \ - --CERTIMATE_DEPLOYER_QINIUPILI_HUB="your-hub-name" \ - --CERTIMATE_DEPLOYER_QINIUPILI_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_QINIUPILI_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_QINIUPILI_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_QINIUPILI_ACCESSKEY="your-access-key" \ + --CERTIMATE_SSLDEPLOYER_QINIUPILI_SECRETKEY="your-secret-key" \ + --CERTIMATE_SSLDEPLOYER_QINIUPILI_HUB="your-hub-name" \ + --CERTIMATE_SSLDEPLOYER_QINIUPILI_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -56,7 +56,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKey: fAccessKey, SecretKey: fSecretKey, Domain: fDomain, diff --git a/internal/pkg/core/deployer/providers/rainyun-rcdn/rainyun_rcdn.go b/internal/pkg/core/ssl-deployer/providers/rainyun-rcdn/rainyun_rcdn.go similarity index 50% rename from internal/pkg/core/deployer/providers/rainyun-rcdn/rainyun_rcdn.go rename to internal/pkg/core/ssl-deployer/providers/rainyun-rcdn/rainyun_rcdn.go index c4e603fd..e030507d 100644 --- a/internal/pkg/core/deployer/providers/rainyun-rcdn/rainyun_rcdn.go +++ b/internal/pkg/core/ssl-deployer/providers/rainyun-rcdn/rainyun_rcdn.go @@ -2,17 +2,17 @@ package rainyunrcdn import ( "context" + "errors" "fmt" "log/slog" "strconv" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/rainyun-sslcenter" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/rainyun-sslcenter" rainyunsdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/rainyun" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 雨云 API 密钥。 ApiKey string `json:"apiKey"` // RCDN 实例 ID。 @@ -21,53 +21,57 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *rainyunsdk.Client - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *rainyunsdk.Client + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.ApiKey) + client, err := createSDKClient(config.ApiKey) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ ApiKey: config.ApiKey, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 SSL 证书 - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + if d.config.Domain == "" { + return nil, fmt.Errorf("config `domain` is required") + } + + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -87,9 +91,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'rcdn.InstanceSslBind': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(apiKey string) (*rainyunsdk.Client, error) { +func createSDKClient(apiKey string) (*rainyunsdk.Client, error) { return rainyunsdk.NewClient(apiKey) } diff --git a/internal/pkg/core/deployer/providers/rainyun-rcdn/rainyun_rcdn_test.go b/internal/pkg/core/ssl-deployer/providers/rainyun-rcdn/rainyun_rcdn_test.go similarity index 70% rename from internal/pkg/core/deployer/providers/rainyun-rcdn/rainyun_rcdn_test.go rename to internal/pkg/core/ssl-deployer/providers/rainyun-rcdn/rainyun_rcdn_test.go index 7c3d145f..287622a8 100644 --- a/internal/pkg/core/deployer/providers/rainyun-rcdn/rainyun_rcdn_test.go +++ b/internal/pkg/core/ssl-deployer/providers/rainyun-rcdn/rainyun_rcdn_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/rainyun-rcdn" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/rainyun-rcdn" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_RAINYUNRCDN_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_RAINYUNRCDN_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./ucloud_ucdn_test.go -args \ - --CERTIMATE_DEPLOYER_RAINYUNRCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_RAINYUNRCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_RAINYUNRCDN_APIKEY="your-api-key" \ - --CERTIMATE_DEPLOYER_RAINYUNRCDN_INSTANCEID="your-rcdn-instance-id" \ - --CERTIMATE_DEPLOYER_RAINYUNRCDN_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_RAINYUNRCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_RAINYUNRCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_RAINYUNRCDN_APIKEY="your-api-key" \ + --CERTIMATE_SSLDEPLOYER_RAINYUNRCDN_INSTANCEID="your-rcdn-instance-id" \ + --CERTIMATE_SSLDEPLOYER_RAINYUNRCDN_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ ApiKey: fApiKey, InstanceId: int32(fInstanceId), Domain: fDomain, diff --git a/internal/pkg/core/deployer/providers/ratpanel-console/ratpanel_console.go b/internal/pkg/core/ssl-deployer/providers/ratpanel-console/ratpanel_console.go similarity index 64% rename from internal/pkg/core/deployer/providers/ratpanel-console/ratpanel_console.go rename to internal/pkg/core/ssl-deployer/providers/ratpanel-console/ratpanel_console.go index 47de7c65..6c1c2716 100644 --- a/internal/pkg/core/deployer/providers/ratpanel-console/ratpanel_console.go +++ b/internal/pkg/core/ssl-deployer/providers/ratpanel-console/ratpanel_console.go @@ -3,14 +3,15 @@ package ratpanelconsole import ( "context" "crypto/tls" + "errors" "fmt" "log/slog" - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" rpsdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/ratpanel" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 耗子面板服务地址。 ServerUrl string `json:"serverUrl"` // 耗子面板访问令牌 ID。 @@ -21,41 +22,40 @@ type DeployerConfig struct { AllowInsecureConnections bool `json:"allowInsecureConnections,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger sdkClient *rpsdk.Client } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.ServerUrl, config.AccessTokenId, config.AccessToken, config.AllowInsecureConnections) + client, err := createSDKClient(config.ServerUrl, config.AccessTokenId, config.AccessToken, config.AllowInsecureConnections) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { // 设置面板 SSL 证书 setSettingCertReq := &rpsdk.SetSettingCertRequest{ Certificate: certPEM, @@ -67,10 +67,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'ratpanel.SetSettingCert': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(serverUrl string, accessTokenId int32, accessToken string, skipTlsVerify bool) (*rpsdk.Client, error) { +func createSDKClient(serverUrl string, accessTokenId int32, accessToken string, skipTlsVerify bool) (*rpsdk.Client, error) { client, err := rpsdk.NewClient(serverUrl, accessTokenId, accessToken) if err != nil { return nil, err diff --git a/internal/pkg/core/deployer/providers/ratpanel-console/ratpanel_console_test.go b/internal/pkg/core/ssl-deployer/providers/ratpanel-console/ratpanel_console_test.go similarity index 70% rename from internal/pkg/core/deployer/providers/ratpanel-console/ratpanel_console_test.go rename to internal/pkg/core/ssl-deployer/providers/ratpanel-console/ratpanel_console_test.go index 3366b06c..35a9ec32 100644 --- a/internal/pkg/core/deployer/providers/ratpanel-console/ratpanel_console_test.go +++ b/internal/pkg/core/ssl-deployer/providers/ratpanel-console/ratpanel_console_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/ratpanel-console" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/ratpanel-console" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_RATPANELCONSOLE_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_RATPANELCONSOLE_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./ratpanel_console_test.go -args \ - --CERTIMATE_DEPLOYER_RATPANELCONSOLE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_RATPANELCONSOLE_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_RATPANELCONSOLE_SERVERURL="http://127.0.0.1:8888" \ - --CERTIMATE_DEPLOYER_RATPANELCONSOLE_ACCESSTOKENID="your-access-token-id" \ - --CERTIMATE_DEPLOYER_RATPANELCONSOLE_ACCESSTOKEN="your-access-token" + --CERTIMATE_SSLDEPLOYER_RATPANELCONSOLE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_RATPANELCONSOLE_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_RATPANELCONSOLE_SERVERURL="http://127.0.0.1:8888" \ + --CERTIMATE_SSLDEPLOYER_RATPANELCONSOLE_ACCESSTOKENID="your-access-token-id" \ + --CERTIMATE_SSLDEPLOYER_RATPANELCONSOLE_ACCESSTOKEN="your-access-token" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("ACCESSTOKEN: %v", fAccessToken), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ ServerUrl: fServerUrl, AccessTokenId: int32(fAccessTokenId), AccessToken: fAccessToken, diff --git a/internal/pkg/core/deployer/providers/ratpanel-site/ratpanel_site.go b/internal/pkg/core/ssl-deployer/providers/ratpanel-site/ratpanel_site.go similarity index 67% rename from internal/pkg/core/deployer/providers/ratpanel-site/ratpanel_site.go rename to internal/pkg/core/ssl-deployer/providers/ratpanel-site/ratpanel_site.go index f7e01218..f9d001ee 100644 --- a/internal/pkg/core/deployer/providers/ratpanel-site/ratpanel_site.go +++ b/internal/pkg/core/ssl-deployer/providers/ratpanel-site/ratpanel_site.go @@ -7,11 +7,11 @@ import ( "fmt" "log/slog" - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" rpsdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/ratpanel" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 耗子面板服务地址。 ServerUrl string `json:"serverUrl"` // 耗子面板访问令牌 ID。 @@ -24,41 +24,40 @@ type DeployerConfig struct { SiteName string `json:"siteName"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger sdkClient *rpsdk.Client } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.ServerUrl, config.AccessTokenId, config.AccessToken, config.AllowInsecureConnections) + client, err := createSDKClient(config.ServerUrl, config.AccessTokenId, config.AccessToken, config.AllowInsecureConnections) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { if d.config.SiteName == "" { return nil, errors.New("config `siteName` is required") } @@ -75,10 +74,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'ratpanel.SetWebsiteCert': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(serverUrl string, accessTokenId int32, accessToken string, skipTlsVerify bool) (*rpsdk.Client, error) { +func createSDKClient(serverUrl string, accessTokenId int32, accessToken string, skipTlsVerify bool) (*rpsdk.Client, error) { client, err := rpsdk.NewClient(serverUrl, accessTokenId, accessToken) if err != nil { return nil, err diff --git a/internal/pkg/core/deployer/providers/ratpanel-site/ratpanel_site_test.go b/internal/pkg/core/ssl-deployer/providers/ratpanel-site/ratpanel_site_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/ratpanel-site/ratpanel_site_test.go rename to internal/pkg/core/ssl-deployer/providers/ratpanel-site/ratpanel_site_test.go index cd84b3ea..93d2cb8d 100644 --- a/internal/pkg/core/deployer/providers/ratpanel-site/ratpanel_site_test.go +++ b/internal/pkg/core/ssl-deployer/providers/ratpanel-site/ratpanel_site_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/ratpanel-site" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/ratpanel-site" ) var ( @@ -21,7 +21,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_RATPANELSITE_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_RATPANELSITE_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -35,12 +35,12 @@ func init() { Shell command to run this test: go test -v ./ratpanel_site_test.go -args \ - --CERTIMATE_DEPLOYER_RATPANELSITE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_RATPANELSITE_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_RATPANELSITE_SERVERURL="http://127.0.0.1:8888" \ - --CERTIMATE_DEPLOYER_RATPANELSITE_ACCESSTOKENID="your-access-token-id" \ - --CERTIMATE_DEPLOYER_RATPANELSITE_ACCESSTOKEN="your-access-token" \ - --CERTIMATE_DEPLOYER_RATPANELSITE_SITENAME="your-site-name" + --CERTIMATE_SSLDEPLOYER_RATPANELSITE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_RATPANELSITE_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_RATPANELSITE_SERVERURL="http://127.0.0.1:8888" \ + --CERTIMATE_SSLDEPLOYER_RATPANELSITE_ACCESSTOKENID="your-access-token-id" \ + --CERTIMATE_SSLDEPLOYER_RATPANELSITE_ACCESSTOKEN="your-access-token" \ + --CERTIMATE_SSLDEPLOYER_RATPANELSITE_SITENAME="your-site-name" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -56,7 +56,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("SITENAME: %v", fSiteName), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ ServerUrl: fServerUrl, AccessTokenId: int32(fAccessTokenId), AccessToken: fAccessToken, diff --git a/internal/pkg/core/deployer/providers/safeline/consts.go b/internal/pkg/core/ssl-deployer/providers/safeline/consts.go similarity index 100% rename from internal/pkg/core/deployer/providers/safeline/consts.go rename to internal/pkg/core/ssl-deployer/providers/safeline/consts.go diff --git a/internal/pkg/core/deployer/providers/safeline/safeline.go b/internal/pkg/core/ssl-deployer/providers/safeline/safeline.go similarity index 67% rename from internal/pkg/core/deployer/providers/safeline/safeline.go rename to internal/pkg/core/ssl-deployer/providers/safeline/safeline.go index ac7ac5e0..cb2a7ee0 100644 --- a/internal/pkg/core/deployer/providers/safeline/safeline.go +++ b/internal/pkg/core/ssl-deployer/providers/safeline/safeline.go @@ -7,11 +7,11 @@ import ( "fmt" "log/slog" - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" safelinesdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/safeline" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 雷池服务地址。 ServerUrl string `json:"serverUrl"` // 雷池 API Token。 @@ -25,42 +25,41 @@ type DeployerConfig struct { CertificateId int32 `json:"certificateId,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger sdkClient *safelinesdk.Client } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.ServerUrl, config.ApiToken, config.AllowInsecureConnections) + client, err := createSDKClient(config.ServerUrl, config.ApiToken, config.AllowInsecureConnections) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 根据部署资源类型决定部署方式 +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + // 根据部署资源类型决定部署方式`` switch d.config.ResourceType { case RESOURCE_TYPE_CERTIFICATE: if err := d.deployToCertificate(ctx, certPEM, privkeyPEM); err != nil { @@ -71,10 +70,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("unsupported resource type '%s'", d.config.ResourceType) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func (d *DeployerProvider) deployToCertificate(ctx context.Context, certPEM string, privkeyPEM string) error { +func (d *SSLDeployerProvider) deployToCertificate(ctx context.Context, certPEM string, privkeyPEM string) error { if d.config.CertificateId == 0 { return errors.New("config `certificateId` is required") } @@ -97,7 +96,7 @@ func (d *DeployerProvider) deployToCertificate(ctx context.Context, certPEM stri return nil } -func createSdkClient(serverUrl, apiToken string, skipTlsVerify bool) (*safelinesdk.Client, error) { +func createSDKClient(serverUrl, apiToken string, skipTlsVerify bool) (*safelinesdk.Client, error) { client, err := safelinesdk.NewClient(serverUrl, apiToken) if err != nil { return nil, err diff --git a/internal/pkg/core/deployer/providers/safeline/safeline_test.go b/internal/pkg/core/ssl-deployer/providers/safeline/safeline_test.go similarity index 73% rename from internal/pkg/core/deployer/providers/safeline/safeline_test.go rename to internal/pkg/core/ssl-deployer/providers/safeline/safeline_test.go index 9730473c..784a0511 100644 --- a/internal/pkg/core/deployer/providers/safeline/safeline_test.go +++ b/internal/pkg/core/ssl-deployer/providers/safeline/safeline_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/safeline" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/safeline" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_SAFELINE_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_SAFELINE_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./safeline_test.go -args \ - --CERTIMATE_DEPLOYER_SAFELINE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_SAFELINE_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_SAFELINE_SERVERURL="http://127.0.0.1:9443" \ - --CERTIMATE_DEPLOYER_SAFELINE_APITOKEN="your-api-token" \ - --CERTIMATE_DEPLOYER_SAFELINE_CERTIFICATEID="your-cerficiate-id" + --CERTIMATE_SSLDEPLOYER_SAFELINE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_SAFELINE_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_SAFELINE_SERVERURL="http://127.0.0.1:9443" \ + --CERTIMATE_SSLDEPLOYER_SAFELINE_APITOKEN="your-api-token" \ + --CERTIMATE_SSLDEPLOYER_SAFELINE_CERTIFICATEID="your-cerficiate-id" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("CERTIFICATEID: %v", fCertificateId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ ServerUrl: fServerUrl, ApiToken: fApiToken, AllowInsecureConnections: true, diff --git a/internal/pkg/core/deployer/providers/ssh/defines.go b/internal/pkg/core/ssl-deployer/providers/ssh/defines.go similarity index 100% rename from internal/pkg/core/deployer/providers/ssh/defines.go rename to internal/pkg/core/ssl-deployer/providers/ssh/defines.go diff --git a/internal/pkg/core/deployer/providers/ssh/ssh.go b/internal/pkg/core/ssl-deployer/providers/ssh/ssh.go similarity index 95% rename from internal/pkg/core/deployer/providers/ssh/ssh.go rename to internal/pkg/core/ssl-deployer/providers/ssh/ssh.go index 04c96f33..558a2998 100644 --- a/internal/pkg/core/deployer/providers/ssh/ssh.go +++ b/internal/pkg/core/ssl-deployer/providers/ssh/ssh.go @@ -3,6 +3,7 @@ package ssh import ( "bytes" "context" + "errors" "fmt" "log/slog" "net" @@ -15,7 +16,7 @@ import ( "github.com/povsister/scp" "golang.org/x/crypto/ssh" - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" ) @@ -41,7 +42,7 @@ type JumpServerConfig struct { SshKeyPassphrase string `json:"sshKeyPassphrase,omitempty"` } -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // SSH 主机。 // 零值时默认值 "localhost"。 SshHost string `json:"sshHost,omitempty"` @@ -95,34 +96,33 @@ type DeployerConfig struct { JksStorepass string `json:"jksStorepass,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { // 提取服务器证书和中间证书 serverCertPEM, intermediaCertPEM, err := xcert.ExtractCertificatesFromPEM(certPEM) if err != nil { @@ -273,7 +273,7 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE } } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } func createSshClient(conn net.Conn, host string, port int32, authMethod string, username, password, key, keyPassphrase string) (*ssh.Client, error) { diff --git a/internal/pkg/core/deployer/providers/ssh/ssh_test.go b/internal/pkg/core/ssl-deployer/providers/ssh/ssh_test.go similarity index 73% rename from internal/pkg/core/deployer/providers/ssh/ssh_test.go rename to internal/pkg/core/ssl-deployer/providers/ssh/ssh_test.go index ae908185..564ab5f8 100644 --- a/internal/pkg/core/deployer/providers/ssh/ssh_test.go +++ b/internal/pkg/core/ssl-deployer/providers/ssh/ssh_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/ssh" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/ssh" ) var ( @@ -23,7 +23,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_SSH_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_SSH_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -39,14 +39,14 @@ func init() { Shell command to run this test: go test -v ./ssh_test.go -args \ - --CERTIMATE_DEPLOYER_SSH_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_SSH_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_SSH_SSHHOST="localhost" \ - --CERTIMATE_DEPLOYER_SSH_SSHPORT=22 \ - --CERTIMATE_DEPLOYER_SSH_SSHUSERNAME="root" \ - --CERTIMATE_DEPLOYER_SSH_SSHPASSWORD="password" \ - --CERTIMATE_DEPLOYER_SSH_OUTPUTCERTPATH="/path/to/your-output-cert.pem" \ - --CERTIMATE_DEPLOYER_SSH_OUTPUTKEYPATH="/path/to/your-output-key.pem" + --CERTIMATE_SSLDEPLOYER_SSH_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_SSH_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_SSH_SSHHOST="localhost" \ + --CERTIMATE_SSLDEPLOYER_SSH_SSHPORT=22 \ + --CERTIMATE_SSLDEPLOYER_SSH_SSHUSERNAME="root" \ + --CERTIMATE_SSLDEPLOYER_SSH_SSHPASSWORD="password" \ + --CERTIMATE_SSLDEPLOYER_SSH_OUTPUTCERTPATH="/path/to/your-output-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_SSH_OUTPUTKEYPATH="/path/to/your-output-key.pem" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -64,7 +64,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("OUTPUTKEYPATH: %v", fOutputKeyPath), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ SshHost: fSshHost, SshPort: int32(fSshPort), SshUsername: fSshUsername, diff --git a/internal/pkg/core/deployer/providers/tencentcloud-cdn/tencentcloud_cdn.go b/internal/pkg/core/ssl-deployer/providers/tencentcloud-cdn/tencentcloud_cdn.go similarity index 80% rename from internal/pkg/core/deployer/providers/tencentcloud-cdn/tencentcloud_cdn.go rename to internal/pkg/core/ssl-deployer/providers/tencentcloud-cdn/tencentcloud_cdn.go index b815ebf8..a475043d 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-cdn/tencentcloud_cdn.go +++ b/internal/pkg/core/ssl-deployer/providers/tencentcloud-cdn/tencentcloud_cdn.go @@ -14,12 +14,11 @@ import ( tcssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" "golang.org/x/exp/slices" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/tencentcloud-ssl" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/tencentcloud-ssl" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 腾讯云 SecretId。 SecretId string `json:"secretId"` // 腾讯云 SecretKey。 @@ -28,59 +27,63 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClients *wSdkClients - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClients *wSDKClients + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -type wSdkClients struct { +type wSDKClients struct { SSL *tcssl.Client CDN *tccdn.Client } -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - clients, err := createSdkClients(config.SecretId, config.SecretKey) + clients, err := createSDKClients(config.SecretId, config.SecretKey) if err != nil { - return nil, fmt.Errorf("failed to create sdk clients: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ SecretId: config.SecretId, SecretKey: config.SecretKey, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClients: clients, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClients: clients, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 SSL - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + if d.config.Domain == "" { + return nil, errors.New("config `domain` is required") + } + + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -179,10 +182,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE } } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func (d *DeployerProvider) getDomainsByCertificateId(cloudCertId string) ([]string, error) { +func (d *SSLDeployerProvider) getDomainsByCertificateId(cloudCertId string) ([]string, error) { // 获取证书中的可用域名 // REF: https://cloud.tencent.com/document/product/228/42491 describeCertDomainsReq := tccdn.NewDescribeCertDomainsRequest() @@ -204,8 +207,8 @@ func (d *DeployerProvider) getDomainsByCertificateId(cloudCertId string) ([]stri return domains, nil } -func (d *DeployerProvider) getDeployedDomainsByCertificateId(cloudCertId string) ([]string, error) { - // 根据证书查询关联 CDN 域名 +func (d *SSLDeployerProvider) getDeployedDomainsByCertificateId(cloudCertId string) ([]string, error) { + // 根据证书查询关联资源 // REF: https://cloud.tencent.com/document/product/400/62674 describeDeployedResourcesReq := tcssl.NewDescribeDeployedResourcesRequest() describeDeployedResourcesReq.CertificateIds = common.StringPtrs([]string{cloudCertId}) @@ -228,7 +231,7 @@ func (d *DeployerProvider) getDeployedDomainsByCertificateId(cloudCertId string) return domains, nil } -func createSdkClients(secretId, secretKey string) (*wSdkClients, error) { +func createSDKClients(secretId, secretKey string) (*wSDKClients, error) { credential := common.NewCredential(secretId, secretKey) sslClient, err := tcssl.NewClient(credential, "", profile.NewClientProfile()) @@ -241,7 +244,7 @@ func createSdkClients(secretId, secretKey string) (*wSdkClients, error) { return nil, err } - return &wSdkClients{ + return &wSDKClients{ SSL: sslClient, CDN: cdnClient, }, nil diff --git a/internal/pkg/core/deployer/providers/tencentcloud-cdn/tencentcloud_cdn_test.go b/internal/pkg/core/ssl-deployer/providers/tencentcloud-cdn/tencentcloud_cdn_test.go similarity index 69% rename from internal/pkg/core/deployer/providers/tencentcloud-cdn/tencentcloud_cdn_test.go rename to internal/pkg/core/ssl-deployer/providers/tencentcloud-cdn/tencentcloud_cdn_test.go index 95285930..a89d5f9a 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-cdn/tencentcloud_cdn_test.go +++ b/internal/pkg/core/ssl-deployer/providers/tencentcloud-cdn/tencentcloud_cdn_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/tencentcloud-cdn" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/tencentcloud-cdn" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_TENCENTCLOUDCDN_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_TENCENTCLOUDCDN_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./tencentcloud_cdn_test.go -args \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDCDN_SECRETID="your-secret-id" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDCDN_SECRETKEY="your-secret-key" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDCDN_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDCDN_SECRETID="your-secret-id" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDCDN_SECRETKEY="your-secret-key" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDCDN_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ SecretId: fSecretId, SecretKey: fSecretKey, Domain: fDomain, diff --git a/internal/pkg/core/deployer/providers/tencentcloud-clb/consts.go b/internal/pkg/core/ssl-deployer/providers/tencentcloud-clb/consts.go similarity index 100% rename from internal/pkg/core/deployer/providers/tencentcloud-clb/consts.go rename to internal/pkg/core/ssl-deployer/providers/tencentcloud-clb/consts.go diff --git a/internal/pkg/core/deployer/providers/tencentcloud-clb/tencentcloud_clb.go b/internal/pkg/core/ssl-deployer/providers/tencentcloud-clb/tencentcloud_clb.go similarity index 85% rename from internal/pkg/core/deployer/providers/tencentcloud-clb/tencentcloud_clb.go rename to internal/pkg/core/ssl-deployer/providers/tencentcloud-clb/tencentcloud_clb.go index 7179ee71..1f840b29 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-clb/tencentcloud_clb.go +++ b/internal/pkg/core/ssl-deployer/providers/tencentcloud-clb/tencentcloud_clb.go @@ -12,12 +12,11 @@ import ( "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" tcssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/tencentcloud-ssl" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/tencentcloud-ssl" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 腾讯云 SecretId。 SecretId string `json:"secretId"` // 腾讯云 SecretKey。 @@ -37,59 +36,59 @@ type DeployerConfig struct { Domain string `json:"domain,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClients *wSdkClients - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClients *wSDKClients + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -type wSdkClients struct { +type wSDKClients struct { SSL *tcssl.Client CLB *tcclb.Client } -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - clients, err := createSdkClients(config.SecretId, config.SecretKey, config.Region) + clients, err := createSDKClients(config.SecretId, config.SecretKey, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk clients: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ SecretId: config.SecretId, SecretKey: config.SecretKey, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClients: clients, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClients: clients, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 SSL - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -122,10 +121,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("unsupported resource type '%s'", d.config.ResourceType) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func (d *DeployerProvider) deployViaSslService(ctx context.Context, cloudCertId string) error { +func (d *SSLDeployerProvider) deployViaSslService(ctx context.Context, cloudCertId string) error { if d.config.LoadbalancerId == "" { return errors.New("config `loadbalancerId` is required") } @@ -198,7 +197,7 @@ func (d *DeployerProvider) deployViaSslService(ctx context.Context, cloudCertId return nil } -func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId string) error { +func (d *SSLDeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId string) error { if d.config.LoadbalancerId == "" { return errors.New("config `loadbalancerId` is required") } @@ -250,7 +249,7 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId return nil } -func (d *DeployerProvider) deployToListener(ctx context.Context, cloudCertId string) error { +func (d *SSLDeployerProvider) deployToListener(ctx context.Context, cloudCertId string) error { if d.config.LoadbalancerId == "" { return errors.New("config `loadbalancerId` is required") } @@ -266,7 +265,7 @@ func (d *DeployerProvider) deployToListener(ctx context.Context, cloudCertId str return nil } -func (d *DeployerProvider) deployToRuleDomain(ctx context.Context, cloudCertId string) error { +func (d *SSLDeployerProvider) deployToRuleDomain(ctx context.Context, cloudCertId string) error { if d.config.LoadbalancerId == "" { return errors.New("config `loadbalancerId` is required") } @@ -296,8 +295,8 @@ func (d *DeployerProvider) deployToRuleDomain(ctx context.Context, cloudCertId s return nil } -func (d *DeployerProvider) modifyListenerCertificate(ctx context.Context, cloudLoadbalancerId, cloudListenerId, cloudCertId string) error { - // 查询监听器列表 +func (d *SSLDeployerProvider) modifyListenerCertificate(ctx context.Context, cloudLoadbalancerId, cloudListenerId, cloudCertId string) error { + // 查询负载均衡的监听器列表 // REF: https://cloud.tencent.com/document/api/214/30686 describeListenersReq := tcclb.NewDescribeListenersRequest() describeListenersReq.LoadBalancerId = common.StringPtr(cloudLoadbalancerId) @@ -331,7 +330,7 @@ func (d *DeployerProvider) modifyListenerCertificate(ctx context.Context, cloudL return nil } -func createSdkClients(secretId, secretKey, region string) (*wSdkClients, error) { +func createSDKClients(secretId, secretKey, region string) (*wSDKClients, error) { credential := common.NewCredential(secretId, secretKey) // 注意虽然官方文档中地域无需指定,但实际需要部署到 CLB 时必传 @@ -345,7 +344,7 @@ func createSdkClients(secretId, secretKey, region string) (*wSdkClients, error) return nil, err } - return &wSdkClients{ + return &wSDKClients{ SSL: sslClient, CLB: clbClient, }, nil diff --git a/internal/pkg/core/deployer/providers/tencentcloud-clb/tencentcloud_clb_test.go b/internal/pkg/core/ssl-deployer/providers/tencentcloud-clb/tencentcloud_clb_test.go similarity index 82% rename from internal/pkg/core/deployer/providers/tencentcloud-clb/tencentcloud_clb_test.go rename to internal/pkg/core/ssl-deployer/providers/tencentcloud-clb/tencentcloud_clb_test.go index 59cd9b8d..b9d913a5 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-clb/tencentcloud_clb_test.go +++ b/internal/pkg/core/ssl-deployer/providers/tencentcloud-clb/tencentcloud_clb_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/tencentcloud-clb" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/tencentcloud-clb" ) var ( @@ -23,7 +23,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_TENCENTCLOUDCDN_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_TENCENTCLOUDCDN_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -39,14 +39,14 @@ func init() { Shell command to run this test: go test -v ./tencentcloud_clb_test.go -args \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDCLB_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDCLB_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDCLB_SECRETID="your-secret-id" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDCLB_SECRETKEY="your-secret-key" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDCLB_REGION="ap-guangzhou" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDCLB_LOADBALANCERID="your-clb-lb-id" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDCLB_LISTENERID="your-clb-lbl-id" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDCLB_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDCLB_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDCLB_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDCLB_SECRETID="your-secret-id" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDCLB_SECRETKEY="your-secret-key" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDCLB_REGION="ap-guangzhou" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDCLB_LOADBALANCERID="your-clb-lb-id" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDCLB_LISTENERID="your-clb-lbl-id" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDCLB_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -64,7 +64,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ SecretId: fSecretId, SecretKey: fSecretKey, Region: fRegion, @@ -100,7 +100,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("LOADBALANCERID: %v", fLoadbalancerId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ SecretId: fSecretId, SecretKey: fSecretKey, Region: fRegion, @@ -135,7 +135,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("LISTENERID: %v", fListenerId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ SecretId: fSecretId, SecretKey: fSecretKey, Region: fRegion, @@ -172,7 +172,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ SecretId: fSecretId, SecretKey: fSecretKey, Region: fRegion, diff --git a/internal/pkg/core/deployer/providers/tencentcloud-cos/tencentcloud_cos.go b/internal/pkg/core/ssl-deployer/providers/tencentcloud-cos/tencentcloud_cos.go similarity index 76% rename from internal/pkg/core/deployer/providers/tencentcloud-cos/tencentcloud_cos.go rename to internal/pkg/core/ssl-deployer/providers/tencentcloud-cos/tencentcloud_cos.go index 537d2285..1fc61b2c 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-cos/tencentcloud_cos.go +++ b/internal/pkg/core/ssl-deployer/providers/tencentcloud-cos/tencentcloud_cos.go @@ -11,12 +11,11 @@ import ( "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" tcssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/tencentcloud-ssl" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/tencentcloud-ssl" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 腾讯云 SecretId。 SecretId string `json:"secretId"` // 腾讯云 SecretKey。 @@ -29,52 +28,52 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *tcssl.Client - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *tcssl.Client + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.SecretId, config.SecretKey, config.Region) + client, err := createSDKClient(config.SecretId, config.SecretKey, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ SecretId: config.SecretId, SecretKey: config.SecretKey, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { if d.config.Bucket == "" { return nil, errors.New("config `bucket` is required") } @@ -82,8 +81,8 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, errors.New("config `domain` is required") } - // 上传证书到 SSL - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -146,10 +145,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE time.Sleep(time.Second * 5) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(secretId, secretKey, region string) (*tcssl.Client, error) { +func createSDKClient(secretId, secretKey, region string) (*tcssl.Client, error) { credential := common.NewCredential(secretId, secretKey) client, err := tcssl.NewClient(credential, region, profile.NewClientProfile()) if err != nil { diff --git a/internal/pkg/core/deployer/providers/tencentcloud-cos/tencentcloud_cos_test.go b/internal/pkg/core/ssl-deployer/providers/tencentcloud-cos/tencentcloud_cos_test.go similarity index 69% rename from internal/pkg/core/deployer/providers/tencentcloud-cos/tencentcloud_cos_test.go rename to internal/pkg/core/ssl-deployer/providers/tencentcloud-cos/tencentcloud_cos_test.go index 24e41d47..7cd95415 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-cos/tencentcloud_cos_test.go +++ b/internal/pkg/core/ssl-deployer/providers/tencentcloud-cos/tencentcloud_cos_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/tencentcloud-cos" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/tencentcloud-cos" ) var ( @@ -22,7 +22,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_TENCENTCLOUDCOS_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_TENCENTCLOUDCOS_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -37,13 +37,13 @@ func init() { Shell command to run this test: go test -v ./tencentcloud_cos_test.go -args \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDCOS_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDCOS_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDCOS_SECRETID="your-secret-id" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDCOS_SECRETKEY="your-secret-key" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDCOS_REGION="ap-guangzhou" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDCOS_BUCKET="your-cos-bucket" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDCOS_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDCOS_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDCOS_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDCOS_SECRETID="your-secret-id" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDCOS_SECRETKEY="your-secret-key" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDCOS_REGION="ap-guangzhou" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDCOS_BUCKET="your-cos-bucket" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDCOS_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -60,7 +60,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ SecretId: fSecretId, SecretKey: fSecretKey, Region: fRegion, diff --git a/internal/pkg/core/deployer/providers/tencentcloud-css/tencentcloud_css.go b/internal/pkg/core/ssl-deployer/providers/tencentcloud-css/tencentcloud_css.go similarity index 57% rename from internal/pkg/core/deployer/providers/tencentcloud-css/tencentcloud_css.go rename to internal/pkg/core/ssl-deployer/providers/tencentcloud-css/tencentcloud_css.go index a9056719..0675a279 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-css/tencentcloud_css.go +++ b/internal/pkg/core/ssl-deployer/providers/tencentcloud-css/tencentcloud_css.go @@ -2,6 +2,7 @@ package tencentcloudcss import ( "context" + "errors" "fmt" "log/slog" @@ -9,12 +10,11 @@ import ( "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" tclive "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/tencentcloud-ssl" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/tencentcloud-ssl" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 腾讯云 SecretId。 SecretId string `json:"secretId"` // 腾讯云 SecretKey。 @@ -23,54 +23,58 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *tclive.Client - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *tclive.Client + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.SecretId, config.SecretKey) + client, err := createSDKClient(config.SecretId, config.SecretKey) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ SecretId: config.SecretId, SecretKey: config.SecretKey, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 SSL - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + if d.config.Domain == "" { + return nil, errors.New("config `domain` is required") + } + + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -93,10 +97,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'live.ModifyLiveDomainCertBindings': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(secretId, secretKey string) (*tclive.Client, error) { +func createSDKClient(secretId, secretKey string) (*tclive.Client, error) { credential := common.NewCredential(secretId, secretKey) client, err := tclive.NewClient(credential, "", profile.NewClientProfile()) diff --git a/internal/pkg/core/deployer/providers/tencentcloud-css/tencentcloud_css_test.go b/internal/pkg/core/ssl-deployer/providers/tencentcloud-css/tencentcloud_css_test.go similarity index 69% rename from internal/pkg/core/deployer/providers/tencentcloud-css/tencentcloud_css_test.go rename to internal/pkg/core/ssl-deployer/providers/tencentcloud-css/tencentcloud_css_test.go index 4aaa344a..09a5e586 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-css/tencentcloud_css_test.go +++ b/internal/pkg/core/ssl-deployer/providers/tencentcloud-css/tencentcloud_css_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/tencentcloud-css" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/tencentcloud-css" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_TENCENTCLOUDCSS_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_TENCENTCLOUDCSS_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./tencentcloud_css_test.go -args \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDCSS_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDCSS_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDCSS_SECRETID="your-secret-id" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDCSS_SECRETKEY="your-secret-key" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDCSS_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDCSS_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDCSS_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDCSS_SECRETID="your-secret-id" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDCSS_SECRETKEY="your-secret-key" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDCSS_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ SecretId: fSecretId, SecretKey: fSecretKey, Domain: fDomain, diff --git a/internal/pkg/core/deployer/providers/tencentcloud-ecdn/tencentcloud_ecdn.go b/internal/pkg/core/ssl-deployer/providers/tencentcloud-ecdn/tencentcloud_ecdn.go similarity index 78% rename from internal/pkg/core/deployer/providers/tencentcloud-ecdn/tencentcloud_ecdn.go rename to internal/pkg/core/ssl-deployer/providers/tencentcloud-ecdn/tencentcloud_ecdn.go index c029c667..64baeece 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-ecdn/tencentcloud_ecdn.go +++ b/internal/pkg/core/ssl-deployer/providers/tencentcloud-ecdn/tencentcloud_ecdn.go @@ -13,12 +13,11 @@ import ( "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" tcssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/tencentcloud-ssl" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/tencentcloud-ssl" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 腾讯云 SecretId。 SecretId string `json:"secretId"` // 腾讯云 SecretKey。 @@ -27,59 +26,63 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClients *wSdkClients - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClients *wSDKClients + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -type wSdkClients struct { +type wSDKClients struct { SSL *tcssl.Client CDN *tccdn.Client } -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - clients, err := createSdkClients(config.SecretId, config.SecretKey) + clients, err := createSDKClients(config.SecretId, config.SecretKey) if err != nil { - return nil, fmt.Errorf("failed to create sdk clients: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ SecretId: config.SecretId, SecretKey: config.SecretKey, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClients: clients, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClients: clients, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 SSL - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + if d.config.Domain == "" { + return nil, errors.New("config `domain` is required") + } + + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -162,10 +165,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE } } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func (d *DeployerProvider) getDomainsByCertificateId(cloudCertId string) ([]string, error) { +func (d *SSLDeployerProvider) getDomainsByCertificateId(cloudCertId string) ([]string, error) { // 获取证书中的可用域名 // REF: https://cloud.tencent.com/document/product/228/42491 describeCertDomainsReq := tccdn.NewDescribeCertDomainsRequest() @@ -187,7 +190,7 @@ func (d *DeployerProvider) getDomainsByCertificateId(cloudCertId string) ([]stri return domains, nil } -func createSdkClients(secretId, secretKey string) (*wSdkClients, error) { +func createSDKClients(secretId, secretKey string) (*wSDKClients, error) { credential := common.NewCredential(secretId, secretKey) sslClient, err := tcssl.NewClient(credential, "", profile.NewClientProfile()) @@ -200,7 +203,7 @@ func createSdkClients(secretId, secretKey string) (*wSdkClients, error) { return nil, err } - return &wSdkClients{ + return &wSDKClients{ SSL: sslClient, CDN: cdnClient, }, nil diff --git a/internal/pkg/core/deployer/providers/tencentcloud-ecdn/tencentcloud_ecdn_test.go b/internal/pkg/core/ssl-deployer/providers/tencentcloud-ecdn/tencentcloud_ecdn_test.go similarity index 69% rename from internal/pkg/core/deployer/providers/tencentcloud-ecdn/tencentcloud_ecdn_test.go rename to internal/pkg/core/ssl-deployer/providers/tencentcloud-ecdn/tencentcloud_ecdn_test.go index 1cffd10d..7d4d94d5 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-ecdn/tencentcloud_ecdn_test.go +++ b/internal/pkg/core/ssl-deployer/providers/tencentcloud-ecdn/tencentcloud_ecdn_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/tencentcloud-ecdn" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/tencentcloud-ecdn" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_TENCENTCLOUDECDN_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_TENCENTCLOUDECDN_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./tencentcloud_ecdn_test.go -args \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDECDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDECDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDECDN_SECRETID="your-secret-id" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDECDN_SECRETKEY="your-secret-key" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDECDN_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDECDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDECDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDECDN_SECRETID="your-secret-id" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDECDN_SECRETKEY="your-secret-key" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDECDN_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ SecretId: fSecretId, SecretKey: fSecretKey, Domain: fDomain, diff --git a/internal/pkg/core/deployer/providers/tencentcloud-eo/tencentcloud_eo.go b/internal/pkg/core/ssl-deployer/providers/tencentcloud-eo/tencentcloud_eo.go similarity index 61% rename from internal/pkg/core/deployer/providers/tencentcloud-eo/tencentcloud_eo.go rename to internal/pkg/core/ssl-deployer/providers/tencentcloud-eo/tencentcloud_eo.go index 1a4a199b..08123b8b 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-eo/tencentcloud_eo.go +++ b/internal/pkg/core/ssl-deployer/providers/tencentcloud-eo/tencentcloud_eo.go @@ -11,12 +11,11 @@ import ( tcssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" tcteo "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo/v20220901" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/tencentcloud-ssl" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/tencentcloud-ssl" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 腾讯云 SecretId。 SecretId string `json:"secretId"` // 腾讯云 SecretKey。 @@ -27,63 +26,66 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClients *wSdkClients - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClients *wSDKClients + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -type wSdkClients struct { +type wSDKClients struct { SSL *tcssl.Client TEO *tcteo.Client } -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - clients, err := createSdkClients(config.SecretId, config.SecretKey) + clients, err := createSDKClients(config.SecretId, config.SecretKey) if err != nil { - return nil, fmt.Errorf("failed to create sdk clients: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ SecretId: config.SecretId, SecretKey: config.SecretKey, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClients: clients, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClients: clients, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { if d.config.ZoneId == "" { return nil, errors.New("config `zoneId` is required") } + if d.config.Domain == "" { + return nil, errors.New("config `domain` is required") + } - // 上传证书到 SSL - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -103,10 +105,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'teo.ModifyHostsCertificate': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClients(secretId, secretKey string) (*wSdkClients, error) { +func createSDKClients(secretId, secretKey string) (*wSDKClients, error) { credential := common.NewCredential(secretId, secretKey) sslClient, err := tcssl.NewClient(credential, "", profile.NewClientProfile()) @@ -119,7 +121,7 @@ func createSdkClients(secretId, secretKey string) (*wSdkClients, error) { return nil, err } - return &wSdkClients{ + return &wSDKClients{ SSL: sslClient, TEO: teoClient, }, nil diff --git a/internal/pkg/core/deployer/providers/tencentcloud-eo/tencentcloud_eo_test.go b/internal/pkg/core/ssl-deployer/providers/tencentcloud-eo/tencentcloud_eo_test.go similarity index 69% rename from internal/pkg/core/deployer/providers/tencentcloud-eo/tencentcloud_eo_test.go rename to internal/pkg/core/ssl-deployer/providers/tencentcloud-eo/tencentcloud_eo_test.go index 81c3b9da..ec3813d2 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-eo/tencentcloud_eo_test.go +++ b/internal/pkg/core/ssl-deployer/providers/tencentcloud-eo/tencentcloud_eo_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/tencentcloud-eo" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/tencentcloud-eo" ) var ( @@ -21,7 +21,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_TENCENTCLOUDEO_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_TENCENTCLOUDEO_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -35,12 +35,12 @@ func init() { Shell command to run this test: go test -v ./tencentcloud_eo_test.go -args \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDEO_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDEO_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDEO_SECRETID="your-secret-id" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDEO_SECRETKEY="your-secret-key" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDEO_ZONEID="your-zone-id" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDEO_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDEO_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDEO_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDEO_SECRETID="your-secret-id" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDEO_SECRETKEY="your-secret-key" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDEO_ZONEID="your-zone-id" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDEO_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -56,7 +56,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ SecretId: fSecretId, SecretKey: fSecretKey, ZoneId: fZoneId, diff --git a/internal/pkg/core/deployer/providers/tencentcloud-gaap/consts.go b/internal/pkg/core/ssl-deployer/providers/tencentcloud-gaap/consts.go similarity index 100% rename from internal/pkg/core/deployer/providers/tencentcloud-gaap/consts.go rename to internal/pkg/core/ssl-deployer/providers/tencentcloud-gaap/consts.go diff --git a/internal/pkg/core/deployer/providers/tencentcloud-gaap/tencentcloud_gaap.go b/internal/pkg/core/ssl-deployer/providers/tencentcloud-gaap/tencentcloud_gaap.go similarity index 69% rename from internal/pkg/core/deployer/providers/tencentcloud-gaap/tencentcloud_gaap.go rename to internal/pkg/core/ssl-deployer/providers/tencentcloud-gaap/tencentcloud_gaap.go index 90076a26..5a605b8d 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-gaap/tencentcloud_gaap.go +++ b/internal/pkg/core/ssl-deployer/providers/tencentcloud-gaap/tencentcloud_gaap.go @@ -10,13 +10,12 @@ import ( "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" tcgaap "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/gaap/v20180529" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/tencentcloud-ssl" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/tencentcloud-ssl" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 腾讯云 SecretId。 SecretId string `json:"secretId"` // 腾讯云 SecretKey。 @@ -31,54 +30,54 @@ type DeployerConfig struct { ListenerId string `json:"listenerId,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *tcgaap.Client - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *tcgaap.Client + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClients(config.SecretId, config.SecretKey) + client, err := createSDKClients(config.SecretId, config.SecretKey) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ SecretId: config.SecretId, SecretKey: config.SecretKey, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 SSL - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -96,10 +95,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("unsupported resource type '%s'", d.config.ResourceType) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func (d *DeployerProvider) deployToListener(ctx context.Context, cloudCertId string) error { +func (d *SSLDeployerProvider) deployToListener(ctx context.Context, cloudCertId string) error { if d.config.ListenerId == "" { return errors.New("config `listenerId` is required") } @@ -112,7 +111,7 @@ func (d *DeployerProvider) deployToListener(ctx context.Context, cloudCertId str return nil } -func (d *DeployerProvider) modifyHttpsListenerCertificate(ctx context.Context, cloudListenerId, cloudCertId string) error { +func (d *SSLDeployerProvider) modifyHttpsListenerCertificate(ctx context.Context, cloudListenerId, cloudCertId string) error { // 查询 HTTPS 监听器信息 // REF: https://cloud.tencent.com/document/product/608/37001 describeHTTPSListenersReq := tcgaap.NewDescribeHTTPSListenersRequest() @@ -142,7 +141,7 @@ func (d *DeployerProvider) modifyHttpsListenerCertificate(ctx context.Context, c return nil } -func createSdkClients(secretId, secretKey string) (*tcgaap.Client, error) { +func createSDKClients(secretId, secretKey string) (*tcgaap.Client, error) { credential := common.NewCredential(secretId, secretKey) client, err := tcgaap.NewClient(credential, "", profile.NewClientProfile()) diff --git a/internal/pkg/core/deployer/providers/tencentcloud-gaap/tencentcloud_gaap_test.go b/internal/pkg/core/ssl-deployer/providers/tencentcloud-gaap/tencentcloud_gaap_test.go similarity index 70% rename from internal/pkg/core/deployer/providers/tencentcloud-gaap/tencentcloud_gaap_test.go rename to internal/pkg/core/ssl-deployer/providers/tencentcloud-gaap/tencentcloud_gaap_test.go index d25d3a9a..72d35ad8 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-gaap/tencentcloud_gaap_test.go +++ b/internal/pkg/core/ssl-deployer/providers/tencentcloud-gaap/tencentcloud_gaap_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/tencentcloud-gaap" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/tencentcloud-gaap" ) var ( @@ -21,7 +21,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_TENCENTCLOUDCDN_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_TENCENTCLOUDCDN_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -35,12 +35,12 @@ func init() { Shell command to run this test: go test -v ./tencentcloud_gaap_test.go -args \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDGAAP_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDGAAP_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDGAAP_SECRETID="your-secret-id" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDGAAP_SECRETKEY="your-secret-key" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDGAAP_PROXYID="your-gaap-group-id" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDGAAP_LISTENERID="your-clb-listener-id" + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDGAAP_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDGAAP_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDGAAP_SECRETID="your-secret-id" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDGAAP_SECRETKEY="your-secret-key" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDGAAP_PROXYID="your-gaap-group-id" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDGAAP_LISTENERID="your-clb-listener-id" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -56,7 +56,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("LISTENERID: %v", fListenerId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ SecretId: fSecretId, SecretKey: fSecretKey, ResourceType: provider.RESOURCE_TYPE_LISTENER, diff --git a/internal/pkg/core/deployer/providers/tencentcloud-scf/tencentcloud_scf.go b/internal/pkg/core/ssl-deployer/providers/tencentcloud-scf/tencentcloud_scf.go similarity index 62% rename from internal/pkg/core/deployer/providers/tencentcloud-scf/tencentcloud_scf.go rename to internal/pkg/core/ssl-deployer/providers/tencentcloud-scf/tencentcloud_scf.go index a0967f4e..5923f6db 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-scf/tencentcloud_scf.go +++ b/internal/pkg/core/ssl-deployer/providers/tencentcloud-scf/tencentcloud_scf.go @@ -2,6 +2,7 @@ package tencentcloudscf import ( "context" + "errors" "fmt" "log/slog" @@ -9,12 +10,11 @@ import ( "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" tcscf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf/v20180416" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/tencentcloud-ssl" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/tencentcloud-ssl" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 腾讯云 SecretId。 SecretId string `json:"secretId"` // 腾讯云 SecretKey。 @@ -25,52 +25,56 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *tcscf.Client - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *tcscf.Client + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.SecretId, config.SecretKey, config.Region) + client, err := createSDKClient(config.SecretId, config.SecretKey, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ SecretId: config.SecretId, SecretKey: config.SecretKey, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + if d.config.Domain == "" { + return nil, errors.New("config `domain` is required") + } + // 查看云函数自定义域名详情 // REF: https://cloud.tencent.com/document/product/583/111924 getCustomDomainReq := tcscf.NewGetCustomDomainRequest() @@ -81,8 +85,8 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'scf.GetCustomDomain': %w", err) } - // 上传证书到 SSL - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -103,10 +107,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'scf.UpdateCustomDomain': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(secretId, secretKey, region string) (*tcscf.Client, error) { +func createSDKClient(secretId, secretKey, region string) (*tcscf.Client, error) { credential := common.NewCredential(secretId, secretKey) client, err := tcscf.NewClient(credential, region, profile.NewClientProfile()) if err != nil { diff --git a/internal/pkg/core/deployer/providers/tencentcloud-scf/tencentcloud_scf_test.go b/internal/pkg/core/ssl-deployer/providers/tencentcloud-scf/tencentcloud_scf_test.go similarity index 69% rename from internal/pkg/core/deployer/providers/tencentcloud-scf/tencentcloud_scf_test.go rename to internal/pkg/core/ssl-deployer/providers/tencentcloud-scf/tencentcloud_scf_test.go index f0aa0cfe..854b8cf5 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-scf/tencentcloud_scf_test.go +++ b/internal/pkg/core/ssl-deployer/providers/tencentcloud-scf/tencentcloud_scf_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/tencentcloud-scf" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/tencentcloud-scf" ) var ( @@ -21,7 +21,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_TENCENTCLOUDSCF_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_TENCENTCLOUDSCF_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -35,12 +35,12 @@ func init() { Shell command to run this test: go test -v ./tencentcloud_scf_test.go -args \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDSCF_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDSCF_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDSCF_SECRETID="your-secret-id" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDSCF_SECRETKEY="your-secret-key" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDSCF_REGION="ap-guangzhou" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDSCF_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDSCF_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDSCF_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDSCF_SECRETID="your-secret-id" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDSCF_SECRETKEY="your-secret-key" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDSCF_REGION="ap-guangzhou" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDSCF_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -56,7 +56,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ SecretId: fSecretId, SecretKey: fSecretKey, Region: fRegion, diff --git a/internal/pkg/core/deployer/providers/tencentcloud-ssl-deploy/tencentcloud_ssl_deploy.go b/internal/pkg/core/ssl-deployer/providers/tencentcloud-ssl-deploy/tencentcloud_ssl_deploy.go similarity index 76% rename from internal/pkg/core/deployer/providers/tencentcloud-ssl-deploy/tencentcloud_ssl_deploy.go rename to internal/pkg/core/ssl-deployer/providers/tencentcloud-ssl-deploy/tencentcloud_ssl_deploy.go index db6617d5..74b9b479 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-ssl-deploy/tencentcloud_ssl_deploy.go +++ b/internal/pkg/core/ssl-deployer/providers/tencentcloud-ssl-deploy/tencentcloud_ssl_deploy.go @@ -11,12 +11,11 @@ import ( "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" tcssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/tencentcloud-ssl" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/tencentcloud-ssl" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 腾讯云 SecretId。 SecretId string `json:"secretId"` // 腾讯云 SecretKey。 @@ -29,52 +28,52 @@ type DeployerConfig struct { ResourceIds []string `json:"resourceIds"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *tcssl.Client - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *tcssl.Client + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.SecretId, config.SecretKey, config.Region) + client, err := createSDKClient(config.SecretId, config.SecretKey, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ SecretId: config.SecretId, SecretKey: config.SecretKey, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { if d.config.ResourceType == "" { return nil, errors.New("config `resourceType` is required") } @@ -82,8 +81,8 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, errors.New("config `resourceIds` is required") } - // 上传证书到 SSL - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -148,10 +147,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE time.Sleep(time.Second * 5) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(secretId, secretKey, region string) (*tcssl.Client, error) { +func createSDKClient(secretId, secretKey, region string) (*tcssl.Client, error) { credential := common.NewCredential(secretId, secretKey) client, err := tcssl.NewClient(credential, region, profile.NewClientProfile()) diff --git a/internal/pkg/core/ssl-deployer/providers/tencentcloud-ssl/tencentcloud_ssl.go b/internal/pkg/core/ssl-deployer/providers/tencentcloud-ssl/tencentcloud_ssl.go new file mode 100644 index 00000000..cc2e022b --- /dev/null +++ b/internal/pkg/core/ssl-deployer/providers/tencentcloud-ssl/tencentcloud_ssl.go @@ -0,0 +1,68 @@ +package tencentcloudssl + +import ( + "context" + "errors" + "fmt" + "log/slog" + + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/tencentcloud-ssl" +) + +type SSLDeployerProviderConfig struct { + // 腾讯云 SecretId。 + SecretId string `json:"secretId"` + // 腾讯云 SecretKey。 + SecretKey string `json:"secretKey"` +} + +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sslManager core.SSLManager +} + +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) + +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { + if config == nil { + return nil, errors.New("the configuration of the ssl deployer provider is nil") + } + + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ + SecretId: config.SecretId, + SecretKey: config.SecretKey, + }) + if err != nil { + return nil, fmt.Errorf("could not create ssl manager: %w", err) + } + + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sslManager: sslmgr, + }, nil +} + +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { + if logger == nil { + d.logger = slog.New(slog.DiscardHandler) + } else { + d.logger = logger + } + + d.sslManager.SetLogger(logger) +} + +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) + if err != nil { + return nil, fmt.Errorf("failed to upload certificate file: %w", err) + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) + } + + return &core.SSLDeployResult{}, nil +} diff --git a/internal/pkg/core/deployer/providers/tencentcloud-vod/tencentcloud_vod.go b/internal/pkg/core/ssl-deployer/providers/tencentcloud-vod/tencentcloud_vod.go similarity index 58% rename from internal/pkg/core/deployer/providers/tencentcloud-vod/tencentcloud_vod.go rename to internal/pkg/core/ssl-deployer/providers/tencentcloud-vod/tencentcloud_vod.go index b7c2a3ad..923794bd 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-vod/tencentcloud_vod.go +++ b/internal/pkg/core/ssl-deployer/providers/tencentcloud-vod/tencentcloud_vod.go @@ -2,6 +2,7 @@ package tencentcloudvod import ( "context" + "errors" "fmt" "log/slog" @@ -9,12 +10,11 @@ import ( "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" tcvod "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod/v20180717" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/tencentcloud-ssl" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/tencentcloud-ssl" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 腾讯云 SecretId。 SecretId string `json:"secretId"` // 腾讯云 SecretKey。 @@ -25,54 +25,58 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *tcvod.Client - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *tcvod.Client + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.SecretId, config.SecretKey) + client, err := createSDKClient(config.SecretId, config.SecretKey) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ SecretId: config.SecretId, SecretKey: config.SecretKey, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 SSL - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + if d.config.Domain == "" { + return nil, errors.New("config `domain` is required") + } + + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -94,10 +98,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'vod.SetVodDomainCertificate': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(secretId, secretKey string) (*tcvod.Client, error) { +func createSDKClient(secretId, secretKey string) (*tcvod.Client, error) { credential := common.NewCredential(secretId, secretKey) client, err := tcvod.NewClient(credential, "", profile.NewClientProfile()) if err != nil { diff --git a/internal/pkg/core/deployer/providers/tencentcloud-vod/tencentcloud_vod_test.go b/internal/pkg/core/ssl-deployer/providers/tencentcloud-vod/tencentcloud_vod_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/tencentcloud-vod/tencentcloud_vod_test.go rename to internal/pkg/core/ssl-deployer/providers/tencentcloud-vod/tencentcloud_vod_test.go index 52382808..ff2fac3e 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-vod/tencentcloud_vod_test.go +++ b/internal/pkg/core/ssl-deployer/providers/tencentcloud-vod/tencentcloud_vod_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/tencentcloud-vod" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/tencentcloud-vod" ) var ( @@ -22,7 +22,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_TENCENTCLOUDVOD_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_TENCENTCLOUDVOD_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -37,12 +37,12 @@ func init() { Shell command to run this test: go test -v ./tencentcloud_vod_test.go -args \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDVOD_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDVOD_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDVOD_SECRETID="your-secret-id" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDVOD_SECRETKEY="your-secret-key" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDVOD_SUBAPPID="your-app-id" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDVOD_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDVOD_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDVOD_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDVOD_SECRETID="your-secret-id" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDVOD_SECRETKEY="your-secret-key" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDVOD_SUBAPPID="your-app-id" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDVOD_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -58,7 +58,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("INSTANCEID: %v", fInstanceId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ SecretId: fSecretId, SecretKey: fSecretKey, SubAppId: fSubAppId, diff --git a/internal/pkg/core/deployer/providers/tencentcloud-waf/tencentcloud_waf.go b/internal/pkg/core/ssl-deployer/providers/tencentcloud-waf/tencentcloud_waf.go similarity index 70% rename from internal/pkg/core/deployer/providers/tencentcloud-waf/tencentcloud_waf.go rename to internal/pkg/core/ssl-deployer/providers/tencentcloud-waf/tencentcloud_waf.go index 1c8e7272..78e18e50 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-waf/tencentcloud_waf.go +++ b/internal/pkg/core/ssl-deployer/providers/tencentcloud-waf/tencentcloud_waf.go @@ -10,12 +10,11 @@ import ( "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" tcwaf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/tencentcloud-ssl" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/tencentcloud-ssl" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 腾讯云 SecretId。 SecretId string `json:"secretId"` // 腾讯云 SecretKey。 @@ -30,52 +29,52 @@ type DeployerConfig struct { InstanceId string `json:"instanceId"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *tcwaf.Client - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *tcwaf.Client + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.SecretId, config.SecretKey, config.Region) + client, err := createSDKClient(config.SecretId, config.SecretKey, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ SecretId: config.SecretId, SecretKey: config.SecretKey, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { if d.config.Domain == "" { return nil, errors.New("config `domain` is required") } @@ -86,8 +85,8 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, errors.New("config `instanceId` is required") } - // 上传证书到 SSL - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -120,10 +119,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'waf.ModifySpartaProtection': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(secretId, secretKey, region string) (*tcwaf.Client, error) { +func createSDKClient(secretId, secretKey, region string) (*tcwaf.Client, error) { credential := common.NewCredential(secretId, secretKey) client, err := tcwaf.NewClient(credential, region, profile.NewClientProfile()) if err != nil { diff --git a/internal/pkg/core/deployer/providers/tencentcloud-waf/tencentcloud_waf_test.go b/internal/pkg/core/ssl-deployer/providers/tencentcloud-waf/tencentcloud_waf_test.go similarity index 69% rename from internal/pkg/core/deployer/providers/tencentcloud-waf/tencentcloud_waf_test.go rename to internal/pkg/core/ssl-deployer/providers/tencentcloud-waf/tencentcloud_waf_test.go index 8cb63b7d..1d2cab74 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-waf/tencentcloud_waf_test.go +++ b/internal/pkg/core/ssl-deployer/providers/tencentcloud-waf/tencentcloud_waf_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/tencentcloud-waf" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/tencentcloud-waf" ) var ( @@ -23,7 +23,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_TENCENTCLOUDWAF_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_TENCENTCLOUDWAF_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -39,14 +39,14 @@ func init() { Shell command to run this test: go test -v ./tencentcloud_waf_test.go -args \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDWAF_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDWAF_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDWAF_SECRETID="your-secret-id" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDWAF_SECRETKEY="your-secret-key" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDWAF_REGION="ap-guangzhou" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDWAF_DOMAIN="example.com" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDWAF_DOMAINID="your-domain-id" \ - --CERTIMATE_DEPLOYER_TENCENTCLOUDWAF_INSTANCEID="your-instance-id" + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDWAF_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDWAF_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDWAF_SECRETID="your-secret-id" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDWAF_SECRETKEY="your-secret-key" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDWAF_REGION="ap-guangzhou" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDWAF_DOMAIN="example.com" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDWAF_DOMAINID="your-domain-id" \ + --CERTIMATE_SSLDEPLOYER_TENCENTCLOUDWAF_INSTANCEID="your-instance-id" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -63,7 +63,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("INSTANCEID: %v", fInstanceId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ SecretId: fSecretId, SecretKey: fSecretKey, Region: fRegion, diff --git a/internal/pkg/core/deployer/providers/ucloud-ucdn/ucloud_ucdn.go b/internal/pkg/core/ssl-deployer/providers/ucloud-ucdn/ucloud_ucdn.go similarity index 69% rename from internal/pkg/core/deployer/providers/ucloud-ucdn/ucloud_ucdn.go rename to internal/pkg/core/ssl-deployer/providers/ucloud-ucdn/ucloud_ucdn.go index 532efb85..2a4d097d 100644 --- a/internal/pkg/core/deployer/providers/ucloud-ucdn/ucloud_ucdn.go +++ b/internal/pkg/core/ssl-deployer/providers/ucloud-ucdn/ucloud_ucdn.go @@ -11,12 +11,11 @@ import ( "github.com/ucloud/ucloud-sdk-go/ucloud" "github.com/ucloud/ucloud-sdk-go/ucloud/auth" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/ucloud-ussl" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/ucloud-ussl" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 优刻得 API 私钥。 PrivateKey string `json:"privateKey"` // 优刻得 API 公钥。 @@ -27,55 +26,59 @@ type DeployerConfig struct { DomainId string `json:"domainId"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *ucdn.UCDNClient - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *ucdn.UCDNClient + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.PrivateKey, config.PublicKey) + client, err := createSDKClient(config.PrivateKey, config.PublicKey) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ PrivateKey: config.PrivateKey, PublicKey: config.PublicKey, ProjectId: config.ProjectId, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 USSL - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + if d.config.DomainId == "" { + return nil, errors.New("config `domainId` is required") + } + + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -117,10 +120,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'ucdn.UpdateUcdnDomainHttpsConfigV2': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(privateKey, publicKey string) (*ucdn.UCDNClient, error) { +func createSDKClient(privateKey, publicKey string) (*ucdn.UCDNClient, error) { cfg := ucloud.NewConfig() credential := auth.NewCredential() diff --git a/internal/pkg/core/deployer/providers/ucloud-ucdn/ucloud_ucdn_test.go b/internal/pkg/core/ssl-deployer/providers/ucloud-ucdn/ucloud_ucdn_test.go similarity index 70% rename from internal/pkg/core/deployer/providers/ucloud-ucdn/ucloud_ucdn_test.go rename to internal/pkg/core/ssl-deployer/providers/ucloud-ucdn/ucloud_ucdn_test.go index f49a026a..1fc421f7 100644 --- a/internal/pkg/core/deployer/providers/ucloud-ucdn/ucloud_ucdn_test.go +++ b/internal/pkg/core/ssl-deployer/providers/ucloud-ucdn/ucloud_ucdn_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/ucloud-ucdn" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/ucloud-ucdn" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_UCLOUDUCDN_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_UCLOUDUCDN_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./ucloud_ucdn_test.go -args \ - --CERTIMATE_DEPLOYER_UCLOUDUCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_UCLOUDUCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_UCLOUDUCDN_PRIVATEKEY="your-private-key" \ - --CERTIMATE_DEPLOYER_UCLOUDUCDN_PUBLICKEY="your-public-key" \ - --CERTIMATE_DEPLOYER_UCLOUDUCDN_DOMAINID="your-domain-id" + --CERTIMATE_SSLDEPLOYER_UCLOUDUCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_UCLOUDUCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_UCLOUDUCDN_PRIVATEKEY="your-private-key" \ + --CERTIMATE_SSLDEPLOYER_UCLOUDUCDN_PUBLICKEY="your-public-key" \ + --CERTIMATE_SSLDEPLOYER_UCLOUDUCDN_DOMAINID="your-domain-id" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomainId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ PrivateKey: fPrivateKey, PublicKey: fPublicKey, DomainId: fDomainId, diff --git a/internal/pkg/core/deployer/providers/ucloud-us3/ucloud_us3.go b/internal/pkg/core/ssl-deployer/providers/ucloud-us3/ucloud_us3.go similarity index 58% rename from internal/pkg/core/deployer/providers/ucloud-us3/ucloud_us3.go rename to internal/pkg/core/ssl-deployer/providers/ucloud-us3/ucloud_us3.go index 42a51cb4..1358498e 100644 --- a/internal/pkg/core/deployer/providers/ucloud-us3/ucloud_us3.go +++ b/internal/pkg/core/ssl-deployer/providers/ucloud-us3/ucloud_us3.go @@ -2,19 +2,19 @@ package ucloudus3 import ( "context" + "errors" "fmt" "log/slog" "github.com/ucloud/ucloud-sdk-go/ucloud" "github.com/ucloud/ucloud-sdk-go/ucloud/auth" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/ucloud-ussl" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/ucloud-ussl" usdkFile "github.com/usual2970/certimate/internal/pkg/sdk3rd/ucloud/ufile" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 优刻得 API 私钥。 PrivateKey string `json:"privateKey"` // 优刻得 API 公钥。 @@ -29,55 +29,62 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *usdkFile.UFileClient - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *usdkFile.UFileClient + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.PrivateKey, config.PublicKey, config.Region) + client, err := createSDKClient(config.PrivateKey, config.PublicKey, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ PrivateKey: config.PrivateKey, PublicKey: config.PublicKey, ProjectId: config.ProjectId, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 USSL - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + if d.config.Bucket == "" { + return nil, errors.New("config `bucket` is required") + } + if d.config.Domain == "" { + return nil, errors.New("config `domain` is required") + } + + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -100,10 +107,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'us3.AddUFileSSLCert': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(privateKey, publicKey, region string) (*usdkFile.UFileClient, error) { +func createSDKClient(privateKey, publicKey, region string) (*usdkFile.UFileClient, error) { cfg := ucloud.NewConfig() cfg.Region = region diff --git a/internal/pkg/core/deployer/providers/ucloud-us3/ucloud_us3_test.go b/internal/pkg/core/ssl-deployer/providers/ucloud-us3/ucloud_us3_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/ucloud-us3/ucloud_us3_test.go rename to internal/pkg/core/ssl-deployer/providers/ucloud-us3/ucloud_us3_test.go index 9977ee42..0915c691 100644 --- a/internal/pkg/core/deployer/providers/ucloud-us3/ucloud_us3_test.go +++ b/internal/pkg/core/ssl-deployer/providers/ucloud-us3/ucloud_us3_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/ucloud-us3" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/ucloud-us3" ) var ( @@ -22,7 +22,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_UCLOUDUS3_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_UCLOUDUS3_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -37,13 +37,13 @@ func init() { Shell command to run this test: go test -v ./ucloud_us3_test.go -args \ - --CERTIMATE_DEPLOYER_UCLOUDUS3_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_UCLOUDUS3_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_UCLOUDUS3_PRIVATEKEY="your-private-key" \ - --CERTIMATE_DEPLOYER_UCLOUDUS3_PUBLICKEY="your-public-key" \ - --CERTIMATE_DEPLOYER_UCLOUDUS3_REGION="cn-bj2" \ - --CERTIMATE_DEPLOYER_UCLOUDUS3_BUCKET="your-us3-bucket" \ - --CERTIMATE_DEPLOYER_UCLOUDUS3_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_UCLOUDUS3_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_UCLOUDUS3_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_UCLOUDUS3_PRIVATEKEY="your-private-key" \ + --CERTIMATE_SSLDEPLOYER_UCLOUDUS3_PUBLICKEY="your-public-key" \ + --CERTIMATE_SSLDEPLOYER_UCLOUDUS3_REGION="cn-bj2" \ + --CERTIMATE_SSLDEPLOYER_UCLOUDUS3_BUCKET="your-us3-bucket" \ + --CERTIMATE_SSLDEPLOYER_UCLOUDUS3_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -60,7 +60,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ PrivateKey: fPrivateKey, PublicKey: fPublicKey, Region: fRegion, diff --git a/internal/pkg/core/deployer/providers/unicloud-webhost/unicloud_webhost.go b/internal/pkg/core/ssl-deployer/providers/unicloud-webhost/unicloud_webhost.go similarity index 68% rename from internal/pkg/core/deployer/providers/unicloud-webhost/unicloud_webhost.go rename to internal/pkg/core/ssl-deployer/providers/unicloud-webhost/unicloud_webhost.go index cd62cb35..8d68ee58 100644 --- a/internal/pkg/core/deployer/providers/unicloud-webhost/unicloud_webhost.go +++ b/internal/pkg/core/ssl-deployer/providers/unicloud-webhost/unicloud_webhost.go @@ -7,11 +7,11 @@ import ( "log/slog" "net/url" - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" unisdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/dcloud/unicloud" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // uniCloud 控制台账号。 Username string `json:"username"` // uniCloud 控制台密码。 @@ -25,41 +25,40 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger sdkClient *unisdk.Client } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.Username, config.Password) + client, err := createSDKClient(config.Username, config.Password) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { if d.config.SpaceProvider == "" { return nil, errors.New("config `spaceProvider` is required") } @@ -84,9 +83,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'unicloud.host.CreateDomainWithCert': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(username, password string) (*unisdk.Client, error) { +func createSDKClient(username, password string) (*unisdk.Client, error) { return unisdk.NewClient(username, password) } diff --git a/internal/pkg/core/deployer/providers/unicloud-webhost/unicloud_webhost_test.go b/internal/pkg/core/ssl-deployer/providers/unicloud-webhost/unicloud_webhost_test.go similarity index 70% rename from internal/pkg/core/deployer/providers/unicloud-webhost/unicloud_webhost_test.go rename to internal/pkg/core/ssl-deployer/providers/unicloud-webhost/unicloud_webhost_test.go index 1e47ba24..8f9741c4 100644 --- a/internal/pkg/core/deployer/providers/unicloud-webhost/unicloud_webhost_test.go +++ b/internal/pkg/core/ssl-deployer/providers/unicloud-webhost/unicloud_webhost_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/unicloud-webhost" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/unicloud-webhost" ) var ( @@ -22,7 +22,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_UNICLOUDWEBHOST_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_UNICLOUDWEBHOST_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -37,13 +37,13 @@ func init() { Shell command to run this test: go test -v ./unicloud_webhost_test.go -args \ - --CERTIMATE_DEPLOYER_UNICLOUDWEBHOST_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_UNICLOUDWEBHOST_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_UNICLOUDWEBHOST_USERNAME="your-username" \ - --CERTIMATE_DEPLOYER_UNICLOUDWEBHOST_PASSWORD="your-password" \ - --CERTIMATE_DEPLOYER_UNICLOUDWEBHOST_SPACEPROVIDER="aliyun/tencent" \ - --CERTIMATE_DEPLOYER_UNICLOUDWEBHOST_SPACEID="your-space-id" \ - --CERTIMATE_DEPLOYER_UNICLOUDWEBHOST_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_UNICLOUDWEBHOST_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_UNICLOUDWEBHOST_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_UNICLOUDWEBHOST_USERNAME="your-username" \ + --CERTIMATE_SSLDEPLOYER_UNICLOUDWEBHOST_PASSWORD="your-password" \ + --CERTIMATE_SSLDEPLOYER_UNICLOUDWEBHOST_SPACEPROVIDER="aliyun/tencent" \ + --CERTIMATE_SSLDEPLOYER_UNICLOUDWEBHOST_SPACEID="your-space-id" \ + --CERTIMATE_SSLDEPLOYER_UNICLOUDWEBHOST_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -60,7 +60,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ Username: fUsername, Password: fPassword, SpaceProvider: fSpaceProvider, diff --git a/internal/pkg/core/deployer/providers/upyun-cdn/upyun_cdn.go b/internal/pkg/core/ssl-deployer/providers/upyun-cdn/upyun_cdn.go similarity index 65% rename from internal/pkg/core/deployer/providers/upyun-cdn/upyun_cdn.go rename to internal/pkg/core/ssl-deployer/providers/upyun-cdn/upyun_cdn.go index b558f9ae..f9c63121 100644 --- a/internal/pkg/core/deployer/providers/upyun-cdn/upyun_cdn.go +++ b/internal/pkg/core/ssl-deployer/providers/upyun-cdn/upyun_cdn.go @@ -2,18 +2,18 @@ package upyuncdn import ( "context" + "errors" "fmt" "log/slog" "golang.org/x/exp/slices" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/upyun-ssl" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/upyun-ssl" upyunsdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/upyun/console" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 又拍云账号用户名。 Username string `json:"username"` // 又拍云账号密码。 @@ -22,54 +22,58 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *upyunsdk.Client - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *upyunsdk.Client + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.Username, config.Password) + client, err := createSDKClient(config.Username, config.Password) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ Username: config.Username, Password: config.Password, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 SSL - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + if d.config.Domain == "" { + return nil, errors.New("config `domain` is required") + } + + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -111,9 +115,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE } } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(username, password string) (*upyunsdk.Client, error) { +func createSDKClient(username, password string) (*upyunsdk.Client, error) { return upyunsdk.NewClient(username, password) } diff --git a/internal/pkg/core/deployer/providers/upyun-cdn/upyun_cdn_test.go b/internal/pkg/core/ssl-deployer/providers/upyun-cdn/upyun_cdn_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/upyun-cdn/upyun_cdn_test.go rename to internal/pkg/core/ssl-deployer/providers/upyun-cdn/upyun_cdn_test.go index 9fd32fd4..b1498e88 100644 --- a/internal/pkg/core/deployer/providers/upyun-cdn/upyun_cdn_test.go +++ b/internal/pkg/core/ssl-deployer/providers/upyun-cdn/upyun_cdn_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/upyun-cdn" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/upyun-cdn" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_UPYUNCDN_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_UPYUNCDN_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./upyun_cdn_test.go -args \ - --CERTIMATE_DEPLOYER_UPYUNCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_UPYUNCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_UPYUNCDN_USERNAME="your-username" \ - --CERTIMATE_DEPLOYER_UPYUNCDN_PASSWORD="your-password" \ - --CERTIMATE_DEPLOYER_UPYUNCDN_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_UPYUNCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_UPYUNCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_UPYUNCDN_USERNAME="your-username" \ + --CERTIMATE_SSLDEPLOYER_UPYUNCDN_PASSWORD="your-password" \ + --CERTIMATE_SSLDEPLOYER_UPYUNCDN_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ Username: fUsername, Password: fPassword, Domain: fDomain, diff --git a/internal/pkg/core/deployer/providers/volcengine-alb/consts.go b/internal/pkg/core/ssl-deployer/providers/volcengine-alb/consts.go similarity index 100% rename from internal/pkg/core/deployer/providers/volcengine-alb/consts.go rename to internal/pkg/core/ssl-deployer/providers/volcengine-alb/consts.go diff --git a/internal/pkg/core/deployer/providers/volcengine-alb/volcengine_alb.go b/internal/pkg/core/ssl-deployer/providers/volcengine-alb/volcengine_alb.go similarity index 81% rename from internal/pkg/core/deployer/providers/volcengine-alb/volcengine_alb.go rename to internal/pkg/core/ssl-deployer/providers/volcengine-alb/volcengine_alb.go index 881912ee..d4cb3035 100644 --- a/internal/pkg/core/deployer/providers/volcengine-alb/volcengine_alb.go +++ b/internal/pkg/core/ssl-deployer/providers/volcengine-alb/volcengine_alb.go @@ -10,13 +10,12 @@ import ( ve "github.com/volcengine/volcengine-go-sdk/volcengine" vesession "github.com/volcengine/volcengine-go-sdk/volcengine/session" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/volcengine-certcenter" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/volcengine-certcenter" xslices "github.com/usual2970/certimate/internal/pkg/utils/slices" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 火山引擎 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 火山引擎 AccessKeySecret。 @@ -36,55 +35,55 @@ type DeployerConfig struct { Domain string `json:"domain,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *vealb.ALB - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *vealb.ALB + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret, config.Region) + client, err := createSDKClient(config.AccessKeyId, config.AccessKeySecret, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: config.AccessKeyId, AccessKeySecret: config.AccessKeySecret, Region: config.Region, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到证书中心 - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -107,10 +106,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("unsupported resource type '%s'", d.config.ResourceType) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId string) error { +func (d *SSLDeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId string) error { if d.config.LoadbalancerId == "" { return errors.New("config `loadbalancerId` is required") } @@ -187,7 +186,7 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId return nil } -func (d *DeployerProvider) deployToListener(ctx context.Context, cloudCertId string) error { +func (d *SSLDeployerProvider) deployToListener(ctx context.Context, cloudCertId string) error { if d.config.ListenerId == "" { return errors.New("config `listenerId` is required") } @@ -199,7 +198,7 @@ func (d *DeployerProvider) deployToListener(ctx context.Context, cloudCertId str return nil } -func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudListenerId string, cloudCertId string) error { +func (d *SSLDeployerProvider) updateListenerCertificate(ctx context.Context, cloudListenerId string, cloudCertId string) error { // 查询指定监听器的详细信息 // REF: https://www.volcengine.com/docs/6767/113686 describeListenerAttributesReq := &vealb.DescribeListenerAttributesInput{ @@ -260,7 +259,7 @@ func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudL return nil } -func createSdkClient(accessKeyId, accessKeySecret, region string) (*vealb.ALB, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (*vealb.ALB, error) { config := ve.NewConfig().WithRegion(region).WithAkSk(accessKeyId, accessKeySecret) session, err := vesession.NewSession(config) diff --git a/internal/pkg/core/deployer/providers/volcengine-alb/volcengine_alb_test.go b/internal/pkg/core/ssl-deployer/providers/volcengine-alb/volcengine_alb_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/volcengine-alb/volcengine_alb_test.go rename to internal/pkg/core/ssl-deployer/providers/volcengine-alb/volcengine_alb_test.go index 18999397..0a7d4b06 100644 --- a/internal/pkg/core/deployer/providers/volcengine-alb/volcengine_alb_test.go +++ b/internal/pkg/core/ssl-deployer/providers/volcengine-alb/volcengine_alb_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/volcengine-alb" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/volcengine-alb" ) var ( @@ -21,7 +21,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_VOLCENGINEALB_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_VOLCENGINEALB_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -35,12 +35,12 @@ func init() { Shell command to run this test: go test -v ./volcengine_alb_test.go -args \ - --CERTIMATE_DEPLOYER_VOLCENGINEALB_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_VOLCENGINEALB_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_VOLCENGINEALB_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_VOLCENGINEALB_ACCESSKEYSECRET="your-access-key-secret" \ - --CERTIMATE_DEPLOYER_VOLCENGINEALB_REGION="cn-beijing" \ - --CERTIMATE_DEPLOYER_VOLCENGINEALB_LISTENERID="your-listener-id" + --CERTIMATE_SSLDEPLOYER_VOLCENGINEALB_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINEALB_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINEALB_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINEALB_ACCESSKEYSECRET="your-access-key-secret" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINEALB_REGION="cn-beijing" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINEALB_LISTENERID="your-listener-id" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -56,7 +56,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("LISTENERID: %v", fListenerId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, Region: fRegion, diff --git a/internal/pkg/core/deployer/providers/volcengine-cdn/volcengine_cdn.go b/internal/pkg/core/ssl-deployer/providers/volcengine-cdn/volcengine_cdn.go similarity index 70% rename from internal/pkg/core/deployer/providers/volcengine-cdn/volcengine_cdn.go rename to internal/pkg/core/ssl-deployer/providers/volcengine-cdn/volcengine_cdn.go index e67e8885..122cb733 100644 --- a/internal/pkg/core/deployer/providers/volcengine-cdn/volcengine_cdn.go +++ b/internal/pkg/core/ssl-deployer/providers/volcengine-cdn/volcengine_cdn.go @@ -9,12 +9,11 @@ import ( vecdn "github.com/volcengine/volc-sdk-golang/service/cdn" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/volcengine-cdn" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/volcengine-cdn" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 火山引擎 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 火山引擎 AccessKeySecret。 @@ -23,53 +22,57 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *vecdn.CDN - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *vecdn.CDN + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } client := vecdn.NewInstance() client.Client.SetAccessKey(config.AccessKeyId) client.Client.SetSecretKey(config.AccessKeySecret) - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: config.AccessKeyId, AccessKeySecret: config.AccessKeySecret, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 CDN - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + if d.config.Domain == "" { + return nil, errors.New("config `domain` is required") + } + + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -140,5 +143,5 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE } } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } diff --git a/internal/pkg/core/deployer/providers/volcengine-cdn/volcengine_cdn_test.go b/internal/pkg/core/ssl-deployer/providers/volcengine-cdn/volcengine_cdn_test.go similarity index 70% rename from internal/pkg/core/deployer/providers/volcengine-cdn/volcengine_cdn_test.go rename to internal/pkg/core/ssl-deployer/providers/volcengine-cdn/volcengine_cdn_test.go index 1535deae..97311b99 100644 --- a/internal/pkg/core/deployer/providers/volcengine-cdn/volcengine_cdn_test.go +++ b/internal/pkg/core/ssl-deployer/providers/volcengine-cdn/volcengine_cdn_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/volcengine-cdn" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/volcengine-cdn" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_VOLCENGINECDN_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_VOLCENGINECDN_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./volcengine_cdn_test.go -args \ - --CERTIMATE_DEPLOYER_VOLCENGINECDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_VOLCENGINECDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_VOLCENGINECDN_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_VOLCENGINECDN_ACCESSKEYSECRET="your-access-key-secret" \ - --CERTIMATE_DEPLOYER_VOLCENGINECDN_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_VOLCENGINECDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINECDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINECDN_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINECDN_ACCESSKEYSECRET="your-access-key-secret" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINECDN_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, Domain: fDomain, diff --git a/internal/pkg/core/ssl-deployer/providers/volcengine-certcenter/volcengine_certcenter.go b/internal/pkg/core/ssl-deployer/providers/volcengine-certcenter/volcengine_certcenter.go new file mode 100644 index 00000000..c8756a31 --- /dev/null +++ b/internal/pkg/core/ssl-deployer/providers/volcengine-certcenter/volcengine_certcenter.go @@ -0,0 +1,71 @@ +package volcenginecertcenter + +import ( + "context" + "errors" + "fmt" + "log/slog" + + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/volcengine-certcenter" +) + +type SSLDeployerProviderConfig struct { + // 火山引擎 AccessKeyId。 + AccessKeyId string `json:"accessKeyId"` + // 火山引擎 AccessKeySecret。 + AccessKeySecret string `json:"accessKeySecret"` + // 火山引擎地域。 + Region string `json:"region"` +} + +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sslManager core.SSLManager +} + +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) + +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { + if config == nil { + return nil, errors.New("the configuration of the ssl deployer provider is nil") + } + + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ + AccessKeyId: config.AccessKeyId, + AccessKeySecret: config.AccessKeySecret, + Region: config.Region, + }) + if err != nil { + return nil, fmt.Errorf("could not create ssl manager: %w", err) + } + + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sslManager: sslmgr, + }, nil +} + +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { + if logger == nil { + d.logger = slog.New(slog.DiscardHandler) + } else { + d.logger = logger + } + + d.sslManager.SetLogger(logger) +} + +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) + if err != nil { + return nil, fmt.Errorf("failed to upload certificate file: %w", err) + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) + } + + return &core.SSLDeployResult{}, nil +} diff --git a/internal/pkg/core/deployer/providers/volcengine-clb/consts.go b/internal/pkg/core/ssl-deployer/providers/volcengine-clb/consts.go similarity index 100% rename from internal/pkg/core/deployer/providers/volcengine-clb/consts.go rename to internal/pkg/core/ssl-deployer/providers/volcengine-clb/consts.go diff --git a/internal/pkg/core/deployer/providers/volcengine-clb/volcengine_clb.go b/internal/pkg/core/ssl-deployer/providers/volcengine-clb/volcengine_clb.go similarity index 75% rename from internal/pkg/core/deployer/providers/volcengine-clb/volcengine_clb.go rename to internal/pkg/core/ssl-deployer/providers/volcengine-clb/volcengine_clb.go index bc2dc9e0..dd37119f 100644 --- a/internal/pkg/core/deployer/providers/volcengine-clb/volcengine_clb.go +++ b/internal/pkg/core/ssl-deployer/providers/volcengine-clb/volcengine_clb.go @@ -10,12 +10,11 @@ import ( ve "github.com/volcengine/volcengine-go-sdk/volcengine" vesession "github.com/volcengine/volcengine-go-sdk/volcengine/session" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/volcengine-certcenter" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/volcengine-certcenter" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 火山引擎 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 火山引擎 AccessKeySecret。 @@ -32,55 +31,55 @@ type DeployerConfig struct { ListenerId string `json:"listenerId,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *veclb.CLB - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *veclb.CLB + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret, config.Region) + client, err := createSDKClient(config.AccessKeyId, config.AccessKeySecret, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: config.AccessKeyId, AccessKeySecret: config.AccessKeySecret, Region: config.Region, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到证书中心 - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -103,10 +102,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("unsupported resource type '%s'", d.config.ResourceType) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId string) error { +func (d *SSLDeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId string) error { if d.config.LoadbalancerId == "" { return errors.New("config `loadbalancerId` is required") } @@ -183,7 +182,7 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId return nil } -func (d *DeployerProvider) deployToListener(ctx context.Context, cloudCertId string) error { +func (d *SSLDeployerProvider) deployToListener(ctx context.Context, cloudCertId string) error { if d.config.ListenerId == "" { return errors.New("config `listenerId` is required") } @@ -195,7 +194,7 @@ func (d *DeployerProvider) deployToListener(ctx context.Context, cloudCertId str return nil } -func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudListenerId string, cloudCertId string) error { +func (d *SSLDeployerProvider) updateListenerCertificate(ctx context.Context, cloudListenerId string, cloudCertId string) error { // 修改指定监听器 // REF: https://www.volcengine.com/docs/6406/71775 modifyListenerAttributesReq := &veclb.ModifyListenerAttributesInput{ @@ -212,7 +211,7 @@ func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudL return nil } -func createSdkClient(accessKeyId, accessKeySecret, region string) (*veclb.CLB, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (*veclb.CLB, error) { config := ve.NewConfig().WithRegion(region).WithAkSk(accessKeyId, accessKeySecret) session, err := vesession.NewSession(config) diff --git a/internal/pkg/core/deployer/providers/volcengine-clb/volcengine_clb_test.go b/internal/pkg/core/ssl-deployer/providers/volcengine-clb/volcengine_clb_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/volcengine-clb/volcengine_clb_test.go rename to internal/pkg/core/ssl-deployer/providers/volcengine-clb/volcengine_clb_test.go index fb78eba5..c1ae0703 100644 --- a/internal/pkg/core/deployer/providers/volcengine-clb/volcengine_clb_test.go +++ b/internal/pkg/core/ssl-deployer/providers/volcengine-clb/volcengine_clb_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/volcengine-clb" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/volcengine-clb" ) var ( @@ -21,7 +21,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_VOLCENGINECLB_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_VOLCENGINECLB_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -35,12 +35,12 @@ func init() { Shell command to run this test: go test -v ./volcengine_clb_test.go -args \ - --CERTIMATE_DEPLOYER_VOLCENGINECLB_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_VOLCENGINECLB_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_VOLCENGINECLB_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_VOLCENGINECLB_ACCESSKEYSECRET="your-access-key-secret" \ - --CERTIMATE_DEPLOYER_VOLCENGINECLB_REGION="cn-beijing" \ - --CERTIMATE_DEPLOYER_VOLCENGINECLB_LISTENERID="your-listener-id" + --CERTIMATE_SSLDEPLOYER_VOLCENGINECLB_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINECLB_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINECLB_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINECLB_ACCESSKEYSECRET="your-access-key-secret" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINECLB_REGION="cn-beijing" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINECLB_LISTENERID="your-listener-id" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -56,7 +56,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("LISTENERID: %v", fListenerId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, Region: fRegion, diff --git a/internal/pkg/core/deployer/providers/volcengine-dcdn/volcengine_dcdn.go b/internal/pkg/core/ssl-deployer/providers/volcengine-dcdn/volcengine_dcdn.go similarity index 58% rename from internal/pkg/core/deployer/providers/volcengine-dcdn/volcengine_dcdn.go rename to internal/pkg/core/ssl-deployer/providers/volcengine-dcdn/volcengine_dcdn.go index 82021205..56782c7e 100644 --- a/internal/pkg/core/deployer/providers/volcengine-dcdn/volcengine_dcdn.go +++ b/internal/pkg/core/ssl-deployer/providers/volcengine-dcdn/volcengine_dcdn.go @@ -2,6 +2,7 @@ package volcenginedcdn import ( "context" + "errors" "fmt" "log/slog" "strings" @@ -10,12 +11,11 @@ import ( ve "github.com/volcengine/volcengine-go-sdk/volcengine" vesession "github.com/volcengine/volcengine-go-sdk/volcengine/session" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/volcengine-certcenter" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/volcengine-certcenter" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 火山引擎 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 火山引擎 AccessKeySecret。 @@ -26,55 +26,59 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *vedcdn.DCDN - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *vedcdn.DCDN + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret, config.Region) + client, err := createSDKClient(config.AccessKeyId, config.AccessKeySecret, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: config.AccessKeyId, AccessKeySecret: config.AccessKeySecret, Region: config.Region, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到证书中心 - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + if d.config.Domain == "" { + return nil, errors.New("config `domain` is required") + } + + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -97,10 +101,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'dcdn.CreateCertBind': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(accessKeyId, accessKeySecret, region string) (*vedcdn.DCDN, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (*vedcdn.DCDN, error) { if region == "" { region = "cn-beijing" // DCDN 服务默认区域:北京 } diff --git a/internal/pkg/core/deployer/providers/volcengine-dcdn/volcengine_dcdn_test.go b/internal/pkg/core/ssl-deployer/providers/volcengine-dcdn/volcengine_dcdn_test.go similarity index 70% rename from internal/pkg/core/deployer/providers/volcengine-dcdn/volcengine_dcdn_test.go rename to internal/pkg/core/ssl-deployer/providers/volcengine-dcdn/volcengine_dcdn_test.go index 27bd02ce..0a7976b8 100644 --- a/internal/pkg/core/deployer/providers/volcengine-dcdn/volcengine_dcdn_test.go +++ b/internal/pkg/core/ssl-deployer/providers/volcengine-dcdn/volcengine_dcdn_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/volcengine-dcdn" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/volcengine-dcdn" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_VOLCENGINEDCDN_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_VOLCENGINEDCDN_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./volcengine_dcdn_test.go -args \ - --CERTIMATE_DEPLOYER_VOLCENGINEDCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_VOLCENGINEDCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_VOLCENGINEDCDN_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_VOLCENGINEDCDN_ACCESSKEYSECRET="your-access-key-secret" \ - --CERTIMATE_DEPLOYER_VOLCENGINEDCDN_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_VOLCENGINEDCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINEDCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINEDCDN_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINEDCDN_ACCESSKEYSECRET="your-access-key-secret" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINEDCDN_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, Domain: fDomain, diff --git a/internal/pkg/core/deployer/providers/volcengine-imagex/volcengine_imagex.go b/internal/pkg/core/ssl-deployer/providers/volcengine-imagex/volcengine_imagex.go similarity index 72% rename from internal/pkg/core/deployer/providers/volcengine-imagex/volcengine_imagex.go rename to internal/pkg/core/ssl-deployer/providers/volcengine-imagex/volcengine_imagex.go index a7c974b4..352f2545 100644 --- a/internal/pkg/core/deployer/providers/volcengine-imagex/volcengine_imagex.go +++ b/internal/pkg/core/ssl-deployer/providers/volcengine-imagex/volcengine_imagex.go @@ -9,12 +9,11 @@ import ( vebase "github.com/volcengine/volc-sdk-golang/base" veimagex "github.com/volcengine/volc-sdk-golang/service/imagex/v2" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/volcengine-certcenter" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/volcengine-certcenter" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 火山引擎 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 火山引擎 AccessKeySecret。 @@ -27,53 +26,53 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *veimagex.Imagex - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *veimagex.Imagex + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret, config.Region) + client, err := createSDKClient(config.AccessKeyId, config.AccessKeySecret, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: config.AccessKeyId, AccessKeySecret: config.AccessKeySecret, Region: config.Region, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { if d.config.ServiceId == "" { return nil, errors.New("config `serviceId` is required") } @@ -81,8 +80,8 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, errors.New("config `domain` is required") } - // 上传证书到证书中心 - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -130,10 +129,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'imagex.UpdateHttps': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(accessKeyId, accessKeySecret, region string) (*veimagex.Imagex, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (*veimagex.Imagex, error) { var instance *veimagex.Imagex if region == "" { instance = veimagex.NewInstance() diff --git a/internal/pkg/core/deployer/providers/volcengine-imagex/volcengine_imagex_test.go b/internal/pkg/core/ssl-deployer/providers/volcengine-imagex/volcengine_imagex_test.go similarity index 69% rename from internal/pkg/core/deployer/providers/volcengine-imagex/volcengine_imagex_test.go rename to internal/pkg/core/ssl-deployer/providers/volcengine-imagex/volcengine_imagex_test.go index 32a43555..069b14d9 100644 --- a/internal/pkg/core/deployer/providers/volcengine-imagex/volcengine_imagex_test.go +++ b/internal/pkg/core/ssl-deployer/providers/volcengine-imagex/volcengine_imagex_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/volcengine-imagex" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/volcengine-imagex" ) var ( @@ -22,7 +22,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_VOLCENGINEIMAGEX_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_VOLCENGINEIMAGEX_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -37,13 +37,13 @@ func init() { Shell command to run this test: go test -v ./volcengine_imagex_test.go -args \ - --CERTIMATE_DEPLOYER_VOLCENGINEIMAGEX_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_VOLCENGINEIMAGEX_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_VOLCENGINEIMAGEX_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_VOLCENGINEIMAGEX_ACCESSKEYSECRET="your-access-key-secret" \ - --CERTIMATE_DEPLOYER_VOLCENGINEIMAGEX_REGION="cn-north-1" \ - --CERTIMATE_DEPLOYER_VOLCENGINEIMAGEX_SERVICEID="your-service-id" \ - --CERTIMATE_DEPLOYER_VOLCENGINEIMAGEX_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_VOLCENGINEIMAGEX_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINEIMAGEX_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINEIMAGEX_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINEIMAGEX_ACCESSKEYSECRET="your-access-key-secret" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINEIMAGEX_REGION="cn-north-1" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINEIMAGEX_SERVICEID="your-service-id" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINEIMAGEX_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -60,7 +60,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, Region: fRegion, diff --git a/internal/pkg/core/deployer/providers/volcengine-live/volcengine_live.go b/internal/pkg/core/ssl-deployer/providers/volcengine-live/volcengine_live.go similarity index 72% rename from internal/pkg/core/deployer/providers/volcengine-live/volcengine_live.go rename to internal/pkg/core/ssl-deployer/providers/volcengine-live/volcengine_live.go index 3195d810..4b4f04d1 100644 --- a/internal/pkg/core/deployer/providers/volcengine-live/volcengine_live.go +++ b/internal/pkg/core/ssl-deployer/providers/volcengine-live/volcengine_live.go @@ -10,12 +10,11 @@ import ( velive "github.com/volcengine/volc-sdk-golang/service/live/v20230101" ve "github.com/volcengine/volcengine-go-sdk/volcengine" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/volcengine-live" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/volcengine-live" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 火山引擎 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 火山引擎 AccessKeySecret。 @@ -24,53 +23,57 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *velive.Live - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *velive.Live + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } client := velive.NewInstance() client.SetAccessKey(config.AccessKeyId) client.SetSecretKey(config.AccessKeySecret) - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: config.AccessKeyId, AccessKeySecret: config.AccessKeySecret, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到 Live - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + if d.config.Domain == "" { + return nil, errors.New("config `domain` is required") + } + + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -149,5 +152,5 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE } } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } diff --git a/internal/pkg/core/deployer/providers/volcengine-live/volcengine_live_test.go b/internal/pkg/core/ssl-deployer/providers/volcengine-live/volcengine_live_test.go similarity index 70% rename from internal/pkg/core/deployer/providers/volcengine-live/volcengine_live_test.go rename to internal/pkg/core/ssl-deployer/providers/volcengine-live/volcengine_live_test.go index 57891eea..b3fd4f98 100644 --- a/internal/pkg/core/deployer/providers/volcengine-live/volcengine_live_test.go +++ b/internal/pkg/core/ssl-deployer/providers/volcengine-live/volcengine_live_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/volcengine-live" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/volcengine-live" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_VOLCENGINELIVE_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_VOLCENGINELIVE_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./volcengine_live_test.go -args \ - --CERTIMATE_DEPLOYER_VOLCENGINELIVE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_VOLCENGINELIVE_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_VOLCENGINELIVE_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_VOLCENGINELIVE_ACCESSKEYSECRET="your-access-key-secret" \ - --CERTIMATE_DEPLOYER_VOLCENGINELIVE_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_VOLCENGINELIVE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINELIVE_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINELIVE_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINELIVE_ACCESSKEYSECRET="your-access-key-secret" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINELIVE_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, Domain: fDomain, diff --git a/internal/pkg/core/deployer/providers/volcengine-tos/volcengine_tos.go b/internal/pkg/core/ssl-deployer/providers/volcengine-tos/volcengine_tos.go similarity index 60% rename from internal/pkg/core/deployer/providers/volcengine-tos/volcengine_tos.go rename to internal/pkg/core/ssl-deployer/providers/volcengine-tos/volcengine_tos.go index 674106e1..e00998c0 100644 --- a/internal/pkg/core/deployer/providers/volcengine-tos/volcengine_tos.go +++ b/internal/pkg/core/ssl-deployer/providers/volcengine-tos/volcengine_tos.go @@ -8,12 +8,11 @@ import ( "github.com/volcengine/ve-tos-golang-sdk/v2/tos" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/volcengine-certcenter" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/volcengine-certcenter" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 火山引擎 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 火山引擎 AccessKeySecret。 @@ -26,53 +25,53 @@ type DeployerConfig struct { Domain string `json:"domain"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *tos.ClientV2 - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *tos.ClientV2 + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret, config.Region) + client, err := createSDKClient(config.AccessKeyId, config.AccessKeySecret, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: config.AccessKeyId, AccessKeySecret: config.AccessKeySecret, Region: config.Region, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - d.sslUploader.WithLogger(logger) - return d + + d.sslManager.SetLogger(logger) } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { if d.config.Bucket == "" { return nil, errors.New("config `bucket` is required") } @@ -80,8 +79,8 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, errors.New("config `domain` is required") } - // 上传证书到证书中心 - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -103,10 +102,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'tos.PutBucketCustomDomain': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(accessKeyId, accessKeySecret, region string) (*tos.ClientV2, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (*tos.ClientV2, error) { endpoint := fmt.Sprintf("tos-%s.ivolces.com", region) client, err := tos.NewClientV2( diff --git a/internal/pkg/core/deployer/providers/volcengine-tos/volcengine_tos_test.go b/internal/pkg/core/ssl-deployer/providers/volcengine-tos/volcengine_tos_test.go similarity index 70% rename from internal/pkg/core/deployer/providers/volcengine-tos/volcengine_tos_test.go rename to internal/pkg/core/ssl-deployer/providers/volcengine-tos/volcengine_tos_test.go index 8dc1cf3d..039301b4 100644 --- a/internal/pkg/core/deployer/providers/volcengine-tos/volcengine_tos_test.go +++ b/internal/pkg/core/ssl-deployer/providers/volcengine-tos/volcengine_tos_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/volcengine-tos" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/volcengine-tos" ) var ( @@ -22,7 +22,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_VOLCENGINETOS_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_VOLCENGINETOS_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -37,13 +37,13 @@ func init() { Shell command to run this test: go test -v ./volcengine_tos_test.go -args \ - --CERTIMATE_DEPLOYER_VOLCENGINETOS_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_VOLCENGINETOS_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_VOLCENGINETOS_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_VOLCENGINETOS_ACCESSKEYSECRET="your-access-key-secret" \ - --CERTIMATE_DEPLOYER_VOLCENGINETOS_REGION="cn-beijing" \ - --CERTIMATE_DEPLOYER_VOLCENGINETOS_BUCKET="your-tos-bucket" \ - --CERTIMATE_DEPLOYER_VOLCENGINETOS_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_VOLCENGINETOS_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINETOS_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINETOS_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINETOS_ACCESSKEYSECRET="your-access-key-secret" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINETOS_REGION="cn-beijing" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINETOS_BUCKET="your-tos-bucket" \ + --CERTIMATE_SSLDEPLOYER_VOLCENGINETOS_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -60,7 +60,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, Region: fRegion, diff --git a/internal/pkg/core/deployer/providers/wangsu-cdn/wangsu_cdn.go b/internal/pkg/core/ssl-deployer/providers/wangsu-cdn/wangsu_cdn.go similarity index 56% rename from internal/pkg/core/deployer/providers/wangsu-cdn/wangsu_cdn.go rename to internal/pkg/core/ssl-deployer/providers/wangsu-cdn/wangsu_cdn.go index 3c2925dd..2823bbd9 100644 --- a/internal/pkg/core/deployer/providers/wangsu-cdn/wangsu_cdn.go +++ b/internal/pkg/core/ssl-deployer/providers/wangsu-cdn/wangsu_cdn.go @@ -2,19 +2,19 @@ package wangsucdn import ( "context" + "errors" "fmt" "log/slog" "strconv" "strings" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/wangsu-certificate" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/wangsu-certificate" wangsusdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/wangsu/cdn" xslices "github.com/usual2970/certimate/internal/pkg/utils/slices" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 网宿云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 网宿云 AccessKeySecret。 @@ -23,53 +23,56 @@ type DeployerConfig struct { Domains []string `json:"domains"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *wangsusdk.Client - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *wangsusdk.Client + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret) + client, err := createSDKClient(config.AccessKeyId, config.AccessKeySecret) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: config.AccessKeyId, AccessKeySecret: config.AccessKeySecret, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { - // 上传证书到证书管理 - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { + if len(d.config.Domains) == 0 { + return nil, errors.New("config `domains` is required") + } + + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -92,9 +95,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'cdn.BatchUpdateCertificateConfig': %w", err) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(accessKeyId, accessKeySecret string) (*wangsusdk.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret string) (*wangsusdk.Client, error) { return wangsusdk.NewClient(accessKeyId, accessKeySecret) } diff --git a/internal/pkg/core/deployer/providers/wangsu-cdn/wangsu_cdn_test.go b/internal/pkg/core/ssl-deployer/providers/wangsu-cdn/wangsu_cdn_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/wangsu-cdn/wangsu_cdn_test.go rename to internal/pkg/core/ssl-deployer/providers/wangsu-cdn/wangsu_cdn_test.go index 99859b85..b1c9d1ed 100644 --- a/internal/pkg/core/deployer/providers/wangsu-cdn/wangsu_cdn_test.go +++ b/internal/pkg/core/ssl-deployer/providers/wangsu-cdn/wangsu_cdn_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/wangsu-cdn" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/wangsu-cdn" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_WANGSUCDN_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_WANGSUCDN_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./wangsu_cdn_test.go -args \ - --CERTIMATE_DEPLOYER_WANGSUCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_WANGSUCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_WANGSUCDN_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_WANGSUCDN_ACCESSKEYSECRET="your-access-key-secret" \ - --CERTIMATE_DEPLOYER_WANGSUCDN_DOMAIN="example.com" + --CERTIMATE_SSLDEPLOYER_WANGSUCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_WANGSUCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_WANGSUCDN_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_WANGSUCDN_ACCESSKEYSECRET="your-access-key-secret" \ + --CERTIMATE_SSLDEPLOYER_WANGSUCDN_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, Domains: []string{fDomain}, diff --git a/internal/pkg/core/deployer/providers/wangsu-cdnpro/wangsu_cdnpro.go b/internal/pkg/core/ssl-deployer/providers/wangsu-cdnpro/wangsu_cdnpro.go similarity index 91% rename from internal/pkg/core/deployer/providers/wangsu-cdnpro/wangsu_cdnpro.go rename to internal/pkg/core/ssl-deployer/providers/wangsu-cdnpro/wangsu_cdnpro.go index 48dedf06..15747843 100644 --- a/internal/pkg/core/deployer/providers/wangsu-cdnpro/wangsu_cdnpro.go +++ b/internal/pkg/core/ssl-deployer/providers/wangsu-cdnpro/wangsu_cdnpro.go @@ -16,13 +16,13 @@ import ( "strconv" "time" - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" wangsucdn "github.com/usual2970/certimate/internal/pkg/sdk3rd/wangsu/cdnpro" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 网宿云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 网宿云 AccessKeySecret。 @@ -41,41 +41,40 @@ type DeployerConfig struct { WebhookId string `json:"webhookId,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger sdkClient *wangsucdn.Client } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret) + client, err := createSDKClient(config.AccessKeyId, config.AccessKeySecret) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { if d.config.Domain == "" { return nil, errors.New("config `domain` is required") } @@ -221,10 +220,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE time.Sleep(time.Second * 5) } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(accessKeyId, accessKeySecret string) (*wangsucdn.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret string) (*wangsucdn.Client, error) { return wangsucdn.NewClient(accessKeyId, accessKeySecret) } diff --git a/internal/pkg/core/deployer/providers/wangsu-cdnpro/wangsu_cdnpro_test.go b/internal/pkg/core/ssl-deployer/providers/wangsu-cdnpro/wangsu_cdnpro_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/wangsu-cdnpro/wangsu_cdnpro_test.go rename to internal/pkg/core/ssl-deployer/providers/wangsu-cdnpro/wangsu_cdnpro_test.go index 51018fe4..0c7285cc 100644 --- a/internal/pkg/core/deployer/providers/wangsu-cdnpro/wangsu_cdnpro_test.go +++ b/internal/pkg/core/ssl-deployer/providers/wangsu-cdnpro/wangsu_cdnpro_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/wangsu-cdnpro" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/wangsu-cdnpro" ) var ( @@ -24,7 +24,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_WANGSUCDNPRO_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_WANGSUCDNPRO_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -41,15 +41,15 @@ func init() { Shell command to run this test: go test -v ./wangsu_cdnpro_test.go -args \ - --CERTIMATE_DEPLOYER_WANGSUCDNPRO_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_WANGSUCDNPRO_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_WANGSUCDNPRO_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_WANGSUCDNPRO_ACCESSKEYSECRET="your-access-key-secret" \ - --CERTIMATE_DEPLOYER_WANGSUCDNPRO_APIKEY="your-api-key" \ - --CERTIMATE_DEPLOYER_WANGSUCDNPRO_ENVIRONMENT="production" \ - --CERTIMATE_DEPLOYER_WANGSUCDNPRO_DOMAIN="example.com" \ - --CERTIMATE_DEPLOYER_WANGSUCDNPRO_CERTIFICATEID="your-certificate-id" \ - --CERTIMATE_DEPLOYER_WANGSUCDNPRO_WEBHOOKID="your-webhook-id" + --CERTIMATE_SSLDEPLOYER_WANGSUCDNPRO_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_WANGSUCDNPRO_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_WANGSUCDNPRO_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_WANGSUCDNPRO_ACCESSKEYSECRET="your-access-key-secret" \ + --CERTIMATE_SSLDEPLOYER_WANGSUCDNPRO_APIKEY="your-api-key" \ + --CERTIMATE_SSLDEPLOYER_WANGSUCDNPRO_ENVIRONMENT="production" \ + --CERTIMATE_SSLDEPLOYER_WANGSUCDNPRO_DOMAIN="example.com" \ + --CERTIMATE_SSLDEPLOYER_WANGSUCDNPRO_CERTIFICATEID="your-certificate-id" \ + --CERTIMATE_SSLDEPLOYER_WANGSUCDNPRO_WEBHOOKID="your-webhook-id" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -68,7 +68,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("WEBHOOKID: %v", fWebhookId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, ApiKey: fApiKey, diff --git a/internal/pkg/core/deployer/providers/wangsu-certificate/wangsu_certificate.go b/internal/pkg/core/ssl-deployer/providers/wangsu-certificate/wangsu_certificate.go similarity index 58% rename from internal/pkg/core/deployer/providers/wangsu-certificate/wangsu_certificate.go rename to internal/pkg/core/ssl-deployer/providers/wangsu-certificate/wangsu_certificate.go index 69e9edf0..1b7bfc90 100644 --- a/internal/pkg/core/deployer/providers/wangsu-certificate/wangsu_certificate.go +++ b/internal/pkg/core/ssl-deployer/providers/wangsu-certificate/wangsu_certificate.go @@ -2,18 +2,18 @@ package wangsucertificate import ( "context" + "errors" "fmt" "log/slog" "time" - "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/uploader" - uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/wangsu-certificate" + "github.com/usual2970/certimate/internal/pkg/core" + sslmgrsp "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/wangsu-certificate" wangsusdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/wangsu/certificate" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // 网宿云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 网宿云 AccessKeySecret。 @@ -23,54 +23,53 @@ type DeployerConfig struct { CertificateId string `json:"certificateId,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig - logger *slog.Logger - sdkClient *wangsusdk.Client - sslUploader uploader.Uploader +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig + logger *slog.Logger + sdkClient *wangsusdk.Client + sslManager core.SSLManager } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret) + client, err := createSDKClient(config.AccessKeyId, config.AccessKeySecret) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + sslmgr, err := sslmgrsp.NewSSLManagerProvider(&sslmgrsp.SSLManagerProviderConfig{ AccessKeyId: config.AccessKeyId, AccessKeySecret: config.AccessKeySecret, }) if err != nil { - return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + return nil, fmt.Errorf("could not create ssl manager: %w", err) } - return &DeployerProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - sslUploader: uploader, + return &SSLDeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslManager: sslmgr, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { if d.config.CertificateId == "" { - // 上传证书到证书管理 - upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) + // 上传证书 + upres, err := d.sslManager.Upload(ctx, certPEM, privkeyPEM) if err != nil { return nil, fmt.Errorf("failed to upload certificate file: %w", err) } else { @@ -92,9 +91,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE } } - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } -func createSdkClient(accessKeyId, accessKeySecret string) (*wangsusdk.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret string) (*wangsusdk.Client, error) { return wangsusdk.NewClient(accessKeyId, accessKeySecret) } diff --git a/internal/pkg/core/deployer/providers/wangsu-certificate/wangsu_certificate_test.go b/internal/pkg/core/ssl-deployer/providers/wangsu-certificate/wangsu_certificate_test.go similarity index 69% rename from internal/pkg/core/deployer/providers/wangsu-certificate/wangsu_certificate_test.go rename to internal/pkg/core/ssl-deployer/providers/wangsu-certificate/wangsu_certificate_test.go index a6805ec9..363bec53 100644 --- a/internal/pkg/core/deployer/providers/wangsu-certificate/wangsu_certificate_test.go +++ b/internal/pkg/core/ssl-deployer/providers/wangsu-certificate/wangsu_certificate_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/wangsu-certificate" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/wangsu-certificate" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_WANGSUCERTIFICATE_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_WANGSUCERTIFICATE_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./wangsu_certificate_test.go -args \ - --CERTIMATE_DEPLOYER_WANGSUCERTIFICATE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_WANGSUCERTIFICATE_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_WANGSUCERTIFICATE_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_DEPLOYER_WANGSUCERTIFICATE_ACCESSKEYSECRET="your-access-key-secret" \ - --CERTIMATE_DEPLOYER_WANGSUCERTIFICATE_CERTIFICATEID="your-certificate-id" + --CERTIMATE_SSLDEPLOYER_WANGSUCERTIFICATE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_WANGSUCERTIFICATE_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_WANGSUCERTIFICATE_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLDEPLOYER_WANGSUCERTIFICATE_ACCESSKEYSECRET="your-access-key-secret" \ + --CERTIMATE_SSLDEPLOYER_WANGSUCERTIFICATE_CERTIFICATEID="your-certificate-id" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("CERTIFICATEID: %v", fCertificateId), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, CertificateId: fCertificateId, diff --git a/internal/pkg/core/deployer/providers/webhook/webhook.go b/internal/pkg/core/ssl-deployer/providers/webhook/webhook.go similarity index 89% rename from internal/pkg/core/deployer/providers/webhook/webhook.go rename to internal/pkg/core/ssl-deployer/providers/webhook/webhook.go index e42addb9..7b0a75b0 100644 --- a/internal/pkg/core/deployer/providers/webhook/webhook.go +++ b/internal/pkg/core/ssl-deployer/providers/webhook/webhook.go @@ -4,6 +4,7 @@ import ( "context" "crypto/tls" "encoding/json" + "errors" "fmt" "log/slog" "net/http" @@ -13,11 +14,11 @@ import ( "github.com/go-resty/resty/v2" - "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" ) -type DeployerConfig struct { +type SSLDeployerProviderConfig struct { // Webhook URL。 WebhookUrl string `json:"webhookUrl"` // Webhook 回调数据(application/json 或 application/x-www-form-urlencoded 格式)。 @@ -31,17 +32,17 @@ type DeployerConfig struct { AllowInsecureConnections bool `json:"allowInsecureConnections,omitempty"` } -type DeployerProvider struct { - config *DeployerConfig +type SSLDeployerProvider struct { + config *SSLDeployerProviderConfig logger *slog.Logger httpClient *resty.Client } -var _ deployer.Deployer = (*DeployerProvider)(nil) +var _ core.SSLDeployer = (*SSLDeployerProvider)(nil) -func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { +func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl deployer provider is nil") } client := resty.New(). @@ -52,23 +53,22 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { client.SetTLSClientConfig(&tls.Config{InsecureSkipVerify: true}) } - return &DeployerProvider{ + return &SSLDeployerProvider{ config: config, logger: slog.Default(), httpClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { +func (d *SSLDeployerProvider) SetLogger(logger *slog.Logger) { if logger == nil { d.logger = slog.New(slog.DiscardHandler) } else { d.logger = logger } - return d } -func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { +func (d *SSLDeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLDeployResult, error) { // 解析证书内容 certX509, err := xcert.ParseCertificateFromPEM(certPEM) if err != nil { @@ -185,7 +185,7 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE d.logger.Debug("webhook responded", slog.Any("response", resp.String())) - return &deployer.DeployResult{}, nil + return &core.SSLDeployResult{}, nil } func replaceJsonValueRecursively(data interface{}, oldStr, newStr string) interface{} { diff --git a/internal/pkg/core/deployer/providers/webhook/webhook_test.go b/internal/pkg/core/ssl-deployer/providers/webhook/webhook_test.go similarity index 71% rename from internal/pkg/core/deployer/providers/webhook/webhook_test.go rename to internal/pkg/core/ssl-deployer/providers/webhook/webhook_test.go index 8642ef14..07535ab3 100644 --- a/internal/pkg/core/deployer/providers/webhook/webhook_test.go +++ b/internal/pkg/core/ssl-deployer/providers/webhook/webhook_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/webhook" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-deployer/providers/webhook" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_DEPLOYER_WEBHOOK_" + argsPrefix := "CERTIMATE_SSLDEPLOYER_WEBHOOK_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -33,11 +33,11 @@ func init() { Shell command to run this test: go test -v ./webhook_test.go -args \ - --CERTIMATE_DEPLOYER_WEBHOOK_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_DEPLOYER_WEBHOOK_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_DEPLOYER_WEBHOOK_URL="https://example.com/your-webhook-url" \ - --CERTIMATE_DEPLOYER_WEBHOOK_CONTENTTYPE="application/json" \ - --CERTIMATE_DEPLOYER_WEBHOOK_DATA="{\"certificate\":\"${CERTIFICATE}\",\"privateKey\":\"${PRIVATE_KEY}\"}" + --CERTIMATE_SSLDEPLOYER_WEBHOOK_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLDEPLOYER_WEBHOOK_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLDEPLOYER_WEBHOOK_URL="https://example.com/your-webhook-url" \ + --CERTIMATE_SSLDEPLOYER_WEBHOOK_CONTENTTYPE="application/json" \ + --CERTIMATE_SSLDEPLOYER_WEBHOOK_DATA="{\"certificate\":\"${CERTIFICATE}\",\"privateKey\":\"${PRIVATE_KEY}\"}" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -52,7 +52,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("WEBHOOKDATA: %v", fWebhookData), }, "\n")) - deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + deployer, err := provider.NewSSLDeployerProvider(&provider.SSLDeployerProviderConfig{ WebhookUrl: fWebhookUrl, WebhookData: fWebhookData, Method: "POST", diff --git a/internal/pkg/core/uploader/providers/1panel-ssl/1panel_ssl.go b/internal/pkg/core/ssl-manager/providers/1panel-ssl/1panel_ssl.go similarity index 76% rename from internal/pkg/core/uploader/providers/1panel-ssl/1panel_ssl.go rename to internal/pkg/core/ssl-manager/providers/1panel-ssl/1panel_ssl.go index 8eeabd86..05fd7c38 100644 --- a/internal/pkg/core/uploader/providers/1panel-ssl/1panel_ssl.go +++ b/internal/pkg/core/ssl-manager/providers/1panel-ssl/1panel_ssl.go @@ -3,17 +3,18 @@ package onepanelssl import ( "context" "crypto/tls" + "errors" "fmt" "log/slog" "strings" "time" - "github.com/usual2970/certimate/internal/pkg/core/uploader" + "github.com/usual2970/certimate/internal/pkg/core" onepanelsdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/1panel" onepanelsdkv2 "github.com/usual2970/certimate/internal/pkg/sdk3rd/1panel/v2" ) -type UploaderConfig struct { +type SSLManagerProviderConfig struct { // 1Panel 服务地址。 ServerUrl string `json:"serverUrl"` // 1Panel 版本。 @@ -24,46 +25,45 @@ type UploaderConfig struct { AllowInsecureConnections bool `json:"allowInsecureConnections,omitempty"` } -type UploaderProvider struct { - config *UploaderConfig +type SSLManagerProvider struct { + config *SSLManagerProviderConfig logger *slog.Logger sdkClient any } -var _ uploader.Uploader = (*UploaderProvider)(nil) +var _ core.SSLManager = (*SSLManagerProvider)(nil) -func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { +func NewSSLManagerProvider(config *SSLManagerProviderConfig) (*SSLManagerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl manager provider is nil") } - client, err := createSdkClient(config.ServerUrl, config.ApiVersion, config.ApiKey, config.AllowInsecureConnections) + client, err := createSDKClient(config.ServerUrl, config.ApiVersion, config.ApiKey, config.AllowInsecureConnections) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &UploaderProvider{ + return &SSLManagerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { +func (m *SSLManagerProvider) SetLogger(logger *slog.Logger) { if logger == nil { - u.logger = slog.New(slog.DiscardHandler) + m.logger = slog.New(slog.DiscardHandler) } else { - u.logger = logger + m.logger = logger } - return u } -func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*uploader.UploadResult, error) { +func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLManageUploadResult, error) { // 遍历证书列表,避免重复上传 - if res, err := u.findCertIfExists(ctx, certPEM, privkeyPEM); err != nil { + if res, err := m.findCertIfExists(ctx, certPEM, privkeyPEM); err != nil { return nil, err } else if res != nil { - u.logger.Info("ssl certificate already exists") + m.logger.Info("ssl certificate already exists") return res, nil } @@ -71,7 +71,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE certName := fmt.Sprintf("certimate-%d", time.Now().UnixMilli()) // 上传证书 - switch sdkClient := u.sdkClient.(type) { + switch sdkClient := m.sdkClient.(type) { case *onepanelsdk.Client: { uploadWebsiteSSLReq := &onepanelsdk.UploadWebsiteSSLRequest{ @@ -81,7 +81,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE PrivateKey: privkeyPEM, } uploadWebsiteSSLResp, err := sdkClient.UploadWebsiteSSL(uploadWebsiteSSLReq) - u.logger.Debug("sdk request '1panel.UploadWebsiteSSL'", slog.Any("request", uploadWebsiteSSLReq), slog.Any("response", uploadWebsiteSSLResp)) + m.logger.Debug("sdk request '1panel.UploadWebsiteSSL'", slog.Any("request", uploadWebsiteSSLReq), slog.Any("response", uploadWebsiteSSLResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request '1panel.UploadWebsiteSSL': %w", err) } @@ -96,7 +96,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE PrivateKey: privkeyPEM, } uploadWebsiteSSLResp, err := sdkClient.UploadWebsiteSSL(uploadWebsiteSSLReq) - u.logger.Debug("sdk request '1panel.UploadWebsiteSSL'", slog.Any("request", uploadWebsiteSSLReq), slog.Any("response", uploadWebsiteSSLResp)) + m.logger.Debug("sdk request '1panel.UploadWebsiteSSL'", slog.Any("request", uploadWebsiteSSLReq), slog.Any("response", uploadWebsiteSSLResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request '1panel.UploadWebsiteSSL': %w", err) } @@ -107,7 +107,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE } // 遍历证书列表,获取刚刚上传证书 ID - if res, err := u.findCertIfExists(ctx, certPEM, privkeyPEM); err != nil { + if res, err := m.findCertIfExists(ctx, certPEM, privkeyPEM); err != nil { return nil, err } else if res == nil { return nil, fmt.Errorf("no ssl certificate found, may be upload failed") @@ -116,7 +116,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE } } -func (u *UploaderProvider) findCertIfExists(ctx context.Context, certPEM string, privkeyPEM string) (*uploader.UploadResult, error) { +func (m *SSLManagerProvider) findCertIfExists(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLManageUploadResult, error) { searchWebsiteSSLPageNumber := int32(1) searchWebsiteSSLPageSize := int32(100) searchWebsiteSSLItemsCount := int32(0) @@ -127,7 +127,7 @@ func (u *UploaderProvider) findCertIfExists(ctx context.Context, certPEM string, default: } - switch sdkClient := u.sdkClient.(type) { + switch sdkClient := m.sdkClient.(type) { case *onepanelsdk.Client: { searchWebsiteSSLReq := &onepanelsdk.SearchWebsiteSSLRequest{ @@ -135,7 +135,7 @@ func (u *UploaderProvider) findCertIfExists(ctx context.Context, certPEM string, PageSize: searchWebsiteSSLPageSize, } searchWebsiteSSLResp, err := sdkClient.SearchWebsiteSSL(searchWebsiteSSLReq) - u.logger.Debug("sdk request '1panel.SearchWebsiteSSL'", slog.Any("request", searchWebsiteSSLReq), slog.Any("response", searchWebsiteSSLResp)) + m.logger.Debug("sdk request '1panel.SearchWebsiteSSL'", slog.Any("request", searchWebsiteSSLReq), slog.Any("response", searchWebsiteSSLResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request '1panel.SearchWebsiteSSL': %w", err) } @@ -145,7 +145,7 @@ func (u *UploaderProvider) findCertIfExists(ctx context.Context, certPEM string, if strings.TrimSpace(sslItem.PEM) == strings.TrimSpace(certPEM) && strings.TrimSpace(sslItem.PrivateKey) == strings.TrimSpace(privkeyPEM) { // 如果已存在相同证书,直接返回 - return &uploader.UploadResult{ + return &core.SSLManageUploadResult{ CertId: fmt.Sprintf("%d", sslItem.ID), CertName: sslItem.Description, }, nil @@ -163,7 +163,7 @@ func (u *UploaderProvider) findCertIfExists(ctx context.Context, certPEM string, PageSize: searchWebsiteSSLPageSize, } searchWebsiteSSLResp, err := sdkClient.SearchWebsiteSSL(searchWebsiteSSLReq) - u.logger.Debug("sdk request '1panel.SearchWebsiteSSL'", slog.Any("request", searchWebsiteSSLReq), slog.Any("response", searchWebsiteSSLResp)) + m.logger.Debug("sdk request '1panel.SearchWebsiteSSL'", slog.Any("request", searchWebsiteSSLReq), slog.Any("response", searchWebsiteSSLResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request '1panel.SearchWebsiteSSL': %w", err) } @@ -173,7 +173,7 @@ func (u *UploaderProvider) findCertIfExists(ctx context.Context, certPEM string, if strings.TrimSpace(sslItem.PEM) == strings.TrimSpace(certPEM) && strings.TrimSpace(sslItem.PrivateKey) == strings.TrimSpace(privkeyPEM) { // 如果已存在相同证书,直接返回 - return &uploader.UploadResult{ + return &core.SSLManageUploadResult{ CertId: fmt.Sprintf("%d", sslItem.ID), CertName: sslItem.Description, }, nil @@ -203,7 +203,7 @@ const ( sdkVersionV2 = "v2" ) -func createSdkClient(serverUrl, apiVersion, apiKey string, skipTlsVerify bool) (any, error) { +func createSDKClient(serverUrl, apiVersion, apiKey string, skipTlsVerify bool) (any, error) { if apiVersion == sdkVersionV1 { client, err := onepanelsdk.NewClient(serverUrl, apiKey) if err != nil { diff --git a/internal/pkg/core/uploader/providers/1panel-ssl/1panel_ssl_test.go b/internal/pkg/core/ssl-manager/providers/1panel-ssl/1panel_ssl_test.go similarity index 67% rename from internal/pkg/core/uploader/providers/1panel-ssl/1panel_ssl_test.go rename to internal/pkg/core/ssl-manager/providers/1panel-ssl/1panel_ssl_test.go index d0af7c12..231ba30b 100644 --- a/internal/pkg/core/uploader/providers/1panel-ssl/1panel_ssl_test.go +++ b/internal/pkg/core/ssl-manager/providers/1panel-ssl/1panel_ssl_test.go @@ -9,7 +9,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/1panel-ssl" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/1panel-ssl" ) var ( @@ -21,7 +21,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_UPLOADER_1PANELSSL_" + argsPrefix := "CERTIMATE_SSLMANAGER_1PANELSSL_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -34,11 +34,11 @@ func init() { Shell command to run this test: go test -v ./1panel_ssl_test.go -args \ - --CERTIMATE_UPLOADER_1PANELSSL_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_UPLOADER_1PANELSSL_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_UPLOADER_1PANELSSL_SERVERURL="http://127.0.0.1:20410" \ - --CERTIMATE_UPLOADER_1PANELSSL_APIVERSION="v1" \ - --CERTIMATE_UPLOADER_1PANELSSL_APIKEY="your-api-key" + --CERTIMATE_SSLMANAGER_1PANELSSL_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLMANAGER_1PANELSSL_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLMANAGER_1PANELSSL_SERVERURL="http://127.0.0.1:20410" \ + --CERTIMATE_SSLMANAGER_1PANELSSL_APIVERSION="v1" \ + --CERTIMATE_SSLMANAGER_1PANELSSL_APIKEY="your-api-key" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -53,7 +53,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("APIKEY: %v", fApiKey), }, "\n")) - uploader, err := provider.NewUploader(&provider.UploaderConfig{ + sslmanager, err := provider.NewSSLManagerProvider(&provider.SSLManagerProviderConfig{ ServerUrl: fServerUrl, ApiVersion: fApiVersion, ApiKey: fApiKey, @@ -65,7 +65,7 @@ func TestDeploy(t *testing.T) { fInputCertData, _ := os.ReadFile(fInputCertPath) fInputKeyData, _ := os.ReadFile(fInputKeyPath) - res, err := uploader.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) + res, err := sslmanager.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) if err != nil { t.Errorf("err: %+v", err) return diff --git a/internal/pkg/core/uploader/providers/aliyun-cas/aliyun_cas.go b/internal/pkg/core/ssl-manager/providers/aliyun-cas/aliyun_cas.go similarity index 77% rename from internal/pkg/core/uploader/providers/aliyun-cas/aliyun_cas.go rename to internal/pkg/core/ssl-manager/providers/aliyun-cas/aliyun_cas.go index 8bcde0b4..1b9fcc53 100644 --- a/internal/pkg/core/uploader/providers/aliyun-cas/aliyun_cas.go +++ b/internal/pkg/core/ssl-manager/providers/aliyun-cas/aliyun_cas.go @@ -2,6 +2,7 @@ package aliyuncas import ( "context" + "errors" "fmt" "log/slog" "strings" @@ -11,12 +12,12 @@ import ( aliopen "github.com/alibabacloud-go/darabonba-openapi/v2/client" "github.com/alibabacloud-go/tea/tea" - "github.com/usual2970/certimate/internal/pkg/core/uploader" + "github.com/usual2970/certimate/internal/pkg/core" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type UploaderConfig struct { +type SSLManagerProviderConfig struct { // 阿里云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 阿里云 AccessKeySecret。 @@ -27,41 +28,40 @@ type UploaderConfig struct { Region string `json:"region"` } -type UploaderProvider struct { - config *UploaderConfig +type SSLManagerProvider struct { + config *SSLManagerProviderConfig logger *slog.Logger sdkClient *alicas.Client } -var _ uploader.Uploader = (*UploaderProvider)(nil) +var _ core.SSLManager = (*SSLManagerProvider)(nil) -func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { +func NewSSLManagerProvider(config *SSLManagerProviderConfig) (*SSLManagerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl manager provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret, config.Region) + client, err := createSDKClient(config.AccessKeyId, config.AccessKeySecret, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &UploaderProvider{ + return &SSLManagerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { +func (m *SSLManagerProvider) SetLogger(logger *slog.Logger) { if logger == nil { - u.logger = slog.New(slog.DiscardHandler) + m.logger = slog.New(slog.DiscardHandler) } else { - u.logger = logger + m.logger = logger } - return u } -func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*uploader.UploadResult, error) { +func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLManageUploadResult, error) { // 解析证书内容 certX509, err := xcert.ParseCertificateFromPEM(certPEM) if err != nil { @@ -81,13 +81,13 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE } listUserCertificateOrderReq := &alicas.ListUserCertificateOrderRequest{ - ResourceGroupId: xtypes.ToPtrOrZeroNil(u.config.ResourceGroupId), + ResourceGroupId: xtypes.ToPtrOrZeroNil(m.config.ResourceGroupId), CurrentPage: tea.Int64(listUserCertificateOrderPage), ShowSize: tea.Int64(listUserCertificateOrderLimit), OrderType: tea.String("CERT"), } - listUserCertificateOrderResp, err := u.sdkClient.ListUserCertificateOrder(listUserCertificateOrderReq) - u.logger.Debug("sdk request 'cas.ListUserCertificateOrder'", slog.Any("request", listUserCertificateOrderReq), slog.Any("response", listUserCertificateOrderResp)) + listUserCertificateOrderResp, err := m.sdkClient.ListUserCertificateOrder(listUserCertificateOrderReq) + 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) } @@ -101,8 +101,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE getUserCertificateDetailReq := &alicas.GetUserCertificateDetailRequest{ CertId: certDetail.CertificateId, } - getUserCertificateDetailResp, err := u.sdkClient.GetUserCertificateDetail(getUserCertificateDetailReq) - u.logger.Debug("sdk request 'cas.GetUserCertificateDetail'", slog.Any("request", getUserCertificateDetailReq), slog.Any("response", getUserCertificateDetailResp)) + getUserCertificateDetailResp, err := m.sdkClient.GetUserCertificateDetail(getUserCertificateDetailReq) + 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) } @@ -121,8 +121,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE // 如果已存在相同证书,直接返回 if isSameCert { - u.logger.Info("ssl certificate already exists") - return &uploader.UploadResult{ + m.logger.Info("ssl certificate already exists") + return &core.SSLManageUploadResult{ CertId: fmt.Sprintf("%d", tea.Int64Value(certDetail.CertificateId)), CertName: *certDetail.Name, ExtendedData: map[string]any{ @@ -147,13 +147,13 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE // 上传新证书 // REF: https://help.aliyun.com/zh/ssl-certificate/developer-reference/api-cas-2020-04-07-uploadusercertificate uploadUserCertificateReq := &alicas.UploadUserCertificateRequest{ - ResourceGroupId: xtypes.ToPtrOrZeroNil(u.config.ResourceGroupId), + ResourceGroupId: xtypes.ToPtrOrZeroNil(m.config.ResourceGroupId), Name: tea.String(certName), Cert: tea.String(certPEM), Key: tea.String(privkeyPEM), } - uploadUserCertificateResp, err := u.sdkClient.UploadUserCertificate(uploadUserCertificateReq) - u.logger.Debug("sdk request 'cas.UploadUserCertificate'", slog.Any("request", uploadUserCertificateReq), slog.Any("response", uploadUserCertificateResp)) + uploadUserCertificateResp, err := m.sdkClient.UploadUserCertificate(uploadUserCertificateReq) + 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,13 +164,13 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE CertId: uploadUserCertificateResp.Body.CertId, CertFilter: tea.Bool(true), } - getUserCertificateDetailResp, err := u.sdkClient.GetUserCertificateDetail(getUserCertificateDetailReq) - u.logger.Debug("sdk request 'cas.GetUserCertificateDetail'", slog.Any("request", getUserCertificateDetailReq), slog.Any("response", getUserCertificateDetailResp)) + getUserCertificateDetailResp, err := m.sdkClient.GetUserCertificateDetail(getUserCertificateDetailReq) + 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) } - return &uploader.UploadResult{ + return &core.SSLManageUploadResult{ CertId: fmt.Sprintf("%d", tea.Int64Value(getUserCertificateDetailResp.Body.Id)), CertName: certName, ExtendedData: map[string]any{ @@ -180,7 +180,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE }, nil } -func createSdkClient(accessKeyId, accessKeySecret, region string) (*alicas.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (*alicas.Client, error) { // 接入点一览 https://api.aliyun.com/product/cas var endpoint string switch region { diff --git a/internal/pkg/core/uploader/providers/aliyun-slb/aliyun_slb.go b/internal/pkg/core/ssl-manager/providers/aliyun-slb/aliyun_slb.go similarity index 71% rename from internal/pkg/core/uploader/providers/aliyun-slb/aliyun_slb.go rename to internal/pkg/core/ssl-manager/providers/aliyun-slb/aliyun_slb.go index 861a5df3..65dfebd1 100644 --- a/internal/pkg/core/uploader/providers/aliyun-slb/aliyun_slb.go +++ b/internal/pkg/core/ssl-manager/providers/aliyun-slb/aliyun_slb.go @@ -4,6 +4,7 @@ import ( "context" "crypto/sha256" "encoding/hex" + "errors" "fmt" "log/slog" "regexp" @@ -14,12 +15,12 @@ import ( alislb "github.com/alibabacloud-go/slb-20140515/v4/client" "github.com/alibabacloud-go/tea/tea" - "github.com/usual2970/certimate/internal/pkg/core/uploader" + "github.com/usual2970/certimate/internal/pkg/core" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type UploaderConfig struct { +type SSLManagerProviderConfig struct { // 阿里云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 阿里云 AccessKeySecret。 @@ -30,41 +31,40 @@ type UploaderConfig struct { Region string `json:"region"` } -type UploaderProvider struct { - config *UploaderConfig +type SSLManagerProvider struct { + config *SSLManagerProviderConfig logger *slog.Logger sdkClient *alislb.Client } -var _ uploader.Uploader = (*UploaderProvider)(nil) +var _ core.SSLManager = (*SSLManagerProvider)(nil) -func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { +func NewSSLManagerProvider(config *SSLManagerProviderConfig) (*SSLManagerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl manager provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret, config.Region) + client, err := createSDKClient(config.AccessKeyId, config.AccessKeySecret, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &UploaderProvider{ + return &SSLManagerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { +func (m *SSLManagerProvider) SetLogger(logger *slog.Logger) { if logger == nil { - u.logger = slog.New(slog.DiscardHandler) + m.logger = slog.New(slog.DiscardHandler) } else { - u.logger = logger + m.logger = logger } - return u } -func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*uploader.UploadResult, error) { +func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLManageUploadResult, error) { // 解析证书内容 certX509, err := xcert.ParseCertificateFromPEM(certPEM) if err != nil { @@ -74,11 +74,11 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE // 查询证书列表,避免重复上传 // REF: https://help.aliyun.com/zh/slb/classic-load-balancer/developer-reference/api-slb-2014-05-15-describeservercertificates describeServerCertificatesReq := &alislb.DescribeServerCertificatesRequest{ - ResourceGroupId: xtypes.ToPtrOrZeroNil(u.config.ResourceGroupId), - RegionId: tea.String(u.config.Region), + ResourceGroupId: xtypes.ToPtrOrZeroNil(m.config.ResourceGroupId), + RegionId: tea.String(m.config.Region), } - describeServerCertificatesResp, err := u.sdkClient.DescribeServerCertificates(describeServerCertificatesReq) - u.logger.Debug("sdk request 'slb.DescribeServerCertificates'", slog.Any("request", describeServerCertificatesReq), slog.Any("response", describeServerCertificatesResp)) + describeServerCertificatesResp, err := m.sdkClient.DescribeServerCertificates(describeServerCertificatesReq) + m.logger.Debug("sdk request 'slb.DescribeServerCertificates'", slog.Any("request", describeServerCertificatesReq), slog.Any("response", describeServerCertificatesResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'slb.DescribeServerCertificates': %w", err) } @@ -92,8 +92,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE strings.EqualFold(certX509.Subject.CommonName, *certDetail.CommonName) // 如果已存在相同证书,直接返回 if isSameCert { - u.logger.Info("ssl certificate already exists") - return &uploader.UploadResult{ + m.logger.Info("ssl certificate already exists") + return &core.SSLManageUploadResult{ CertId: *certDetail.ServerCertificateId, CertName: *certDetail.ServerCertificateName, }, nil @@ -102,8 +102,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE } // 生成新证书名(需符合阿里云命名规则) - var certId, certName string - certName = fmt.Sprintf("certimate_%d", time.Now().UnixMilli()) + certName := fmt.Sprintf("certimate_%d", time.Now().UnixMilli()) // 去除证书和私钥内容中的空白行,以符合阿里云 API 要求 // REF: https://github.com/usual2970/certimate/issues/326 @@ -114,26 +113,25 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE // 上传新证书 // REF: https://help.aliyun.com/zh/slb/classic-load-balancer/developer-reference/api-slb-2014-05-15-uploadservercertificate uploadServerCertificateReq := &alislb.UploadServerCertificateRequest{ - ResourceGroupId: xtypes.ToPtrOrZeroNil(u.config.ResourceGroupId), - RegionId: tea.String(u.config.Region), + ResourceGroupId: xtypes.ToPtrOrZeroNil(m.config.ResourceGroupId), + RegionId: tea.String(m.config.Region), ServerCertificateName: tea.String(certName), ServerCertificate: tea.String(certPEM), PrivateKey: tea.String(privkeyPEM), } - uploadServerCertificateResp, err := u.sdkClient.UploadServerCertificate(uploadServerCertificateReq) - u.logger.Debug("sdk request 'slb.UploadServerCertificate'", slog.Any("request", uploadServerCertificateReq), slog.Any("response", uploadServerCertificateResp)) + uploadServerCertificateResp, err := m.sdkClient.UploadServerCertificate(uploadServerCertificateReq) + m.logger.Debug("sdk request 'slb.UploadServerCertificate'", slog.Any("request", uploadServerCertificateReq), slog.Any("response", uploadServerCertificateResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'slb.UploadServerCertificate': %w", err) } - certId = *uploadServerCertificateResp.Body.ServerCertificateId - return &uploader.UploadResult{ - CertId: certId, + return &core.SSLManageUploadResult{ + CertId: *uploadServerCertificateResp.Body.ServerCertificateId, CertName: certName, }, nil } -func createSdkClient(accessKeyId, accessKeySecret, region string) (*alislb.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (*alislb.Client, error) { // 接入点一览 https://api.aliyun.com/product/Slb var endpoint string switch region { diff --git a/internal/pkg/core/uploader/providers/aws-acm/aws_acm.go b/internal/pkg/core/ssl-manager/providers/aws-acm/aws_acm.go similarity index 75% rename from internal/pkg/core/uploader/providers/aws-acm/aws_acm.go rename to internal/pkg/core/ssl-manager/providers/aws-acm/aws_acm.go index 739c70b1..e5092e09 100644 --- a/internal/pkg/core/uploader/providers/aws-acm/aws_acm.go +++ b/internal/pkg/core/ssl-manager/providers/aws-acm/aws_acm.go @@ -2,6 +2,7 @@ package awsacm import ( "context" + "errors" "fmt" "log/slog" @@ -11,11 +12,11 @@ import ( awsacm "github.com/aws/aws-sdk-go-v2/service/acm" "golang.org/x/exp/slices" - "github.com/usual2970/certimate/internal/pkg/core/uploader" + "github.com/usual2970/certimate/internal/pkg/core" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" ) -type UploaderConfig struct { +type SSLManagerProviderConfig struct { // AWS AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // AWS SecretAccessKey。 @@ -24,41 +25,40 @@ type UploaderConfig struct { Region string `json:"region"` } -type UploaderProvider struct { - config *UploaderConfig +type SSLManagerProvider struct { + config *SSLManagerProviderConfig logger *slog.Logger sdkClient *awsacm.Client } -var _ uploader.Uploader = (*UploaderProvider)(nil) +var _ core.SSLManager = (*SSLManagerProvider)(nil) -func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { +func NewSSLManagerProvider(config *SSLManagerProviderConfig) (*SSLManagerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl manager provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.SecretAccessKey, config.Region) + client, err := createSDKClient(config.AccessKeyId, config.SecretAccessKey, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &UploaderProvider{ + return &SSLManagerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { +func (m *SSLManagerProvider) SetLogger(logger *slog.Logger) { if logger == nil { - u.logger = slog.New(slog.DiscardHandler) + m.logger = slog.New(slog.DiscardHandler) } else { - u.logger = logger + m.logger = logger } - return u } -func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*uploader.UploadResult, error) { +func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLManageUploadResult, error) { // 解析证书内容 certX509, err := xcert.ParseCertificateFromPEM(certPEM) if err != nil { @@ -86,8 +86,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE NextToken: listCertificatesNextToken, MaxItems: aws.Int32(listCertificatesMaxItems), } - listCertificatesResp, err := u.sdkClient.ListCertificates(context.TODO(), listCertificatesReq) - u.logger.Debug("sdk request 'acm.ListCertificates'", slog.Any("request", listCertificatesReq), slog.Any("response", listCertificatesResp)) + listCertificatesResp, err := m.sdkClient.ListCertificates(context.TODO(), listCertificatesReq) + m.logger.Debug("sdk request 'acm.ListCertificates'", slog.Any("request", listCertificatesReq), slog.Any("response", listCertificatesResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'acm.ListCertificates': %w", err) } @@ -111,7 +111,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE getCertificateReq := &awsacm.GetCertificateInput{ CertificateArn: certSummary.CertificateArn, } - getCertificateResp, err := u.sdkClient.GetCertificate(context.TODO(), getCertificateReq) + getCertificateResp, err := m.sdkClient.GetCertificate(context.TODO(), getCertificateReq) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'acm.GetCertificate': %w", err) } else { @@ -127,8 +127,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE } // 如果以上信息都一致,则视为已存在相同证书,直接返回 - u.logger.Info("ssl certificate already exists") - return &uploader.UploadResult{ + m.logger.Info("ssl certificate already exists") + return &core.SSLManageUploadResult{ CertId: *certSummary.CertificateArn, }, nil } @@ -147,18 +147,18 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE CertificateChain: ([]byte)(intermediaCertPEM), PrivateKey: ([]byte)(privkeyPEM), } - importCertificateResp, err := u.sdkClient.ImportCertificate(context.TODO(), importCertificateReq) - u.logger.Debug("sdk request 'acm.ImportCertificate'", slog.Any("request", importCertificateReq), slog.Any("response", importCertificateResp)) + importCertificateResp, err := m.sdkClient.ImportCertificate(context.TODO(), importCertificateReq) + m.logger.Debug("sdk request 'acm.ImportCertificate'", slog.Any("request", importCertificateReq), slog.Any("response", importCertificateResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'acm.ImportCertificate': %w", err) } - return &uploader.UploadResult{ + return &core.SSLManageUploadResult{ CertId: aws.ToString(importCertificateResp.CertificateArn), }, nil } -func createSdkClient(accessKeyId, secretAccessKey, region string) (*awsacm.Client, error) { +func createSDKClient(accessKeyId, secretAccessKey, region string) (*awsacm.Client, error) { cfg, err := awscfg.LoadDefaultConfig(context.TODO()) if err != nil { return nil, err diff --git a/internal/pkg/core/uploader/providers/aws-iam/aws_iam.go b/internal/pkg/core/ssl-manager/providers/aws-iam/aws_iam.go similarity index 74% rename from internal/pkg/core/uploader/providers/aws-iam/aws_iam.go rename to internal/pkg/core/ssl-manager/providers/aws-iam/aws_iam.go index e7487c01..c20dfb0e 100644 --- a/internal/pkg/core/uploader/providers/aws-iam/aws_iam.go +++ b/internal/pkg/core/ssl-manager/providers/aws-iam/aws_iam.go @@ -2,6 +2,7 @@ package awsiam import ( "context" + "errors" "fmt" "log/slog" "time" @@ -11,11 +12,11 @@ import ( awscred "github.com/aws/aws-sdk-go-v2/credentials" awsiam "github.com/aws/aws-sdk-go-v2/service/iam" - "github.com/usual2970/certimate/internal/pkg/core/uploader" + "github.com/usual2970/certimate/internal/pkg/core" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" ) -type UploaderConfig struct { +type SSLManagerProviderConfig struct { // AWS AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // AWS SecretAccessKey。 @@ -27,41 +28,40 @@ type UploaderConfig struct { CertificatePath string `json:"certificatePath,omitempty"` } -type UploaderProvider struct { - config *UploaderConfig +type SSLManagerProvider struct { + config *SSLManagerProviderConfig logger *slog.Logger sdkClient *awsiam.Client } -var _ uploader.Uploader = (*UploaderProvider)(nil) +var _ core.SSLManager = (*SSLManagerProvider)(nil) -func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { +func NewSSLManagerProvider(config *SSLManagerProviderConfig) (*SSLManagerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl manager provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.SecretAccessKey, config.Region) + client, err := createSDKClient(config.AccessKeyId, config.SecretAccessKey, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &UploaderProvider{ + return &SSLManagerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { +func (m *SSLManagerProvider) SetLogger(logger *slog.Logger) { if logger == nil { - u.logger = slog.New(slog.DiscardHandler) + m.logger = slog.New(slog.DiscardHandler) } else { - u.logger = logger + m.logger = logger } - return u } -func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*uploader.UploadResult, error) { +func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLManageUploadResult, error) { // 解析证书内容 certX509, err := xcert.ParseCertificateFromPEM(certPEM) if err != nil { @@ -89,18 +89,18 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE Marker: listServerCertificatesMarker, MaxItems: aws.Int32(listServerCertificatesMaxItems), } - if u.config.CertificatePath != "" { - listServerCertificatesReq.PathPrefix = aws.String(u.config.CertificatePath) + if m.config.CertificatePath != "" { + listServerCertificatesReq.PathPrefix = aws.String(m.config.CertificatePath) } - listServerCertificatesResp, err := u.sdkClient.ListServerCertificates(context.TODO(), listServerCertificatesReq) - u.logger.Debug("sdk request 'iam.ListServerCertificates'", slog.Any("request", listServerCertificatesReq), slog.Any("response", listServerCertificatesResp)) + listServerCertificatesResp, err := m.sdkClient.ListServerCertificates(context.TODO(), listServerCertificatesReq) + m.logger.Debug("sdk request 'iam.ListServerCertificates'", slog.Any("request", listServerCertificatesReq), slog.Any("response", listServerCertificatesResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'iam.ListServerCertificates': %w", err) } for _, certMeta := range listServerCertificatesResp.ServerCertificateMetadataList { // 先对比证书路径 - if u.config.CertificatePath != "" && aws.ToString(certMeta.Path) != u.config.CertificatePath { + if m.config.CertificatePath != "" && aws.ToString(certMeta.Path) != m.config.CertificatePath { continue } @@ -114,7 +114,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE getServerCertificateReq := &awsiam.GetServerCertificateInput{ ServerCertificateName: certMeta.ServerCertificateName, } - getServerCertificateResp, err := u.sdkClient.GetServerCertificate(context.TODO(), getServerCertificateReq) + getServerCertificateResp, err := m.sdkClient.GetServerCertificate(context.TODO(), getServerCertificateReq) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'iam.GetServerCertificate': %w", err) } else { @@ -130,8 +130,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE } // 如果以上信息都一致,则视为已存在相同证书,直接返回 - u.logger.Info("ssl certificate already exists") - return &uploader.UploadResult{ + m.logger.Info("ssl certificate already exists") + return &core.SSLManageUploadResult{ CertId: aws.ToString(certMeta.ServerCertificateId), CertName: aws.ToString(certMeta.ServerCertificateName), }, nil @@ -151,27 +151,27 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE // REF: https://docs.aws.amazon.com/en_us/IAM/latest/APIReference/API_UploadServerCertificate.html uploadServerCertificateReq := &awsiam.UploadServerCertificateInput{ ServerCertificateName: aws.String(certName), - Path: aws.String(u.config.CertificatePath), + Path: aws.String(m.config.CertificatePath), CertificateBody: aws.String(serverCertPEM), CertificateChain: aws.String(intermediaCertPEM), PrivateKey: aws.String(privkeyPEM), } - if u.config.CertificatePath == "" { + if m.config.CertificatePath == "" { uploadServerCertificateReq.Path = aws.String("/") } - uploadServerCertificateResp, err := u.sdkClient.UploadServerCertificate(context.TODO(), uploadServerCertificateReq) - u.logger.Debug("sdk request 'iam.UploadServerCertificate'", slog.Any("request", uploadServerCertificateReq), slog.Any("response", uploadServerCertificateResp)) + uploadServerCertificateResp, err := m.sdkClient.UploadServerCertificate(context.TODO(), uploadServerCertificateReq) + m.logger.Debug("sdk request 'iam.UploadServerCertificate'", slog.Any("request", uploadServerCertificateReq), slog.Any("response", uploadServerCertificateResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'iam.UploadServerCertificate': %w", err) } - return &uploader.UploadResult{ + return &core.SSLManageUploadResult{ CertId: aws.ToString(uploadServerCertificateResp.ServerCertificateMetadata.ServerCertificateId), CertName: certName, }, nil } -func createSdkClient(accessKeyId, secretAccessKey, region string) (*awsiam.Client, error) { +func createSDKClient(accessKeyId, secretAccessKey, region string) (*awsiam.Client, error) { cfg, err := awscfg.LoadDefaultConfig(context.TODO()) if err != nil { return nil, err diff --git a/internal/pkg/core/uploader/providers/azure-keyvault/azure_keyvault.go b/internal/pkg/core/ssl-manager/providers/azure-keyvault/azure_keyvault.go similarity index 80% rename from internal/pkg/core/uploader/providers/azure-keyvault/azure_keyvault.go rename to internal/pkg/core/ssl-manager/providers/azure-keyvault/azure_keyvault.go index c6387146..d7249ae3 100644 --- a/internal/pkg/core/uploader/providers/azure-keyvault/azure_keyvault.go +++ b/internal/pkg/core/ssl-manager/providers/azure-keyvault/azure_keyvault.go @@ -4,6 +4,7 @@ import ( "context" "crypto/x509" "encoding/base64" + "errors" "fmt" "log/slog" "time" @@ -13,12 +14,12 @@ import ( "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azcertificates" - "github.com/usual2970/certimate/internal/pkg/core/uploader" + "github.com/usual2970/certimate/internal/pkg/core" azenv "github.com/usual2970/certimate/internal/pkg/sdk3rd/azure/env" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" ) -type UploaderConfig struct { +type SSLManagerProviderConfig struct { // Azure TenantId。 TenantId string `json:"tenantId"` // Azure ClientId。 @@ -31,41 +32,40 @@ type UploaderConfig struct { KeyVaultName string `json:"keyvaultName"` } -type UploaderProvider struct { - config *UploaderConfig +type SSLManagerProvider struct { + config *SSLManagerProviderConfig logger *slog.Logger sdkClient *azcertificates.Client } -var _ uploader.Uploader = (*UploaderProvider)(nil) +var _ core.SSLManager = (*SSLManagerProvider)(nil) -func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { +func NewSSLManagerProvider(config *SSLManagerProviderConfig) (*SSLManagerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl manager provider is nil") } - client, err := createSdkClient(config.TenantId, config.ClientId, config.ClientSecret, config.CloudName, config.KeyVaultName) + client, err := createSDKClient(config.TenantId, config.ClientId, config.ClientSecret, config.CloudName, config.KeyVaultName) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &UploaderProvider{ + return &SSLManagerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { +func (m *SSLManagerProvider) SetLogger(logger *slog.Logger) { if logger == nil { - u.logger = slog.New(slog.DiscardHandler) + m.logger = slog.New(slog.DiscardHandler) } else { - u.logger = logger + m.logger = logger } - return u } -func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*uploader.UploadResult, error) { +func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLManageUploadResult, error) { // 解析证书内容 certX509, err := xcert.ParseCertificateFromPEM(certPEM) if err != nil { @@ -80,7 +80,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE // 获取证书列表,避免重复上传 // REF: https://learn.microsoft.com/en-us/rest/api/keyvault/certificates/get-certificates/get-certificates - listCertificatesPager := u.sdkClient.NewListCertificatePropertiesPager(nil) + listCertificatesPager := m.sdkClient.NewListCertificatePropertiesPager(nil) for listCertificatesPager.More() { page, err := listCertificatesPager.NextPage(context.TODO()) if err != nil { @@ -114,8 +114,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE } // 最后对比证书内容 - getCertificateResp, err := u.sdkClient.GetCertificate(context.TODO(), certProp.ID.Name(), certProp.ID.Version(), nil) - u.logger.Debug("sdk request 'keyvault.GetCertificate'", slog.String("request.certificateName", certProp.ID.Name()), slog.String("request.certificateVersion", certProp.ID.Version()), slog.Any("response", getCertificateResp)) + getCertificateResp, err := m.sdkClient.GetCertificate(context.TODO(), certProp.ID.Name(), certProp.ID.Version(), nil) + m.logger.Debug("sdk request 'keyvault.GetCertificate'", slog.String("request.certificateName", certProp.ID.Name()), slog.String("request.certificateVersion", certProp.ID.Version()), slog.Any("response", getCertificateResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'keyvault.GetCertificate': %w", err) } else { @@ -130,8 +130,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE } // 如果以上信息都一致,则视为已存在相同证书,直接返回 - u.logger.Info("ssl certificate already exists") - return &uploader.UploadResult{ + m.logger.Info("ssl certificate already exists") + return &core.SSLManageUploadResult{ CertId: string(*certProp.ID), CertName: certProp.ID.Name(), }, nil @@ -163,19 +163,19 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE TAG_CERTSN: to.Ptr(certSN), }, } - importCertificateResp, err := u.sdkClient.ImportCertificate(context.TODO(), certName, importCertificateParams, nil) - u.logger.Debug("sdk request 'keyvault.ImportCertificate'", slog.String("request.certificateName", certName), slog.Any("request.parameters", importCertificateParams), slog.Any("response", importCertificateResp)) + importCertificateResp, err := m.sdkClient.ImportCertificate(context.TODO(), certName, importCertificateParams, nil) + m.logger.Debug("sdk request 'keyvault.ImportCertificate'", slog.String("request.certificateName", certName), slog.Any("request.parameters", importCertificateParams), slog.Any("response", importCertificateResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'keyvault.ImportCertificate': %w", err) } - return &uploader.UploadResult{ + return &core.SSLManageUploadResult{ CertId: string(*importCertificateResp.ID), CertName: certName, }, nil } -func createSdkClient(tenantId, clientId, clientSecret, cloudName, keyvaultName string) (*azcertificates.Client, error) { +func createSDKClient(tenantId, clientId, clientSecret, cloudName, keyvaultName string) (*azcertificates.Client, error) { env, err := azenv.GetCloudEnvConfiguration(cloudName) if err != nil { return nil, err diff --git a/internal/pkg/core/uploader/providers/azure-keyvault/azure_keyvault_test.go b/internal/pkg/core/ssl-manager/providers/azure-keyvault/azure_keyvault_test.go similarity index 66% rename from internal/pkg/core/uploader/providers/azure-keyvault/azure_keyvault_test.go rename to internal/pkg/core/ssl-manager/providers/azure-keyvault/azure_keyvault_test.go index 492f7e5c..025de772 100644 --- a/internal/pkg/core/uploader/providers/azure-keyvault/azure_keyvault_test.go +++ b/internal/pkg/core/ssl-manager/providers/azure-keyvault/azure_keyvault_test.go @@ -9,7 +9,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/azure-keyvault" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/azure-keyvault" ) var ( @@ -23,7 +23,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_UPLOADER_AZUREKEYVAULT_" + argsPrefix := "CERTIMATE_SSLMANAGER_AZUREKEYVAULT_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -38,13 +38,13 @@ func init() { Shell command to run this test: go test -v ./azure_keyvault_test.go -args \ - --CERTIMATE_UPLOADER_AZUREKEYVAULT_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_UPLOADER_AZUREKEYVAULT_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_UPLOADER_AZUREKEYVAULT_TENANTID="your-tenant-id" \ - --CERTIMATE_UPLOADER_AZUREKEYVAULT_CLIENTID="your-app-registration-client-id" \ - --CERTIMATE_UPLOADER_AZUREKEYVAULT_CLIENTSECRET="your-app-registration-client-secret" \ - --CERTIMATE_UPLOADER_AZUREKEYVAULT_CLOUDNAME="china" \ - --CERTIMATE_UPLOADER_AZUREKEYVAULT_KEYVAULTNAME="your-keyvault-name" + --CERTIMATE_SSLMANAGER_AZUREKEYVAULT_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLMANAGER_AZUREKEYVAULT_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLMANAGER_AZUREKEYVAULT_TENANTID="your-tenant-id" \ + --CERTIMATE_SSLMANAGER_AZUREKEYVAULT_CLIENTID="your-app-registration-client-id" \ + --CERTIMATE_SSLMANAGER_AZUREKEYVAULT_CLIENTSECRET="your-app-registration-client-secret" \ + --CERTIMATE_SSLMANAGER_AZUREKEYVAULT_CLOUDNAME="china" \ + --CERTIMATE_SSLMANAGER_AZUREKEYVAULT_KEYVAULTNAME="your-keyvault-name" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -61,7 +61,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("KEYVAULTNAME: %v", fKeyVaultName), }, "\n")) - uploader, err := provider.NewUploader(&provider.UploaderConfig{ + sslmanager, err := provider.NewSSLManagerProvider(&provider.SSLManagerProviderConfig{ TenantId: fTenantId, ClientId: fClientId, ClientSecret: fClientSecret, @@ -75,7 +75,7 @@ func TestDeploy(t *testing.T) { fInputCertData, _ := os.ReadFile(fInputCertPath) fInputKeyData, _ := os.ReadFile(fInputKeyPath) - res, err := uploader.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) + res, err := sslmanager.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) if err != nil { t.Errorf("err: %+v", err) return diff --git a/internal/pkg/core/uploader/providers/baiducloud-cert/baiducloud_cert.go b/internal/pkg/core/ssl-manager/providers/baiducloud-cert/baiducloud_cert.go similarity index 68% rename from internal/pkg/core/uploader/providers/baiducloud-cert/baiducloud_cert.go rename to internal/pkg/core/ssl-manager/providers/baiducloud-cert/baiducloud_cert.go index 2d01b01a..34d189f2 100644 --- a/internal/pkg/core/uploader/providers/baiducloud-cert/baiducloud_cert.go +++ b/internal/pkg/core/ssl-manager/providers/baiducloud-cert/baiducloud_cert.go @@ -2,58 +2,58 @@ package baiducloudcert import ( "context" + "errors" "fmt" "log/slog" "strings" "time" - "github.com/usual2970/certimate/internal/pkg/core/uploader" + "github.com/usual2970/certimate/internal/pkg/core" bdsdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/baiducloud/cert" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" ) -type UploaderConfig struct { +type SSLManagerProviderConfig struct { // 百度智能云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 百度智能云 SecretAccessKey。 SecretAccessKey string `json:"secretAccessKey"` } -type UploaderProvider struct { - config *UploaderConfig +type SSLManagerProvider struct { + config *SSLManagerProviderConfig logger *slog.Logger sdkClient *bdsdk.Client } -var _ uploader.Uploader = (*UploaderProvider)(nil) +var _ core.SSLManager = (*SSLManagerProvider)(nil) -func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { +func NewSSLManagerProvider(config *SSLManagerProviderConfig) (*SSLManagerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl manager provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.SecretAccessKey) + client, err := createSDKClient(config.AccessKeyId, config.SecretAccessKey) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &UploaderProvider{ + return &SSLManagerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { +func (m *SSLManagerProvider) SetLogger(logger *slog.Logger) { if logger == nil { - u.logger = slog.New(slog.DiscardHandler) + m.logger = slog.New(slog.DiscardHandler) } else { - u.logger = logger + m.logger = logger } - return u } -func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*uploader.UploadResult, error) { +func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLManageUploadResult, error) { // 解析证书内容 certX509, err := xcert.ParseCertificateFromPEM(certPEM) if err != nil { @@ -62,8 +62,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE // 遍历证书列表,避免重复上传 // REF: https://cloud.baidu.com/doc/Reference/s/Gjwvz27xu#35-%E6%9F%A5%E7%9C%8B%E8%AF%81%E4%B9%A6%E5%88%97%E8%A1%A8%E8%AF%A6%E6%83%85 - listCertDetail, err := u.sdkClient.ListCertDetail() - u.logger.Debug("sdk request 'cert.ListCertDetail'", slog.Any("response", listCertDetail)) + listCertDetail, err := m.sdkClient.ListCertDetail() + m.logger.Debug("sdk request 'cert.ListCertDetail'", slog.Any("response", listCertDetail)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'cert.ListCertDetail': %w", err) } else { @@ -86,8 +86,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE } // 最后对比证书内容 - getCertDetailResp, err := u.sdkClient.GetCertRawData(certDetail.CertId) - u.logger.Debug("sdk request 'cert.GetCertRawData'", slog.Any("certId", certDetail.CertId), slog.Any("response", getCertDetailResp)) + getCertDetailResp, err := m.sdkClient.GetCertRawData(certDetail.CertId) + m.logger.Debug("sdk request 'cert.GetCertRawData'", slog.Any("certId", certDetail.CertId), slog.Any("response", getCertDetailResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'cert.GetCertRawData': %w", err) } else { @@ -101,8 +101,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE } // 如果以上信息都一致,则视为已存在相同证书,直接返回 - u.logger.Info("ssl certificate already exists") - return &uploader.UploadResult{ + m.logger.Info("ssl certificate already exists") + return &core.SSLManageUploadResult{ CertId: certDetail.CertId, CertName: certDetail.CertName, }, nil @@ -115,19 +115,19 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE createCertReq.CertName = fmt.Sprintf("certimate-%d", time.Now().UnixMilli()) createCertReq.CertServerData = certPEM createCertReq.CertPrivateData = privkeyPEM - createCertResp, err := u.sdkClient.CreateCert(createCertReq) - u.logger.Debug("sdk request 'cert.CreateCert'", slog.Any("request", createCertReq), slog.Any("response", createCertResp)) + createCertResp, err := m.sdkClient.CreateCert(createCertReq) + m.logger.Debug("sdk request 'cert.CreateCert'", slog.Any("request", createCertReq), slog.Any("response", createCertResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'cert.CreateCert': %w", err) } - return &uploader.UploadResult{ + return &core.SSLManageUploadResult{ CertId: createCertResp.CertId, CertName: createCertResp.CertName, }, nil } -func createSdkClient(accessKeyId, secretAccessKey string) (*bdsdk.Client, error) { +func createSDKClient(accessKeyId, secretAccessKey string) (*bdsdk.Client, error) { client, err := bdsdk.NewClient(accessKeyId, secretAccessKey, "") if err != nil { return nil, err diff --git a/internal/pkg/core/uploader/providers/baiducloud-cert/baiducloud_cert_test.go b/internal/pkg/core/ssl-manager/providers/baiducloud-cert/baiducloud_cert_test.go similarity index 66% rename from internal/pkg/core/uploader/providers/baiducloud-cert/baiducloud_cert_test.go rename to internal/pkg/core/ssl-manager/providers/baiducloud-cert/baiducloud_cert_test.go index 80b2a7ca..726a10ae 100644 --- a/internal/pkg/core/uploader/providers/baiducloud-cert/baiducloud_cert_test.go +++ b/internal/pkg/core/ssl-manager/providers/baiducloud-cert/baiducloud_cert_test.go @@ -9,7 +9,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/baiducloud-cert" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/baiducloud-cert" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_UPLOADER_BAIDUCLOUDCAS_" + argsPrefix := "CERTIMATE_SSLMANAGER_BAIDUCLOUDCAS_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -32,10 +32,10 @@ func init() { Shell command to run this test: go test -v ./baiducloud_cas_test.go -args \ - --CERTIMATE_UPLOADER_BAIDUCLOUDCAS_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_UPLOADER_BAIDUCLOUDCAS_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_UPLOADER_BAIDUCLOUDCAS_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_UPLOADER_BAIDUCLOUDCAS_SECRETACCESSKEY="your-access-key-secret" + --CERTIMATE_SSLMANAGER_BAIDUCLOUDCAS_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLMANAGER_BAIDUCLOUDCAS_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLMANAGER_BAIDUCLOUDCAS_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLMANAGER_BAIDUCLOUDCAS_SECRETACCESSKEY="your-access-key-secret" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -49,7 +49,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("SECRETACCESSKEY: %v", fSecretAccessKey), }, "\n")) - uploader, err := provider.NewUploader(&provider.UploaderConfig{ + sslmanager, err := provider.NewSSLManagerProvider(&provider.SSLManagerProviderConfig{ AccessKeyId: fAccessKeyId, SecretAccessKey: fSecretAccessKey, }) @@ -60,7 +60,7 @@ func TestDeploy(t *testing.T) { fInputCertData, _ := os.ReadFile(fInputCertPath) fInputKeyData, _ := os.ReadFile(fInputKeyPath) - res, err := uploader.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) + res, err := sslmanager.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) if err != nil { t.Errorf("err: %+v", err) return diff --git a/internal/pkg/core/uploader/providers/byteplus-cdn/byteplus_cdn.go b/internal/pkg/core/ssl-manager/providers/byteplus-cdn/byteplus_cdn.go similarity index 71% rename from internal/pkg/core/uploader/providers/byteplus-cdn/byteplus_cdn.go rename to internal/pkg/core/ssl-manager/providers/byteplus-cdn/byteplus_cdn.go index b30c85fd..1dafad31 100644 --- a/internal/pkg/core/uploader/providers/byteplus-cdn/byteplus_cdn.go +++ b/internal/pkg/core/ssl-manager/providers/byteplus-cdn/byteplus_cdn.go @@ -5,6 +5,7 @@ import ( "crypto/sha1" "crypto/sha256" "encoding/hex" + "errors" "fmt" "log/slog" "strings" @@ -12,51 +13,50 @@ import ( bytepluscdn "github.com/byteplus-sdk/byteplus-sdk-golang/service/cdn" - "github.com/usual2970/certimate/internal/pkg/core/uploader" + "github.com/usual2970/certimate/internal/pkg/core" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" ) -type UploaderConfig struct { +type SSLManagerProviderConfig struct { // BytePlus AccessKey。 AccessKey string `json:"accessKey"` // BytePlus SecretKey。 SecretKey string `json:"secretKey"` } -type UploaderProvider struct { - config *UploaderConfig +type SSLManagerProvider struct { + config *SSLManagerProviderConfig logger *slog.Logger sdkClient *bytepluscdn.CDN } -var _ uploader.Uploader = (*UploaderProvider)(nil) +var _ core.SSLManager = (*SSLManagerProvider)(nil) -func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { +func NewSSLManagerProvider(config *SSLManagerProviderConfig) (*SSLManagerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl manager provider is nil") } client := bytepluscdn.NewInstance() client.Client.SetAccessKey(config.AccessKey) client.Client.SetSecretKey(config.SecretKey) - return &UploaderProvider{ + return &SSLManagerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { +func (m *SSLManagerProvider) SetLogger(logger *slog.Logger) { if logger == nil { - u.logger = slog.New(slog.DiscardHandler) + m.logger = slog.New(slog.DiscardHandler) } else { - u.logger = logger + m.logger = logger } - return u } -func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*uploader.UploadResult, error) { +func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLManageUploadResult, error) { // 解析证书内容 certX509, err := xcert.ParseCertificateFromPEM(certPEM) if err != nil { @@ -80,8 +80,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE default: } - listCertInfoResp, err := u.sdkClient.ListCertInfo(listCertInfoReq) - u.logger.Debug("sdk request 'cdn.ListCertInfo'", slog.Any("request", listCertInfoReq), slog.Any("response", listCertInfoResp)) + listCertInfoResp, err := m.sdkClient.ListCertInfo(listCertInfoReq) + m.logger.Debug("sdk request 'cdn.ListCertInfo'", slog.Any("request", listCertInfoReq), slog.Any("response", listCertInfoResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'cdn.ListCertInfo': %w", err) } @@ -94,8 +94,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE strings.EqualFold(hex.EncodeToString(fingerprintSha256[:]), certDetail.CertFingerprint.Sha256) // 如果已存在相同证书,直接返回 if isSameCert { - u.logger.Info("ssl certificate already exists") - return &uploader.UploadResult{ + m.logger.Info("ssl certificate already exists") + return &core.SSLManageUploadResult{ CertId: certDetail.CertId, CertName: certDetail.Desc, }, nil @@ -113,8 +113,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE } // 生成新证书名(需符合 BytePlus 命名规则) - var certId, certName string - certName = fmt.Sprintf("certimate-%d", time.Now().UnixMilli()) + certName := fmt.Sprintf("certimate-%d", time.Now().UnixMilli()) // 上传新证书 // REF: https://docs.byteplus.com/en/docs/byteplus-cdn/reference-addcertificate @@ -124,15 +123,14 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE Source: bytepluscdn.GetStrPtr("cert_center"), Desc: bytepluscdn.GetStrPtr(certName), } - addCertificateResp, err := u.sdkClient.AddCertificate(addCertificateReq) - u.logger.Debug("sdk request 'cdn.AddCertificate'", slog.Any("request", addCertificateReq), slog.Any("response", addCertificateResp)) + addCertificateResp, err := m.sdkClient.AddCertificate(addCertificateReq) + m.logger.Debug("sdk request 'cdn.AddCertificate'", slog.Any("request", addCertificateReq), slog.Any("response", addCertificateResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'cdn.AddCertificate': %w", err) } - certId = addCertificateResp.Result.CertId - return &uploader.UploadResult{ - CertId: certId, + return &core.SSLManageUploadResult{ + CertId: addCertificateResp.Result.CertId, CertName: certName, }, nil } diff --git a/internal/pkg/core/uploader/providers/ctcccloud-ao/ctcccloud_ao.go b/internal/pkg/core/ssl-manager/providers/ctcccloud-ao/ctcccloud_ao.go similarity index 73% rename from internal/pkg/core/uploader/providers/ctcccloud-ao/ctcccloud_ao.go rename to internal/pkg/core/ssl-manager/providers/ctcccloud-ao/ctcccloud_ao.go index a8ab2330..93194f44 100644 --- a/internal/pkg/core/uploader/providers/ctcccloud-ao/ctcccloud_ao.go +++ b/internal/pkg/core/ssl-manager/providers/ctcccloud-ao/ctcccloud_ao.go @@ -2,60 +2,60 @@ package ctcccloudao import ( "context" + "errors" "fmt" "log/slog" "slices" "strings" "time" - "github.com/usual2970/certimate/internal/pkg/core/uploader" + "github.com/usual2970/certimate/internal/pkg/core" ctyunao "github.com/usual2970/certimate/internal/pkg/sdk3rd/ctyun/ao" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type UploaderConfig struct { +type SSLManagerProviderConfig struct { // 天翼云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 天翼云 SecretAccessKey。 SecretAccessKey string `json:"secretAccessKey"` } -type UploaderProvider struct { - config *UploaderConfig +type SSLManagerProvider struct { + config *SSLManagerProviderConfig logger *slog.Logger sdkClient *ctyunao.Client } -var _ uploader.Uploader = (*UploaderProvider)(nil) +var _ core.SSLManager = (*SSLManagerProvider)(nil) -func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { +func NewSSLManagerProvider(config *SSLManagerProviderConfig) (*SSLManagerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl manager provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.SecretAccessKey) + client, err := createSDKClient(config.AccessKeyId, config.SecretAccessKey) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &UploaderProvider{ + return &SSLManagerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { +func (m *SSLManagerProvider) SetLogger(logger *slog.Logger) { if logger == nil { - u.logger = slog.New(slog.DiscardHandler) + m.logger = slog.New(slog.DiscardHandler) } else { - u.logger = logger + m.logger = logger } - return u } -func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*uploader.UploadResult, error) { +func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLManageUploadResult, error) { // 解析证书内容 certX509, err := xcert.ParseCertificateFromPEM(certPEM) if err != nil { @@ -78,8 +78,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE PerPage: xtypes.ToPtr(listCertPerPage), UsageMode: xtypes.ToPtr(int32(0)), } - listCertsResp, err := u.sdkClient.ListCerts(listCertsReq) - u.logger.Debug("sdk request 'ao.ListCerts'", slog.Any("request", listCertsReq), slog.Any("response", listCertsResp)) + listCertsResp, err := m.sdkClient.ListCerts(listCertsReq) + m.logger.Debug("sdk request 'ao.ListCerts'", slog.Any("request", listCertsReq), slog.Any("response", listCertsResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'ao.ListCerts': %w", err) } @@ -108,8 +108,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE queryCertReq := &ctyunao.QueryCertRequest{ Id: xtypes.ToPtr(certRecord.Id), } - queryCertResp, err := u.sdkClient.QueryCert(queryCertReq) - u.logger.Debug("sdk request 'ao.QueryCert'", slog.Any("request", queryCertReq), slog.Any("response", queryCertResp)) + queryCertResp, err := m.sdkClient.QueryCert(queryCertReq) + m.logger.Debug("sdk request 'ao.QueryCert'", slog.Any("request", queryCertReq), slog.Any("response", queryCertResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'ao.QueryCert': %w", err) } else if queryCertResp.ReturnObj != nil && queryCertResp.ReturnObj.Result != nil { @@ -127,8 +127,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE // 如果已存在相同证书,直接返回 if isSameCert { - u.logger.Info("ssl certificate already exists") - return &uploader.UploadResult{ + m.logger.Info("ssl certificate already exists") + return &core.SSLManageUploadResult{ CertId: fmt.Sprintf("%d", queryCertResp.ReturnObj.Result.Id), CertName: queryCertResp.ReturnObj.Result.Name, }, nil @@ -154,18 +154,18 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE Certs: xtypes.ToPtr(certPEM), Key: xtypes.ToPtr(privkeyPEM), } - createCertResp, err := u.sdkClient.CreateCert(createCertReq) - u.logger.Debug("sdk request 'ao.CreateCert'", slog.Any("request", createCertReq), slog.Any("response", createCertResp)) + createCertResp, err := m.sdkClient.CreateCert(createCertReq) + m.logger.Debug("sdk request 'ao.CreateCert'", slog.Any("request", createCertReq), slog.Any("response", createCertResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'ao.CreateCert': %w", err) } - return &uploader.UploadResult{ + return &core.SSLManageUploadResult{ CertId: fmt.Sprintf("%d", createCertResp.ReturnObj.Id), CertName: certName, }, nil } -func createSdkClient(accessKeyId, secretAccessKey string) (*ctyunao.Client, error) { +func createSDKClient(accessKeyId, secretAccessKey string) (*ctyunao.Client, error) { return ctyunao.NewClient(accessKeyId, secretAccessKey) } diff --git a/internal/pkg/core/uploader/providers/ctcccloud-ao/ctcccloud_ao_test.go b/internal/pkg/core/ssl-manager/providers/ctcccloud-ao/ctcccloud_ao_test.go similarity index 66% rename from internal/pkg/core/uploader/providers/ctcccloud-ao/ctcccloud_ao_test.go rename to internal/pkg/core/ssl-manager/providers/ctcccloud-ao/ctcccloud_ao_test.go index 53d2eee6..0f0e7201 100644 --- a/internal/pkg/core/uploader/providers/ctcccloud-ao/ctcccloud_ao_test.go +++ b/internal/pkg/core/ssl-manager/providers/ctcccloud-ao/ctcccloud_ao_test.go @@ -9,7 +9,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/ctcccloud-ao" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/ctcccloud-ao" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_UPLOADER_CTCCCLOUDAO_" + argsPrefix := "CERTIMATE_SSLMANAGER_CTCCCLOUDAO_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -32,10 +32,10 @@ func init() { Shell command to run this test: go test -v ./ctcccloud_ao_test.go -args \ - --CERTIMATE_UPLOADER_CTCCCLOUDAO_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_UPLOADER_CTCCCLOUDAO_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_UPLOADER_CTCCCLOUDAO_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_UPLOADER_CTCCCLOUDAO_SECRETACCESSKEY="your-secret-access-key" + --CERTIMATE_SSLMANAGER_CTCCCLOUDAO_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLMANAGER_CTCCCLOUDAO_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLMANAGER_CTCCCLOUDAO_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLMANAGER_CTCCCLOUDAO_SECRETACCESSKEY="your-secret-access-key" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -49,7 +49,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("SECRETACCESSKEY: %v", fSecretAccessKey), }, "\n")) - uploader, err := provider.NewUploader(&provider.UploaderConfig{ + sslmanager, err := provider.NewSSLManagerProvider(&provider.SSLManagerProviderConfig{ AccessKeyId: fAccessKeyId, SecretAccessKey: fSecretAccessKey, }) @@ -60,7 +60,7 @@ func TestDeploy(t *testing.T) { fInputCertData, _ := os.ReadFile(fInputCertPath) fInputKeyData, _ := os.ReadFile(fInputKeyPath) - res, err := uploader.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) + res, err := sslmanager.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) if err != nil { t.Errorf("err: %+v", err) return diff --git a/internal/pkg/core/uploader/providers/ctcccloud-cdn/ctcccloud_cdn.go b/internal/pkg/core/ssl-manager/providers/ctcccloud-cdn/ctcccloud_cdn.go similarity index 74% rename from internal/pkg/core/uploader/providers/ctcccloud-cdn/ctcccloud_cdn.go rename to internal/pkg/core/ssl-manager/providers/ctcccloud-cdn/ctcccloud_cdn.go index 040f9f11..e3d2d00d 100644 --- a/internal/pkg/core/uploader/providers/ctcccloud-cdn/ctcccloud_cdn.go +++ b/internal/pkg/core/ssl-manager/providers/ctcccloud-cdn/ctcccloud_cdn.go @@ -2,60 +2,60 @@ package ctcccloudcdn import ( "context" + "errors" "fmt" "log/slog" "slices" "strings" "time" - "github.com/usual2970/certimate/internal/pkg/core/uploader" + "github.com/usual2970/certimate/internal/pkg/core" ctyuncdn "github.com/usual2970/certimate/internal/pkg/sdk3rd/ctyun/cdn" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type UploaderConfig struct { +type SSLManagerProviderConfig struct { // 天翼云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 天翼云 SecretAccessKey。 SecretAccessKey string `json:"secretAccessKey"` } -type UploaderProvider struct { - config *UploaderConfig +type SSLManagerProvider struct { + config *SSLManagerProviderConfig logger *slog.Logger sdkClient *ctyuncdn.Client } -var _ uploader.Uploader = (*UploaderProvider)(nil) +var _ core.SSLManager = (*SSLManagerProvider)(nil) -func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { +func NewSSLManagerProvider(config *SSLManagerProviderConfig) (*SSLManagerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl manager provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.SecretAccessKey) + client, err := createSDKClient(config.AccessKeyId, config.SecretAccessKey) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &UploaderProvider{ + return &SSLManagerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { +func (m *SSLManagerProvider) SetLogger(logger *slog.Logger) { if logger == nil { - u.logger = slog.New(slog.DiscardHandler) + m.logger = slog.New(slog.DiscardHandler) } else { - u.logger = logger + m.logger = logger } - return u } -func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*uploader.UploadResult, error) { +func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLManageUploadResult, error) { // 解析证书内容 certX509, err := xcert.ParseCertificateFromPEM(certPEM) if err != nil { @@ -78,8 +78,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE PerPage: xtypes.ToPtr(queryCertListPerPage), UsageMode: xtypes.ToPtr(int32(0)), } - queryCertListResp, err := u.sdkClient.QueryCertList(queryCertListReq) - u.logger.Debug("sdk request 'cdn.QueryCertList'", slog.Any("request", queryCertListReq), slog.Any("response", queryCertListResp)) + queryCertListResp, err := m.sdkClient.QueryCertList(queryCertListReq) + m.logger.Debug("sdk request 'cdn.QueryCertList'", slog.Any("request", queryCertListReq), slog.Any("response", queryCertListResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'cdn.QueryCertList': %w", err) } @@ -108,8 +108,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE queryCertDetailReq := &ctyuncdn.QueryCertDetailRequest{ Id: xtypes.ToPtr(certRecord.Id), } - queryCertDetailResp, err := u.sdkClient.QueryCertDetail(queryCertDetailReq) - u.logger.Debug("sdk request 'cdn.QueryCertDetail'", slog.Any("request", queryCertDetailReq), slog.Any("response", queryCertDetailResp)) + queryCertDetailResp, err := m.sdkClient.QueryCertDetail(queryCertDetailReq) + m.logger.Debug("sdk request 'cdn.QueryCertDetail'", slog.Any("request", queryCertDetailReq), slog.Any("response", queryCertDetailResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'cdn.QueryCertDetail': %w", err) } else if queryCertDetailResp.ReturnObj != nil && queryCertDetailResp.ReturnObj.Result != nil { @@ -127,8 +127,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE // 如果已存在相同证书,直接返回 if isSameCert { - u.logger.Info("ssl certificate already exists") - return &uploader.UploadResult{ + m.logger.Info("ssl certificate already exists") + return &core.SSLManageUploadResult{ CertId: fmt.Sprintf("%d", queryCertDetailResp.ReturnObj.Result.Id), CertName: queryCertDetailResp.ReturnObj.Result.Name, }, nil @@ -154,18 +154,18 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE Certs: xtypes.ToPtr(certPEM), Key: xtypes.ToPtr(privkeyPEM), } - createCertResp, err := u.sdkClient.CreateCert(createCertReq) - u.logger.Debug("sdk request 'cdn.CreateCert'", slog.Any("request", createCertReq), slog.Any("response", createCertResp)) + createCertResp, err := m.sdkClient.CreateCert(createCertReq) + m.logger.Debug("sdk request 'cdn.CreateCert'", slog.Any("request", createCertReq), slog.Any("response", createCertResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'cdn.CreateCert': %w", err) } - return &uploader.UploadResult{ + return &core.SSLManageUploadResult{ CertId: fmt.Sprintf("%d", createCertResp.ReturnObj.Id), CertName: certName, }, nil } -func createSdkClient(accessKeyId, secretAccessKey string) (*ctyuncdn.Client, error) { +func createSDKClient(accessKeyId, secretAccessKey string) (*ctyuncdn.Client, error) { return ctyuncdn.NewClient(accessKeyId, secretAccessKey) } diff --git a/internal/pkg/core/uploader/providers/ctcccloud-cdn/ctcccloud_cdn_test.go b/internal/pkg/core/ssl-manager/providers/ctcccloud-cdn/ctcccloud_cdn_test.go similarity index 66% rename from internal/pkg/core/uploader/providers/ctcccloud-cdn/ctcccloud_cdn_test.go rename to internal/pkg/core/ssl-manager/providers/ctcccloud-cdn/ctcccloud_cdn_test.go index 72ee6dfa..b09b1bb4 100644 --- a/internal/pkg/core/uploader/providers/ctcccloud-cdn/ctcccloud_cdn_test.go +++ b/internal/pkg/core/ssl-manager/providers/ctcccloud-cdn/ctcccloud_cdn_test.go @@ -9,7 +9,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/ctcccloud-cdn" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/ctcccloud-cdn" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_UPLOADER_CTCCCLOUDCDN_" + argsPrefix := "CERTIMATE_SSLMANAGER_CTCCCLOUDCDN_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -32,10 +32,10 @@ func init() { Shell command to run this test: go test -v ./ctcccloud_cdn_test.go -args \ - --CERTIMATE_UPLOADER_CTCCCLOUDCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_UPLOADER_CTCCCLOUDCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_UPLOADER_CTCCCLOUDCDN_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_UPLOADER_CTCCCLOUDCDN_SECRETACCESSKEY="your-secret-access-key" + --CERTIMATE_SSLMANAGER_CTCCCLOUDCDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLMANAGER_CTCCCLOUDCDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLMANAGER_CTCCCLOUDCDN_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLMANAGER_CTCCCLOUDCDN_SECRETACCESSKEY="your-secret-access-key" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -49,7 +49,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("SECRETACCESSKEY: %v", fSecretAccessKey), }, "\n")) - uploader, err := provider.NewUploader(&provider.UploaderConfig{ + sslmanager, err := provider.NewSSLManagerProvider(&provider.SSLManagerProviderConfig{ AccessKeyId: fAccessKeyId, SecretAccessKey: fSecretAccessKey, }) @@ -60,7 +60,7 @@ func TestDeploy(t *testing.T) { fInputCertData, _ := os.ReadFile(fInputCertPath) fInputKeyData, _ := os.ReadFile(fInputKeyPath) - res, err := uploader.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) + res, err := sslmanager.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) if err != nil { t.Errorf("err: %+v", err) return diff --git a/internal/pkg/core/uploader/providers/ctcccloud-cms/ctcccloud_cms.go b/internal/pkg/core/ssl-manager/providers/ctcccloud-cms/ctcccloud_cms.go similarity index 73% rename from internal/pkg/core/uploader/providers/ctcccloud-cms/ctcccloud_cms.go rename to internal/pkg/core/ssl-manager/providers/ctcccloud-cms/ctcccloud_cms.go index 9e60e912..30749142 100644 --- a/internal/pkg/core/uploader/providers/ctcccloud-cms/ctcccloud_cms.go +++ b/internal/pkg/core/ssl-manager/providers/ctcccloud-cms/ctcccloud_cms.go @@ -10,56 +10,55 @@ import ( "strings" "time" - "github.com/usual2970/certimate/internal/pkg/core/uploader" + "github.com/usual2970/certimate/internal/pkg/core" ctyuncms "github.com/usual2970/certimate/internal/pkg/sdk3rd/ctyun/cms" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type UploaderConfig struct { +type SSLManagerProviderConfig struct { // 天翼云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 天翼云 SecretAccessKey。 SecretAccessKey string `json:"secretAccessKey"` } -type UploaderProvider struct { - config *UploaderConfig +type SSLManagerProvider struct { + config *SSLManagerProviderConfig logger *slog.Logger sdkClient *ctyuncms.Client } -var _ uploader.Uploader = (*UploaderProvider)(nil) +var _ core.SSLManager = (*SSLManagerProvider)(nil) -func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { +func NewSSLManagerProvider(config *SSLManagerProviderConfig) (*SSLManagerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl manager provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.SecretAccessKey) + client, err := createSDKClient(config.AccessKeyId, config.SecretAccessKey) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &UploaderProvider{ + return &SSLManagerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { +func (m *SSLManagerProvider) SetLogger(logger *slog.Logger) { if logger == nil { - u.logger = slog.New(slog.DiscardHandler) + m.logger = slog.New(slog.DiscardHandler) } else { - u.logger = logger + m.logger = logger } - return u } -func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*uploader.UploadResult, error) { +func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLManageUploadResult, error) { // 遍历证书列表,避免重复上传 - if res, _ := u.findCertIfExists(ctx, certPEM); res != nil { + if res, _ := m.findCertIfExists(ctx, certPEM); res != nil { return res, nil } @@ -81,16 +80,16 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE PrivateKey: xtypes.ToPtr(privkeyPEM), EncryptionStandard: xtypes.ToPtr("INTERNATIONAL"), } - uploadCertificateResp, err := u.sdkClient.UploadCertificate(uploadCertificateReq) - u.logger.Debug("sdk request 'cms.UploadCertificate'", slog.Any("request", uploadCertificateReq), slog.Any("response", uploadCertificateResp)) + uploadCertificateResp, err := m.sdkClient.UploadCertificate(uploadCertificateReq) + m.logger.Debug("sdk request 'cms.UploadCertificate'", slog.Any("request", uploadCertificateReq), slog.Any("response", uploadCertificateResp)) if err != nil { if uploadCertificateResp != nil && uploadCertificateResp.GetError() == "CCMS_100000067" { - if res, err := u.findCertIfExists(ctx, certPEM); err != nil { + if res, err := m.findCertIfExists(ctx, certPEM); err != nil { return nil, err } else if res == nil { return nil, errors.New("ctyun cms: no certificate found") } else { - u.logger.Info("ssl certificate already exists") + m.logger.Info("ssl certificate already exists") return res, nil } } @@ -99,7 +98,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE } // 遍历证书列表,获取刚刚上传证书 ID - if res, err := u.findCertIfExists(ctx, certPEM); err != nil { + if res, err := m.findCertIfExists(ctx, certPEM); err != nil { return nil, err } else if res == nil { return nil, fmt.Errorf("no ssl certificate found, may be upload failed") @@ -108,7 +107,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE } } -func (u *UploaderProvider) findCertIfExists(ctx context.Context, certPEM string) (*uploader.UploadResult, error) { +func (m *SSLManagerProvider) findCertIfExists(ctx context.Context, certPEM string) (*core.SSLManageUploadResult, error) { // 解析证书内容 certX509, err := xcert.ParseCertificateFromPEM(certPEM) if err != nil { @@ -132,8 +131,8 @@ func (u *UploaderProvider) findCertIfExists(ctx context.Context, certPEM string) Keyword: xtypes.ToPtr(certX509.Subject.CommonName), Origin: xtypes.ToPtr("UPLOAD"), } - getCertificateListResp, err := u.sdkClient.GetCertificateList(getCertificateListReq) - u.logger.Debug("sdk request 'cms.GetCertificateList'", slog.Any("request", getCertificateListReq), slog.Any("response", getCertificateListResp)) + getCertificateListResp, err := m.sdkClient.GetCertificateList(getCertificateListReq) + m.logger.Debug("sdk request 'cms.GetCertificateList'", slog.Any("request", getCertificateListReq), slog.Any("response", getCertificateListResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'cms.GetCertificateList': %w", err) } @@ -163,8 +162,8 @@ func (u *UploaderProvider) findCertIfExists(ctx context.Context, certPEM string) } // 如果以上信息都一致,则视为已存在相同证书,直接返回 - u.logger.Info("ssl certificate already exists") - return &uploader.UploadResult{ + m.logger.Info("ssl certificate already exists") + return &core.SSLManageUploadResult{ CertId: string(*&certRecord.Id), CertName: certRecord.Name, }, nil @@ -181,6 +180,6 @@ func (u *UploaderProvider) findCertIfExists(ctx context.Context, certPEM string) return nil, nil } -func createSdkClient(accessKeyId, secretAccessKey string) (*ctyuncms.Client, error) { +func createSDKClient(accessKeyId, secretAccessKey string) (*ctyuncms.Client, error) { return ctyuncms.NewClient(accessKeyId, secretAccessKey) } diff --git a/internal/pkg/core/uploader/providers/ctcccloud-cms/ctcccloud_cms_test.go b/internal/pkg/core/ssl-manager/providers/ctcccloud-cms/ctcccloud_cms_test.go similarity index 66% rename from internal/pkg/core/uploader/providers/ctcccloud-cms/ctcccloud_cms_test.go rename to internal/pkg/core/ssl-manager/providers/ctcccloud-cms/ctcccloud_cms_test.go index 3fedfe4b..e559db96 100644 --- a/internal/pkg/core/uploader/providers/ctcccloud-cms/ctcccloud_cms_test.go +++ b/internal/pkg/core/ssl-manager/providers/ctcccloud-cms/ctcccloud_cms_test.go @@ -9,7 +9,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/ctcccloud-cms" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/ctcccloud-cms" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_UPLOADER_CTCCCLOUDCMS_" + argsPrefix := "CERTIMATE_SSLMANAGER_CTCCCLOUDCMS_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -32,10 +32,10 @@ func init() { Shell command to run this test: go test -v ./ctcccloud_cms_test.go -args \ - --CERTIMATE_UPLOADER_CTCCCLOUDCMS_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_UPLOADER_CTCCCLOUDCMS_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_UPLOADER_CTCCCLOUDCMS_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_UPLOADER_CTCCCLOUDCMS_SECRETACCESSKEY="your-secret-access-key" + --CERTIMATE_SSLMANAGER_CTCCCLOUDCMS_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLMANAGER_CTCCCLOUDCMS_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLMANAGER_CTCCCLOUDCMS_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLMANAGER_CTCCCLOUDCMS_SECRETACCESSKEY="your-secret-access-key" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -49,7 +49,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("SECRETACCESSKEY: %v", fSecretAccessKey), }, "\n")) - uploader, err := provider.NewUploader(&provider.UploaderConfig{ + sslmanager, err := provider.NewSSLManagerProvider(&provider.SSLManagerProviderConfig{ AccessKeyId: fAccessKeyId, SecretAccessKey: fSecretAccessKey, }) @@ -60,7 +60,7 @@ func TestDeploy(t *testing.T) { fInputCertData, _ := os.ReadFile(fInputCertPath) fInputKeyData, _ := os.ReadFile(fInputKeyPath) - res, err := uploader.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) + res, err := sslmanager.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) if err != nil { t.Errorf("err: %+v", err) return diff --git a/internal/pkg/core/uploader/providers/ctcccloud-elb/ctcccloud_elb.go b/internal/pkg/core/ssl-manager/providers/ctcccloud-elb/ctcccloud_elb.go similarity index 67% rename from internal/pkg/core/uploader/providers/ctcccloud-elb/ctcccloud_elb.go rename to internal/pkg/core/ssl-manager/providers/ctcccloud-elb/ctcccloud_elb.go index 146149b6..4a105791 100644 --- a/internal/pkg/core/uploader/providers/ctcccloud-elb/ctcccloud_elb.go +++ b/internal/pkg/core/ssl-manager/providers/ctcccloud-elb/ctcccloud_elb.go @@ -2,19 +2,20 @@ package ctcccloudelb import ( "context" + "errors" "fmt" "log/slog" "time" "github.com/google/uuid" - "github.com/usual2970/certimate/internal/pkg/core/uploader" + "github.com/usual2970/certimate/internal/pkg/core" ctyunelb "github.com/usual2970/certimate/internal/pkg/sdk3rd/ctyun/elb" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type UploaderConfig struct { +type SSLManagerProviderConfig struct { // 天翼云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 天翼云 SecretAccessKey。 @@ -23,41 +24,40 @@ type UploaderConfig struct { RegionId string `json:"regionId"` } -type UploaderProvider struct { - config *UploaderConfig +type SSLManagerProvider struct { + config *SSLManagerProviderConfig logger *slog.Logger sdkClient *ctyunelb.Client } -var _ uploader.Uploader = (*UploaderProvider)(nil) +var _ core.SSLManager = (*SSLManagerProvider)(nil) -func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { +func NewSSLManagerProvider(config *SSLManagerProviderConfig) (*SSLManagerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl manager provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.SecretAccessKey) + client, err := createSDKClient(config.AccessKeyId, config.SecretAccessKey) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &UploaderProvider{ + return &SSLManagerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { +func (m *SSLManagerProvider) SetLogger(logger *slog.Logger) { if logger == nil { - u.logger = slog.New(slog.DiscardHandler) + m.logger = slog.New(slog.DiscardHandler) } else { - u.logger = logger + m.logger = logger } - return u } -func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*uploader.UploadResult, error) { +func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLManageUploadResult, error) { // 解析证书内容 certX509, err := xcert.ParseCertificateFromPEM(certPEM) if err != nil { @@ -67,10 +67,10 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE // 查询证书列表,避免重复上传 // REF: https://eop.ctyun.cn/ebp/ctapiDocument/search?sid=24&api=5692&data=88&isNormal=1&vid=82 listCertificatesReq := &ctyunelb.ListCertificatesRequest{ - RegionID: xtypes.ToPtr(u.config.RegionId), + RegionID: xtypes.ToPtr(m.config.RegionId), } - listCertificatesResp, err := u.sdkClient.ListCertificates(listCertificatesReq) - u.logger.Debug("sdk request 'elb.ListCertificates'", slog.Any("request", listCertificatesReq), slog.Any("response", listCertificatesResp)) + listCertificatesResp, err := m.sdkClient.ListCertificates(listCertificatesReq) + m.logger.Debug("sdk request 'elb.ListCertificates'", slog.Any("request", listCertificatesReq), slog.Any("response", listCertificatesResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'elb.ListCertificates': %w", err) } else { @@ -89,8 +89,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE // 如果已存在相同证书,直接返回 if isSameCert { - u.logger.Info("ssl certificate already exists") - return &uploader.UploadResult{ + m.logger.Info("ssl certificate already exists") + return &core.SSLManageUploadResult{ CertId: certRecord.ID, CertName: certRecord.Name, }, nil @@ -105,26 +105,26 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE // REF: https://eop.ctyun.cn/ebp/ctapiDocument/search?sid=24&api=5685&data=88&isNormal=1&vid=82 createCertificateReq := &ctyunelb.CreateCertificateRequest{ ClientToken: xtypes.ToPtr(generateClientToken()), - RegionID: xtypes.ToPtr(u.config.RegionId), + RegionID: xtypes.ToPtr(m.config.RegionId), Name: xtypes.ToPtr(certName), Description: xtypes.ToPtr("upload from certimate"), Type: xtypes.ToPtr("Server"), Certificate: xtypes.ToPtr(certPEM), PrivateKey: xtypes.ToPtr(privkeyPEM), } - createCertificateResp, err := u.sdkClient.CreateCertificate(createCertificateReq) - u.logger.Debug("sdk request 'elb.CreateCertificate'", slog.Any("request", createCertificateReq), slog.Any("response", createCertificateResp)) + createCertificateResp, err := m.sdkClient.CreateCertificate(createCertificateReq) + m.logger.Debug("sdk request 'elb.CreateCertificate'", slog.Any("request", createCertificateReq), slog.Any("response", createCertificateResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'elb.CreateCertificate': %w", err) } - return &uploader.UploadResult{ + return &core.SSLManageUploadResult{ CertId: createCertificateResp.ReturnObj.ID, CertName: certName, }, nil } -func createSdkClient(accessKeyId, secretAccessKey string) (*ctyunelb.Client, error) { +func createSDKClient(accessKeyId, secretAccessKey string) (*ctyunelb.Client, error) { return ctyunelb.NewClient(accessKeyId, secretAccessKey) } diff --git a/internal/pkg/core/uploader/providers/ctcccloud-elb/ctcccloud_elb_test.go b/internal/pkg/core/ssl-manager/providers/ctcccloud-elb/ctcccloud_elb_test.go similarity index 67% rename from internal/pkg/core/uploader/providers/ctcccloud-elb/ctcccloud_elb_test.go rename to internal/pkg/core/ssl-manager/providers/ctcccloud-elb/ctcccloud_elb_test.go index a3c1c752..e354c19f 100644 --- a/internal/pkg/core/uploader/providers/ctcccloud-elb/ctcccloud_elb_test.go +++ b/internal/pkg/core/ssl-manager/providers/ctcccloud-elb/ctcccloud_elb_test.go @@ -9,7 +9,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/ctcccloud-elb" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/ctcccloud-elb" ) var ( @@ -21,7 +21,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_UPLOADER_CTCCCLOUDELB_" + argsPrefix := "CERTIMATE_SSLMANAGER_CTCCCLOUDELB_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -34,11 +34,11 @@ func init() { Shell command to run this test: go test -v ./ctcccloud_elb_test.go -args \ - --CERTIMATE_UPLOADER_CTCCCLOUDELB_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_UPLOADER_CTCCCLOUDELB_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_UPLOADER_CTCCCLOUDELB_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_UPLOADER_CTCCCLOUDELB_SECRETACCESSKEY="your-secret-access-key" \ - --CERTIMATE_UPLOADER_CTCCCLOUDELB_REGIONID="your-region-id" + --CERTIMATE_SSLMANAGER_CTCCCLOUDELB_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLMANAGER_CTCCCLOUDELB_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLMANAGER_CTCCCLOUDELB_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLMANAGER_CTCCCLOUDELB_SECRETACCESSKEY="your-secret-access-key" \ + --CERTIMATE_SSLMANAGER_CTCCCLOUDELB_REGIONID="your-region-id" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -53,7 +53,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("REGIONID: %v", fRegionId), }, "\n")) - uploader, err := provider.NewUploader(&provider.UploaderConfig{ + sslmanager, err := provider.NewSSLManagerProvider(&provider.SSLManagerProviderConfig{ AccessKeyId: fAccessKeyId, SecretAccessKey: fSecretAccessKey, RegionId: fRegionId, @@ -65,7 +65,7 @@ func TestDeploy(t *testing.T) { fInputCertData, _ := os.ReadFile(fInputCertPath) fInputKeyData, _ := os.ReadFile(fInputKeyPath) - res, err := uploader.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) + res, err := sslmanager.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) if err != nil { t.Errorf("err: %+v", err) return diff --git a/internal/pkg/core/uploader/providers/ctcccloud-icdn/ctcccloud_icdn.go b/internal/pkg/core/ssl-manager/providers/ctcccloud-icdn/ctcccloud_icdn.go similarity index 74% rename from internal/pkg/core/uploader/providers/ctcccloud-icdn/ctcccloud_icdn.go rename to internal/pkg/core/ssl-manager/providers/ctcccloud-icdn/ctcccloud_icdn.go index c1d3b5db..64b6dffc 100644 --- a/internal/pkg/core/uploader/providers/ctcccloud-icdn/ctcccloud_icdn.go +++ b/internal/pkg/core/ssl-manager/providers/ctcccloud-icdn/ctcccloud_icdn.go @@ -2,60 +2,60 @@ package ctcccloudicdn import ( "context" + "errors" "fmt" "log/slog" "slices" "strings" "time" - "github.com/usual2970/certimate/internal/pkg/core/uploader" + "github.com/usual2970/certimate/internal/pkg/core" ctyunicdn "github.com/usual2970/certimate/internal/pkg/sdk3rd/ctyun/icdn" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type UploaderConfig struct { +type SSLManagerProviderConfig struct { // 天翼云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 天翼云 SecretAccessKey。 SecretAccessKey string `json:"secretAccessKey"` } -type UploaderProvider struct { - config *UploaderConfig +type SSLManagerProvider struct { + config *SSLManagerProviderConfig logger *slog.Logger sdkClient *ctyunicdn.Client } -var _ uploader.Uploader = (*UploaderProvider)(nil) +var _ core.SSLManager = (*SSLManagerProvider)(nil) -func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { +func NewSSLManagerProvider(config *SSLManagerProviderConfig) (*SSLManagerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl manager provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.SecretAccessKey) + client, err := createSDKClient(config.AccessKeyId, config.SecretAccessKey) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &UploaderProvider{ + return &SSLManagerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { +func (m *SSLManagerProvider) SetLogger(logger *slog.Logger) { if logger == nil { - u.logger = slog.New(slog.DiscardHandler) + m.logger = slog.New(slog.DiscardHandler) } else { - u.logger = logger + m.logger = logger } - return u } -func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*uploader.UploadResult, error) { +func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLManageUploadResult, error) { // 解析证书内容 certX509, err := xcert.ParseCertificateFromPEM(certPEM) if err != nil { @@ -78,8 +78,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE PerPage: xtypes.ToPtr(queryCertListPerPage), UsageMode: xtypes.ToPtr(int32(0)), } - queryCertListResp, err := u.sdkClient.QueryCertList(queryCertListReq) - u.logger.Debug("sdk request 'icdn.QueryCertList'", slog.Any("request", queryCertListReq), slog.Any("response", queryCertListResp)) + queryCertListResp, err := m.sdkClient.QueryCertList(queryCertListReq) + m.logger.Debug("sdk request 'icdn.QueryCertList'", slog.Any("request", queryCertListReq), slog.Any("response", queryCertListResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'icdn.QueryCertList': %w", err) } @@ -108,8 +108,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE queryCertDetailReq := &ctyunicdn.QueryCertDetailRequest{ Id: xtypes.ToPtr(certRecord.Id), } - queryCertDetailResp, err := u.sdkClient.QueryCertDetail(queryCertDetailReq) - u.logger.Debug("sdk request 'icdn.QueryCertDetail'", slog.Any("request", queryCertDetailReq), slog.Any("response", queryCertDetailResp)) + queryCertDetailResp, err := m.sdkClient.QueryCertDetail(queryCertDetailReq) + m.logger.Debug("sdk request 'icdn.QueryCertDetail'", slog.Any("request", queryCertDetailReq), slog.Any("response", queryCertDetailResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'icdn.QueryCertDetail': %w", err) } else if queryCertDetailResp.ReturnObj != nil && queryCertDetailResp.ReturnObj.Result != nil { @@ -127,8 +127,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE // 如果已存在相同证书,直接返回 if isSameCert { - u.logger.Info("ssl certificate already exists") - return &uploader.UploadResult{ + m.logger.Info("ssl certificate already exists") + return &core.SSLManageUploadResult{ CertId: fmt.Sprintf("%d", queryCertDetailResp.ReturnObj.Result.Id), CertName: queryCertDetailResp.ReturnObj.Result.Name, }, nil @@ -154,18 +154,18 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE Certs: xtypes.ToPtr(certPEM), Key: xtypes.ToPtr(privkeyPEM), } - createCertResp, err := u.sdkClient.CreateCert(createCertReq) - u.logger.Debug("sdk request 'icdn.CreateCert'", slog.Any("request", createCertReq), slog.Any("response", createCertResp)) + createCertResp, err := m.sdkClient.CreateCert(createCertReq) + m.logger.Debug("sdk request 'icdn.CreateCert'", slog.Any("request", createCertReq), slog.Any("response", createCertResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'icdn.CreateCert': %w", err) } - return &uploader.UploadResult{ + return &core.SSLManageUploadResult{ CertId: fmt.Sprintf("%d", createCertResp.ReturnObj.Id), CertName: certName, }, nil } -func createSdkClient(accessKeyId, secretAccessKey string) (*ctyunicdn.Client, error) { +func createSDKClient(accessKeyId, secretAccessKey string) (*ctyunicdn.Client, error) { return ctyunicdn.NewClient(accessKeyId, secretAccessKey) } diff --git a/internal/pkg/core/uploader/providers/ctcccloud-icdn/ctcccloud_icdn_test.go b/internal/pkg/core/ssl-manager/providers/ctcccloud-icdn/ctcccloud_icdn_test.go similarity index 66% rename from internal/pkg/core/uploader/providers/ctcccloud-icdn/ctcccloud_icdn_test.go rename to internal/pkg/core/ssl-manager/providers/ctcccloud-icdn/ctcccloud_icdn_test.go index 6bbf627f..d3c3f180 100644 --- a/internal/pkg/core/uploader/providers/ctcccloud-icdn/ctcccloud_icdn_test.go +++ b/internal/pkg/core/ssl-manager/providers/ctcccloud-icdn/ctcccloud_icdn_test.go @@ -9,7 +9,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/ctcccloud-icdn" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/ctcccloud-icdn" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_UPLOADER_CTCCCLOUDICDN_" + argsPrefix := "CERTIMATE_SSLMANAGER_CTCCCLOUDICDN_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -32,10 +32,10 @@ func init() { Shell command to run this test: go test -v ./ctcccloud_icdn_test.go -args \ - --CERTIMATE_UPLOADER_CTCCCLOUDICDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_UPLOADER_CTCCCLOUDICDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_UPLOADER_CTCCCLOUDICDN_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_UPLOADER_CTCCCLOUDICDN_SECRETACCESSKEY="your-secret-access-key" + --CERTIMATE_SSLMANAGER_CTCCCLOUDICDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLMANAGER_CTCCCLOUDICDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLMANAGER_CTCCCLOUDICDN_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLMANAGER_CTCCCLOUDICDN_SECRETACCESSKEY="your-secret-access-key" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -49,7 +49,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("SECRETACCESSKEY: %v", fSecretAccessKey), }, "\n")) - uploader, err := provider.NewUploader(&provider.UploaderConfig{ + sslmanager, err := provider.NewSSLManagerProvider(&provider.SSLManagerProviderConfig{ AccessKeyId: fAccessKeyId, SecretAccessKey: fSecretAccessKey, }) @@ -60,7 +60,7 @@ func TestDeploy(t *testing.T) { fInputCertData, _ := os.ReadFile(fInputCertPath) fInputKeyData, _ := os.ReadFile(fInputKeyPath) - res, err := uploader.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) + res, err := sslmanager.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) if err != nil { t.Errorf("err: %+v", err) return diff --git a/internal/pkg/core/uploader/providers/ctcccloud-lvdn/ctcccloud_lvdn.go b/internal/pkg/core/ssl-manager/providers/ctcccloud-lvdn/ctcccloud_lvdn.go similarity index 74% rename from internal/pkg/core/uploader/providers/ctcccloud-lvdn/ctcccloud_lvdn.go rename to internal/pkg/core/ssl-manager/providers/ctcccloud-lvdn/ctcccloud_lvdn.go index d71fde7d..ab32b055 100644 --- a/internal/pkg/core/uploader/providers/ctcccloud-lvdn/ctcccloud_lvdn.go +++ b/internal/pkg/core/ssl-manager/providers/ctcccloud-lvdn/ctcccloud_lvdn.go @@ -2,60 +2,60 @@ package ctcccloudlvdn import ( "context" + "errors" "fmt" "log/slog" "slices" "strings" "time" - "github.com/usual2970/certimate/internal/pkg/core/uploader" + "github.com/usual2970/certimate/internal/pkg/core" ctyunlvdn "github.com/usual2970/certimate/internal/pkg/sdk3rd/ctyun/lvdn" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type UploaderConfig struct { +type SSLManagerProviderConfig struct { // 天翼云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 天翼云 SecretAccessKey。 SecretAccessKey string `json:"secretAccessKey"` } -type UploaderProvider struct { - config *UploaderConfig +type SSLManagerProvider struct { + config *SSLManagerProviderConfig logger *slog.Logger sdkClient *ctyunlvdn.Client } -var _ uploader.Uploader = (*UploaderProvider)(nil) +var _ core.SSLManager = (*SSLManagerProvider)(nil) -func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { +func NewSSLManagerProvider(config *SSLManagerProviderConfig) (*SSLManagerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl manager provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.SecretAccessKey) + client, err := createSDKClient(config.AccessKeyId, config.SecretAccessKey) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &UploaderProvider{ + return &SSLManagerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { +func (m *SSLManagerProvider) SetLogger(logger *slog.Logger) { if logger == nil { - u.logger = slog.New(slog.DiscardHandler) + m.logger = slog.New(slog.DiscardHandler) } else { - u.logger = logger + m.logger = logger } - return u } -func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*uploader.UploadResult, error) { +func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLManageUploadResult, error) { // 解析证书内容 certX509, err := xcert.ParseCertificateFromPEM(certPEM) if err != nil { @@ -78,8 +78,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE PerPage: xtypes.ToPtr(queryCertListPerPage), UsageMode: xtypes.ToPtr(int32(0)), } - queryCertListResp, err := u.sdkClient.QueryCertList(queryCertListReq) - u.logger.Debug("sdk request 'lvdn.QueryCertList'", slog.Any("request", queryCertListReq), slog.Any("response", queryCertListResp)) + queryCertListResp, err := m.sdkClient.QueryCertList(queryCertListReq) + m.logger.Debug("sdk request 'lvdn.QueryCertList'", slog.Any("request", queryCertListReq), slog.Any("response", queryCertListResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'lvdn.QueryCertList': %w", err) } @@ -108,8 +108,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE queryCertDetailReq := &ctyunlvdn.QueryCertDetailRequest{ Id: xtypes.ToPtr(certRecord.Id), } - queryCertDetailResp, err := u.sdkClient.QueryCertDetail(queryCertDetailReq) - u.logger.Debug("sdk request 'lvdn.QueryCertDetail'", slog.Any("request", queryCertDetailReq), slog.Any("response", queryCertDetailResp)) + queryCertDetailResp, err := m.sdkClient.QueryCertDetail(queryCertDetailReq) + m.logger.Debug("sdk request 'lvdn.QueryCertDetail'", slog.Any("request", queryCertDetailReq), slog.Any("response", queryCertDetailResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'lvdn.QueryCertDetail': %w", err) } else if queryCertDetailResp.ReturnObj != nil && queryCertDetailResp.ReturnObj.Result != nil { @@ -127,8 +127,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE // 如果已存在相同证书,直接返回 if isSameCert { - u.logger.Info("ssl certificate already exists") - return &uploader.UploadResult{ + m.logger.Info("ssl certificate already exists") + return &core.SSLManageUploadResult{ CertId: fmt.Sprintf("%d", queryCertDetailResp.ReturnObj.Result.Id), CertName: queryCertDetailResp.ReturnObj.Result.Name, }, nil @@ -154,18 +154,18 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE Certs: xtypes.ToPtr(certPEM), Key: xtypes.ToPtr(privkeyPEM), } - createCertResp, err := u.sdkClient.CreateCert(createCertReq) - u.logger.Debug("sdk request 'lvdn.CreateCert'", slog.Any("request", createCertReq), slog.Any("response", createCertResp)) + createCertResp, err := m.sdkClient.CreateCert(createCertReq) + m.logger.Debug("sdk request 'lvdn.CreateCert'", slog.Any("request", createCertReq), slog.Any("response", createCertResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'lvdn.CreateCert': %w", err) } - return &uploader.UploadResult{ + return &core.SSLManageUploadResult{ CertId: fmt.Sprintf("%d", createCertResp.ReturnObj.Id), CertName: certName, }, nil } -func createSdkClient(accessKeyId, secretAccessKey string) (*ctyunlvdn.Client, error) { +func createSDKClient(accessKeyId, secretAccessKey string) (*ctyunlvdn.Client, error) { return ctyunlvdn.NewClient(accessKeyId, secretAccessKey) } diff --git a/internal/pkg/core/uploader/providers/ctcccloud-lvdn/ctcccloud_lvdn_test.go b/internal/pkg/core/ssl-manager/providers/ctcccloud-lvdn/ctcccloud_lvdn_test.go similarity index 66% rename from internal/pkg/core/uploader/providers/ctcccloud-lvdn/ctcccloud_lvdn_test.go rename to internal/pkg/core/ssl-manager/providers/ctcccloud-lvdn/ctcccloud_lvdn_test.go index 3bcedfdd..7fbb197f 100644 --- a/internal/pkg/core/uploader/providers/ctcccloud-lvdn/ctcccloud_lvdn_test.go +++ b/internal/pkg/core/ssl-manager/providers/ctcccloud-lvdn/ctcccloud_lvdn_test.go @@ -9,7 +9,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/ctcccloud-lvdn" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/ctcccloud-lvdn" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_UPLOADER_CTCCCLOUDLVDN_" + argsPrefix := "CERTIMATE_SSLMANAGER_CTCCCLOUDLVDN_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -32,10 +32,10 @@ func init() { Shell command to run this test: go test -v ./ctcccloud_lvdn_test.go -args \ - --CERTIMATE_UPLOADER_CTCCCLOUDLVDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_UPLOADER_CTCCCLOUDLVDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_UPLOADER_CTCCCLOUDLVDN_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_UPLOADER_CTCCCLOUDLVDN_SECRETACCESSKEY="your-secret-access-key" + --CERTIMATE_SSLMANAGER_CTCCCLOUDLVDN_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLMANAGER_CTCCCLOUDLVDN_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLMANAGER_CTCCCLOUDLVDN_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLMANAGER_CTCCCLOUDLVDN_SECRETACCESSKEY="your-secret-access-key" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -49,7 +49,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("SECRETACCESSKEY: %v", fSecretAccessKey), }, "\n")) - uploader, err := provider.NewUploader(&provider.UploaderConfig{ + sslmanager, err := provider.NewSSLManagerProvider(&provider.SSLManagerProviderConfig{ AccessKeyId: fAccessKeyId, SecretAccessKey: fSecretAccessKey, }) @@ -60,7 +60,7 @@ func TestDeploy(t *testing.T) { fInputCertData, _ := os.ReadFile(fInputCertPath) fInputKeyData, _ := os.ReadFile(fInputKeyPath) - res, err := uploader.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) + res, err := sslmanager.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) if err != nil { t.Errorf("err: %+v", err) return diff --git a/internal/pkg/core/ssl-manager/providers/dogecloud/dogecloud.go b/internal/pkg/core/ssl-manager/providers/dogecloud/dogecloud.go new file mode 100644 index 00000000..cda3c2ae --- /dev/null +++ b/internal/pkg/core/ssl-manager/providers/dogecloud/dogecloud.go @@ -0,0 +1,79 @@ +package dogecloud + +import ( + "context" + "errors" + "fmt" + "log/slog" + "time" + + "github.com/usual2970/certimate/internal/pkg/core" + dogesdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/dogecloud" +) + +type SSLManagerProviderConfig struct { + // 多吉云 AccessKey。 + AccessKey string `json:"accessKey"` + // 多吉云 SecretKey。 + SecretKey string `json:"secretKey"` +} + +type SSLManagerProvider struct { + config *SSLManagerProviderConfig + logger *slog.Logger + sdkClient *dogesdk.Client +} + +var _ core.SSLManager = (*SSLManagerProvider)(nil) + +func NewSSLManagerProvider(config *SSLManagerProviderConfig) (*SSLManagerProvider, error) { + if config == nil { + return nil, errors.New("the configuration of the ssl manager provider is nil") + } + + client, err := createSDKClient(config.AccessKey, config.SecretKey) + if err != nil { + return nil, fmt.Errorf("could not create sdk client: %w", err) + } + + return &SSLManagerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + }, nil +} + +func (m *SSLManagerProvider) SetLogger(logger *slog.Logger) { + if logger == nil { + m.logger = slog.New(slog.DiscardHandler) + } else { + m.logger = logger + } +} + +func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLManageUploadResult, error) { + // 生成新证书名(需符合多吉云命名规则) + certName := fmt.Sprintf("certimate-%d", time.Now().UnixMilli()) + + // 上传新证书 + // REF: https://docs.dogecloud.com/cdn/api-cert-upload + uploadSslCertReq := &dogesdk.UploadCdnCertRequest{ + Note: certName, + Certificate: certPEM, + PrivateKey: privkeyPEM, + } + uploadSslCertResp, err := m.sdkClient.UploadCdnCert(uploadSslCertReq) + m.logger.Debug("sdk request 'cdn.UploadCdnCert'", slog.Any("request", uploadSslCertReq), slog.Any("response", uploadSslCertResp)) + if err != nil { + return nil, fmt.Errorf("failed to execute sdk request 'cdn.UploadCdnCert': %w", err) + } + + return &core.SSLManageUploadResult{ + CertId: fmt.Sprintf("%d", uploadSslCertResp.Data.Id), + CertName: certName, + }, nil +} + +func createSDKClient(accessKey, secretKey string) (*dogesdk.Client, error) { + return dogesdk.NewClient(accessKey, secretKey) +} diff --git a/internal/pkg/core/uploader/providers/gcore-cdn/gcore_cdn.go b/internal/pkg/core/ssl-manager/providers/gcore-cdn/gcore_cdn.go similarity index 50% rename from internal/pkg/core/uploader/providers/gcore-cdn/gcore_cdn.go rename to internal/pkg/core/ssl-manager/providers/gcore-cdn/gcore_cdn.go index 86a4c314..1ffa2a64 100644 --- a/internal/pkg/core/uploader/providers/gcore-cdn/gcore_cdn.go +++ b/internal/pkg/core/ssl-manager/providers/gcore-cdn/gcore_cdn.go @@ -10,78 +10,71 @@ import ( "github.com/G-Core/gcorelabscdn-go/gcore/provider" "github.com/G-Core/gcorelabscdn-go/sslcerts" - "github.com/usual2970/certimate/internal/pkg/core/uploader" + "github.com/usual2970/certimate/internal/pkg/core" gcoresdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/gcore" ) -type UploaderConfig struct { +type SSLManagerProviderConfig struct { // Gcore API Token。 ApiToken string `json:"apiToken"` } -type UploaderProvider struct { - config *UploaderConfig +type SSLManagerProvider struct { + config *SSLManagerProviderConfig logger *slog.Logger sdkClient *sslcerts.Service } -var _ uploader.Uploader = (*UploaderProvider)(nil) +var _ core.SSLManager = (*SSLManagerProvider)(nil) -func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { +func NewSSLManagerProvider(config *SSLManagerProviderConfig) (*SSLManagerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl manager provider is nil") } - client, err := createSdkClient(config.ApiToken) + client, err := createSDKClient(config.ApiToken) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &UploaderProvider{ + return &SSLManagerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { +func (m *SSLManagerProvider) SetLogger(logger *slog.Logger) { if logger == nil { - u.logger = slog.New(slog.DiscardHandler) + m.logger = slog.New(slog.DiscardHandler) } else { - u.logger = logger + m.logger = logger } - return u } -func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*uploader.UploadResult, error) { - // 生成新证书名(需符合 Gcore 命名规则) - var certId, certName string - certName = fmt.Sprintf("certimate_%d", time.Now().UnixMilli()) - +func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLManageUploadResult, error) { // 新增证书 // REF: https://api.gcore.com/docs/cdn#tag/SSL-certificates/operation/add_ssl_certificates createCertificateReq := &sslcerts.CreateRequest{ - Name: certName, + Name: fmt.Sprintf("certimate_%d", time.Now().UnixMilli()), Cert: certPEM, PrivateKey: privkeyPEM, Automated: false, ValidateRootCA: false, } - createCertificateResp, err := u.sdkClient.Create(context.TODO(), createCertificateReq) - u.logger.Debug("sdk request 'sslcerts.Create'", slog.Any("request", createCertificateReq), slog.Any("response", createCertificateResp)) + createCertificateResp, err := m.sdkClient.Create(context.TODO(), createCertificateReq) + m.logger.Debug("sdk request 'sslcerts.Create'", slog.Any("request", createCertificateReq), slog.Any("response", createCertificateResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'sslcerts.Create': %w", err) } - certId = fmt.Sprintf("%d", createCertificateResp.ID) - certName = createCertificateResp.Name - return &uploader.UploadResult{ - CertId: certId, - CertName: certName, + return &core.SSLManageUploadResult{ + CertId: fmt.Sprintf("%d", createCertificateResp.ID), + CertName: createCertificateResp.Name, }, nil } -func createSdkClient(apiToken string) (*sslcerts.Service, error) { +func createSDKClient(apiToken string) (*sslcerts.Service, error) { if apiToken == "" { return nil, errors.New("invalid gcore api token") } diff --git a/internal/pkg/core/uploader/providers/huaweicloud-elb/huaweicloud_elb.go b/internal/pkg/core/ssl-manager/providers/huaweicloud-elb/huaweicloud_elb.go similarity index 77% rename from internal/pkg/core/uploader/providers/huaweicloud-elb/huaweicloud_elb.go rename to internal/pkg/core/ssl-manager/providers/huaweicloud-elb/huaweicloud_elb.go index 8ed6c920..ae3c87ca 100644 --- a/internal/pkg/core/uploader/providers/huaweicloud-elb/huaweicloud_elb.go +++ b/internal/pkg/core/ssl-manager/providers/huaweicloud-elb/huaweicloud_elb.go @@ -16,12 +16,12 @@ import ( hciammodel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/iam/v3/model" hciamregion "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/iam/v3/region" - "github.com/usual2970/certimate/internal/pkg/core/uploader" + "github.com/usual2970/certimate/internal/pkg/core" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type UploaderConfig struct { +type SSLManagerProviderConfig struct { // 华为云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 华为云 SecretAccessKey。 @@ -32,41 +32,40 @@ type UploaderConfig struct { Region string `json:"region"` } -type UploaderProvider struct { - config *UploaderConfig +type SSLManagerProvider struct { + config *SSLManagerProviderConfig logger *slog.Logger sdkClient *hcelb.ElbClient } -var _ uploader.Uploader = (*UploaderProvider)(nil) +var _ core.SSLManager = (*SSLManagerProvider)(nil) -func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { +func NewSSLManagerProvider(config *SSLManagerProviderConfig) (*SSLManagerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl manager provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.SecretAccessKey, config.Region) + client, err := createSDKClient(config.AccessKeyId, config.SecretAccessKey, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &UploaderProvider{ + return &SSLManagerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { +func (m *SSLManagerProvider) SetLogger(logger *slog.Logger) { if logger == nil { - u.logger = slog.New(slog.DiscardHandler) + m.logger = slog.New(slog.DiscardHandler) } else { - u.logger = logger + m.logger = logger } - return u } -func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*uploader.UploadResult, error) { +func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLManageUploadResult, error) { // 解析证书内容 certX509, err := xcert.ParseCertificateFromPEM(certPEM) if err != nil { @@ -89,8 +88,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE Marker: listCertificatesMarker, Type: &[]string{"server"}, } - listCertificatesResp, err := u.sdkClient.ListCertificates(listCertificatesReq) - u.logger.Debug("sdk request 'elb.ListCertificates'", slog.Any("request", listCertificatesReq), slog.Any("response", listCertificatesResp)) + listCertificatesResp, err := m.sdkClient.ListCertificates(listCertificatesReq) + m.logger.Debug("sdk request 'elb.ListCertificates'", slog.Any("request", listCertificatesReq), slog.Any("response", listCertificatesResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'elb.ListCertificates': %w", err) } @@ -111,8 +110,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE // 如果已存在相同证书,直接返回 if isSameCert { - u.logger.Info("ssl certificate already exists") - return &uploader.UploadResult{ + m.logger.Info("ssl certificate already exists") + return &core.SSLManageUploadResult{ CertId: certDetail.Id, CertName: certDetail.Name, }, nil @@ -129,21 +128,20 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE // 获取项目 ID // REF: https://support.huaweicloud.com/api-iam/iam_06_0001.html - projectId, err := getSdkProjectId(u.config.AccessKeyId, u.config.SecretAccessKey, u.config.Region) + projectId, err := getSdkProjectId(m.config.AccessKeyId, m.config.SecretAccessKey, m.config.Region) if err != nil { return nil, fmt.Errorf("failed to get SDK project id: %w", err) } // 生成新证书名(需符合华为云命名规则) - var certId, certName string - certName = fmt.Sprintf("certimate-%d", time.Now().UnixMilli()) + certName := fmt.Sprintf("certimate-%d", time.Now().UnixMilli()) // 创建新证书 // REF: https://support.huaweicloud.com/api-elb/CreateCertificate.html createCertificateReq := &hcelbmodel.CreateCertificateRequest{ Body: &hcelbmodel.CreateCertificateRequestBody{ Certificate: &hcelbmodel.CreateCertificateOption{ - EnterpriseProjectId: xtypes.ToPtrOrZeroNil(u.config.EnterpriseProjectId), + EnterpriseProjectId: xtypes.ToPtrOrZeroNil(m.config.EnterpriseProjectId), ProjectId: xtypes.ToPtr(projectId), Name: xtypes.ToPtr(certName), Certificate: xtypes.ToPtr(certPEM), @@ -151,21 +149,19 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE }, }, } - createCertificateResp, err := u.sdkClient.CreateCertificate(createCertificateReq) - u.logger.Debug("sdk request 'elb.CreateCertificate'", slog.Any("request", createCertificateReq), slog.Any("response", createCertificateResp)) + createCertificateResp, err := m.sdkClient.CreateCertificate(createCertificateReq) + m.logger.Debug("sdk request 'elb.CreateCertificate'", slog.Any("request", createCertificateReq), slog.Any("response", createCertificateResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'elb.CreateCertificate': %w", err) } - certId = createCertificateResp.Certificate.Id - certName = createCertificateResp.Certificate.Name - return &uploader.UploadResult{ - CertId: certId, - CertName: certName, + return &core.SSLManageUploadResult{ + CertId: createCertificateResp.Certificate.Id, + CertName: createCertificateResp.Certificate.Name, }, nil } -func createSdkClient(accessKeyId, secretAccessKey, region string) (*hcelb.ElbClient, error) { +func createSDKClient(accessKeyId, secretAccessKey, region string) (*hcelb.ElbClient, error) { if region == "" { region = "cn-north-4" // ELB 服务默认区域:华北四北京 } diff --git a/internal/pkg/core/uploader/providers/huaweicloud-scm/huaweicloud_scm.go b/internal/pkg/core/ssl-manager/providers/huaweicloud-scm/huaweicloud_scm.go similarity index 73% rename from internal/pkg/core/uploader/providers/huaweicloud-scm/huaweicloud_scm.go rename to internal/pkg/core/ssl-manager/providers/huaweicloud-scm/huaweicloud_scm.go index ba59a906..36dd2f96 100644 --- a/internal/pkg/core/uploader/providers/huaweicloud-scm/huaweicloud_scm.go +++ b/internal/pkg/core/ssl-manager/providers/huaweicloud-scm/huaweicloud_scm.go @@ -2,6 +2,7 @@ package huaweicloudscm import ( "context" + "errors" "fmt" "log/slog" "time" @@ -11,12 +12,12 @@ import ( hcscmmodel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/scm/v3/model" hcscmregion "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/scm/v3/region" - "github.com/usual2970/certimate/internal/pkg/core/uploader" + "github.com/usual2970/certimate/internal/pkg/core" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type UploaderConfig struct { +type SSLManagerProviderConfig struct { // 华为云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 华为云 SecretAccessKey。 @@ -27,41 +28,40 @@ type UploaderConfig struct { Region string `json:"region"` } -type UploaderProvider struct { - config *UploaderConfig +type SSLManagerProvider struct { + config *SSLManagerProviderConfig logger *slog.Logger sdkClient *hcscm.ScmClient } -var _ uploader.Uploader = (*UploaderProvider)(nil) +var _ core.SSLManager = (*SSLManagerProvider)(nil) -func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { +func NewSSLManagerProvider(config *SSLManagerProviderConfig) (*SSLManagerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl manager provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.SecretAccessKey, config.Region) + client, err := createSDKClient(config.AccessKeyId, config.SecretAccessKey, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &UploaderProvider{ + return &SSLManagerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { +func (m *SSLManagerProvider) SetLogger(logger *slog.Logger) { if logger == nil { - u.logger = slog.New(slog.DiscardHandler) + m.logger = slog.New(slog.DiscardHandler) } else { - u.logger = logger + m.logger = logger } - return u } -func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*uploader.UploadResult, error) { +func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLManageUploadResult, error) { // 解析证书内容 certX509, err := xcert.ParseCertificateFromPEM(certPEM) if err != nil { @@ -81,14 +81,14 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE } listCertificatesReq := &hcscmmodel.ListCertificatesRequest{ - EnterpriseProjectId: xtypes.ToPtrOrZeroNil(u.config.EnterpriseProjectId), + EnterpriseProjectId: xtypes.ToPtrOrZeroNil(m.config.EnterpriseProjectId), Limit: xtypes.ToPtr(listCertificatesLimit), Offset: xtypes.ToPtr(listCertificatesOffset), SortDir: xtypes.ToPtr("DESC"), SortKey: xtypes.ToPtr("certExpiredTime"), } - listCertificatesResp, err := u.sdkClient.ListCertificates(listCertificatesReq) - u.logger.Debug("sdk request 'scm.ListCertificates'", slog.Any("request", listCertificatesReq), slog.Any("response", listCertificatesResp)) + listCertificatesResp, err := m.sdkClient.ListCertificates(listCertificatesReq) + m.logger.Debug("sdk request 'scm.ListCertificates'", slog.Any("request", listCertificatesReq), slog.Any("response", listCertificatesResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'scm.ListCertificates': %w", err) } @@ -98,8 +98,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE exportCertificateReq := &hcscmmodel.ExportCertificateRequest{ CertificateId: certDetail.Id, } - exportCertificateResp, err := u.sdkClient.ExportCertificate(exportCertificateReq) - u.logger.Debug("sdk request 'scm.ExportCertificate'", slog.Any("request", exportCertificateReq), slog.Any("response", exportCertificateResp)) + exportCertificateResp, err := m.sdkClient.ExportCertificate(exportCertificateReq) + m.logger.Debug("sdk request 'scm.ExportCertificate'", slog.Any("request", exportCertificateReq), slog.Any("response", exportCertificateResp)) if err != nil { if exportCertificateResp != nil && exportCertificateResp.HttpStatusCode == 404 { continue @@ -121,8 +121,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE // 如果已存在相同证书,直接返回 if isSameCert { - u.logger.Info("ssl certificate already exists") - return &uploader.UploadResult{ + m.logger.Info("ssl certificate already exists") + return &core.SSLManageUploadResult{ CertId: certDetail.Id, CertName: certDetail.Name, }, nil @@ -138,33 +138,31 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE } // 生成新证书名(需符合华为云命名规则) - var certId, certName string - certName = fmt.Sprintf("certimate-%d", time.Now().UnixMilli()) + certName := fmt.Sprintf("certimate-%d", time.Now().UnixMilli()) // 上传新证书 // REF: https://support.huaweicloud.com/api-ccm/ImportCertificate.html importCertificateReq := &hcscmmodel.ImportCertificateRequest{ Body: &hcscmmodel.ImportCertificateRequestBody{ - EnterpriseProjectId: xtypes.ToPtrOrZeroNil(u.config.EnterpriseProjectId), + EnterpriseProjectId: xtypes.ToPtrOrZeroNil(m.config.EnterpriseProjectId), Name: certName, Certificate: certPEM, PrivateKey: privkeyPEM, }, } - importCertificateResp, err := u.sdkClient.ImportCertificate(importCertificateReq) - u.logger.Debug("sdk request 'scm.ImportCertificate'", slog.Any("request", importCertificateReq), slog.Any("response", importCertificateResp)) + importCertificateResp, err := m.sdkClient.ImportCertificate(importCertificateReq) + m.logger.Debug("sdk request 'scm.ImportCertificate'", slog.Any("request", importCertificateReq), slog.Any("response", importCertificateResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'scm.ImportCertificate': %w", err) } - certId = *importCertificateResp.CertificateId - return &uploader.UploadResult{ - CertId: certId, + return &core.SSLManageUploadResult{ + CertId: *importCertificateResp.CertificateId, CertName: certName, }, nil } -func createSdkClient(accessKeyId, secretAccessKey, region string) (*hcscm.ScmClient, error) { +func createSDKClient(accessKeyId, secretAccessKey, region string) (*hcscm.ScmClient, error) { if region == "" { region = "cn-north-4" // SCM 服务默认区域:华北四北京 } diff --git a/internal/pkg/core/uploader/providers/huaweicloud-waf/huaweicloud_waf.go b/internal/pkg/core/ssl-manager/providers/huaweicloud-waf/huaweicloud_waf.go similarity index 76% rename from internal/pkg/core/uploader/providers/huaweicloud-waf/huaweicloud_waf.go rename to internal/pkg/core/ssl-manager/providers/huaweicloud-waf/huaweicloud_waf.go index 38ecb30a..17b11ca0 100644 --- a/internal/pkg/core/uploader/providers/huaweicloud-waf/huaweicloud_waf.go +++ b/internal/pkg/core/ssl-manager/providers/huaweicloud-waf/huaweicloud_waf.go @@ -16,12 +16,12 @@ import ( hcwafmodel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/waf/v1/model" hcwafregion "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/waf/v1/region" - "github.com/usual2970/certimate/internal/pkg/core/uploader" + "github.com/usual2970/certimate/internal/pkg/core" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type UploaderConfig struct { +type SSLManagerProviderConfig struct { // 华为云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 华为云 SecretAccessKey。 @@ -32,41 +32,40 @@ type UploaderConfig struct { Region string `json:"region"` } -type UploaderProvider struct { - config *UploaderConfig +type SSLManagerProvider struct { + config *SSLManagerProviderConfig logger *slog.Logger sdkClient *hcwaf.WafClient } -var _ uploader.Uploader = (*UploaderProvider)(nil) +var _ core.SSLManager = (*SSLManagerProvider)(nil) -func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { +func NewSSLManagerProvider(config *SSLManagerProviderConfig) (*SSLManagerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl manager provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.SecretAccessKey, config.Region) + client, err := createSDKClient(config.AccessKeyId, config.SecretAccessKey, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &UploaderProvider{ + return &SSLManagerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { +func (m *SSLManagerProvider) SetLogger(logger *slog.Logger) { if logger == nil { - u.logger = slog.New(slog.DiscardHandler) + m.logger = slog.New(slog.DiscardHandler) } else { - u.logger = logger + m.logger = logger } - return u } -func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*uploader.UploadResult, error) { +func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLManageUploadResult, error) { // 解析证书内容 certX509, err := xcert.ParseCertificateFromPEM(certPEM) if err != nil { @@ -86,12 +85,12 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE } listCertificatesReq := &hcwafmodel.ListCertificatesRequest{ - EnterpriseProjectId: xtypes.ToPtrOrZeroNil(u.config.EnterpriseProjectId), + EnterpriseProjectId: xtypes.ToPtrOrZeroNil(m.config.EnterpriseProjectId), Page: xtypes.ToPtr(listCertificatesPage), Pagesize: xtypes.ToPtr(listCertificatesPageSize), } - listCertificatesResp, err := u.sdkClient.ListCertificates(listCertificatesReq) - u.logger.Debug("sdk request 'waf.ShowCertificate'", slog.Any("request", listCertificatesReq), slog.Any("response", listCertificatesResp)) + listCertificatesResp, err := m.sdkClient.ListCertificates(listCertificatesReq) + m.logger.Debug("sdk request 'waf.ShowCertificate'", slog.Any("request", listCertificatesReq), slog.Any("response", listCertificatesResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'waf.ListCertificates': %w", err) } @@ -99,11 +98,11 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE if listCertificatesResp.Items != nil { for _, certItem := range *listCertificatesResp.Items { showCertificateReq := &hcwafmodel.ShowCertificateRequest{ - EnterpriseProjectId: xtypes.ToPtrOrZeroNil(u.config.EnterpriseProjectId), + EnterpriseProjectId: xtypes.ToPtrOrZeroNil(m.config.EnterpriseProjectId), CertificateId: certItem.Id, } - showCertificateResp, err := u.sdkClient.ShowCertificate(showCertificateReq) - u.logger.Debug("sdk request 'waf.ShowCertificate'", slog.Any("request", showCertificateReq), slog.Any("response", showCertificateResp)) + showCertificateResp, err := m.sdkClient.ShowCertificate(showCertificateReq) + m.logger.Debug("sdk request 'waf.ShowCertificate'", slog.Any("request", showCertificateReq), slog.Any("response", showCertificateResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'waf.ShowCertificate': %w", err) } @@ -122,8 +121,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE // 如果已存在相同证书,直接返回 if isSameCert { - u.logger.Info("ssl certificate already exists") - return &uploader.UploadResult{ + m.logger.Info("ssl certificate already exists") + return &core.SSLManageUploadResult{ CertId: certItem.Id, CertName: certItem.Name, }, nil @@ -139,34 +138,31 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE } // 生成新证书名(需符合华为云命名规则) - var certId, certName string - certName = fmt.Sprintf("certimate-%d", time.Now().UnixMilli()) + certName := fmt.Sprintf("certimate-%d", time.Now().UnixMilli()) // 创建证书 // REF: https://support.huaweicloud.com/api-waf/CreateCertificate.html createCertificateReq := &hcwafmodel.CreateCertificateRequest{ - EnterpriseProjectId: xtypes.ToPtrOrZeroNil(u.config.EnterpriseProjectId), + EnterpriseProjectId: xtypes.ToPtrOrZeroNil(m.config.EnterpriseProjectId), Body: &hcwafmodel.CreateCertificateRequestBody{ Name: certName, Content: certPEM, Key: privkeyPEM, }, } - createCertificateResp, err := u.sdkClient.CreateCertificate(createCertificateReq) - u.logger.Debug("sdk request 'waf.CreateCertificate'", slog.Any("request", createCertificateReq), slog.Any("response", createCertificateResp)) + createCertificateResp, err := m.sdkClient.CreateCertificate(createCertificateReq) + m.logger.Debug("sdk request 'waf.CreateCertificate'", slog.Any("request", createCertificateReq), slog.Any("response", createCertificateResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'waf.CreateCertificate': %w", err) } - certId = *createCertificateResp.Id - certName = *createCertificateResp.Name - return &uploader.UploadResult{ - CertId: certId, + return &core.SSLManageUploadResult{ + CertId: *createCertificateResp.Id, CertName: certName, }, nil } -func createSdkClient(accessKeyId, secretAccessKey, region string) (*hcwaf.WafClient, error) { +func createSDKClient(accessKeyId, secretAccessKey, region string) (*hcwaf.WafClient, error) { projectId, err := getSdkProjectId(accessKeyId, secretAccessKey, region) if err != nil { return nil, err diff --git a/internal/pkg/core/uploader/providers/jdcloud-ssl/jdcloud_ssl.go b/internal/pkg/core/ssl-manager/providers/jdcloud-ssl/jdcloud_ssl.go similarity index 74% rename from internal/pkg/core/uploader/providers/jdcloud-ssl/jdcloud_ssl.go rename to internal/pkg/core/ssl-manager/providers/jdcloud-ssl/jdcloud_ssl.go index b9ac6d55..7ae6b84f 100644 --- a/internal/pkg/core/uploader/providers/jdcloud-ssl/jdcloud_ssl.go +++ b/internal/pkg/core/ssl-manager/providers/jdcloud-ssl/jdcloud_ssl.go @@ -4,6 +4,7 @@ import ( "context" "crypto/sha256" "encoding/hex" + "errors" "fmt" "log/slog" "strings" @@ -14,52 +15,51 @@ import ( jdsslclient "github.com/jdcloud-api/jdcloud-sdk-go/services/ssl/client" "golang.org/x/exp/slices" - "github.com/usual2970/certimate/internal/pkg/core/uploader" + "github.com/usual2970/certimate/internal/pkg/core" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" ) -type UploaderConfig struct { +type SSLManagerProviderConfig struct { // 京东云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 京东云 AccessKeySecret。 AccessKeySecret string `json:"accessKeySecret"` } -type UploaderProvider struct { - config *UploaderConfig +type SSLManagerProvider struct { + config *SSLManagerProviderConfig logger *slog.Logger sdkClient *jdsslclient.SslClient } -var _ uploader.Uploader = (*UploaderProvider)(nil) +var _ core.SSLManager = (*SSLManagerProvider)(nil) -func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { +func NewSSLManagerProvider(config *SSLManagerProviderConfig) (*SSLManagerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl manager provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret) + client, err := createSDKClient(config.AccessKeyId, config.AccessKeySecret) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &UploaderProvider{ + return &SSLManagerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { +func (m *SSLManagerProvider) SetLogger(logger *slog.Logger) { if logger == nil { - u.logger = slog.New(slog.DiscardHandler) + m.logger = slog.New(slog.DiscardHandler) } else { - u.logger = logger + m.logger = logger } - return u } -func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*uploader.UploadResult, error) { +func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLManageUploadResult, error) { // 解析证书内容 certX509, err := xcert.ParseCertificateFromPEM(certPEM) if err != nil { @@ -87,8 +87,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE describeCertsReq.SetDomainName(certX509.Subject.CommonName) describeCertsReq.SetPageNumber(describeCertsPageNumber) describeCertsReq.SetPageSize(describeCertsPageSize) - describeCertsResp, err := u.sdkClient.DescribeCerts(describeCertsReq) - u.logger.Debug("sdk request 'ssl.DescribeCerts'", slog.Any("request", describeCertsReq), slog.Any("response", describeCertsResp)) + describeCertsResp, err := m.sdkClient.DescribeCerts(describeCertsReq) + m.logger.Debug("sdk request 'ssl.DescribeCerts'", slog.Any("request", describeCertsReq), slog.Any("response", describeCertsResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'ssl.DescribeCerts': %w", err) } @@ -119,8 +119,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE } // 如果以上信息都一致,则视为已存在相同证书,直接返回 - u.logger.Info("ssl certificate already exists") - return &uploader.UploadResult{ + m.logger.Info("ssl certificate already exists") + return &core.SSLManageUploadResult{ CertId: certDetail.CertId, CertName: certDetail.CertName, }, nil @@ -139,19 +139,19 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE // 上传证书 // REF: https://docs.jdcloud.com/cn/ssl-certificate/api/uploadcert uploadCertReq := jdsslapi.NewUploadCertRequest(certName, privkeyPEM, certPEM) - uploadCertResp, err := u.sdkClient.UploadCert(uploadCertReq) - u.logger.Debug("sdk request 'ssl.UploadCertificate'", slog.Any("request", uploadCertReq), slog.Any("response", uploadCertResp)) + uploadCertResp, err := m.sdkClient.UploadCert(uploadCertReq) + m.logger.Debug("sdk request 'ssl.UploadCertificate'", slog.Any("request", uploadCertReq), slog.Any("response", uploadCertResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'ssl.UploadCertificate': %w", err) } - return &uploader.UploadResult{ + return &core.SSLManageUploadResult{ CertId: uploadCertResp.Result.CertId, CertName: certName, }, nil } -func createSdkClient(accessKeyId, accessKeySecret string) (*jdsslclient.SslClient, error) { +func createSDKClient(accessKeyId, accessKeySecret string) (*jdsslclient.SslClient, error) { clientCredentials := jdcore.NewCredentials(accessKeyId, accessKeySecret) client := jdsslclient.NewSslClient(clientCredentials) client.SetLogger(jdcore.NewDefaultLogger(jdcore.LogWarn)) diff --git a/internal/pkg/core/uploader/providers/jdcloud-ssl/jdcloud_ssl_test.go b/internal/pkg/core/ssl-manager/providers/jdcloud-ssl/jdcloud_ssl_test.go similarity index 67% rename from internal/pkg/core/uploader/providers/jdcloud-ssl/jdcloud_ssl_test.go rename to internal/pkg/core/ssl-manager/providers/jdcloud-ssl/jdcloud_ssl_test.go index 273310e0..63430659 100644 --- a/internal/pkg/core/uploader/providers/jdcloud-ssl/jdcloud_ssl_test.go +++ b/internal/pkg/core/ssl-manager/providers/jdcloud-ssl/jdcloud_ssl_test.go @@ -9,7 +9,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/jdcloud-ssl" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/jdcloud-ssl" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_UPLOADER_JDCLOUDSSL_" + argsPrefix := "CERTIMATE_SSLMANAGER_JDCLOUDSSL_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -32,10 +32,10 @@ func init() { Shell command to run this test: go test -v ./jdcloud_ssl_test.go -args \ - --CERTIMATE_UPLOADER_JDCLOUDSSL_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_UPLOADER_JDCLOUDSSL_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_UPLOADER_JDCLOUDSSL_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_UPLOADER_JDCLOUDSSL_ACCESSKEYSECRET="your-access-key-secret" + --CERTIMATE_SSLMANAGER_JDCLOUDSSL_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLMANAGER_JDCLOUDSSL_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLMANAGER_JDCLOUDSSL_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLMANAGER_JDCLOUDSSL_ACCESSKEYSECRET="your-access-key-secret" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -49,7 +49,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("ACCESSKEYSECRET: %v", fAccessKeySecret), }, "\n")) - uploader, err := provider.NewUploader(&provider.UploaderConfig{ + sslmanager, err := provider.NewSSLManagerProvider(&provider.SSLManagerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, }) @@ -60,7 +60,7 @@ func TestDeploy(t *testing.T) { fInputCertData, _ := os.ReadFile(fInputCertPath) fInputKeyData, _ := os.ReadFile(fInputKeyPath) - res, err := uploader.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) + res, err := sslmanager.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) if err != nil { t.Errorf("err: %+v", err) return diff --git a/internal/pkg/core/uploader/providers/qiniu-sslcert/qiniu_sslcert.go b/internal/pkg/core/ssl-manager/providers/qiniu-sslcert/qiniu_sslcert.go similarity index 55% rename from internal/pkg/core/uploader/providers/qiniu-sslcert/qiniu_sslcert.go rename to internal/pkg/core/ssl-manager/providers/qiniu-sslcert/qiniu_sslcert.go index a6f18e5e..e2566a03 100644 --- a/internal/pkg/core/uploader/providers/qiniu-sslcert/qiniu_sslcert.go +++ b/internal/pkg/core/ssl-manager/providers/qiniu-sslcert/qiniu_sslcert.go @@ -9,53 +9,52 @@ import ( "github.com/qiniu/go-sdk/v7/auth" - "github.com/usual2970/certimate/internal/pkg/core/uploader" + "github.com/usual2970/certimate/internal/pkg/core" qiniusdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/qiniu" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" ) -type UploaderConfig struct { +type SSLManagerProviderConfig struct { // 七牛云 AccessKey。 AccessKey string `json:"accessKey"` // 七牛云 SecretKey。 SecretKey string `json:"secretKey"` } -type UploaderProvider struct { - config *UploaderConfig +type SSLManagerProvider struct { + config *SSLManagerProviderConfig logger *slog.Logger sdkClient *qiniusdk.CdnManager } -var _ uploader.Uploader = (*UploaderProvider)(nil) +var _ core.SSLManager = (*SSLManagerProvider)(nil) -func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { +func NewSSLManagerProvider(config *SSLManagerProviderConfig) (*SSLManagerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl manager provider is nil") } - client, err := createSdkClient(config.AccessKey, config.SecretKey) + client, err := createSDKClient(config.AccessKey, config.SecretKey) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &UploaderProvider{ + return &SSLManagerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { +func (m *SSLManagerProvider) SetLogger(logger *slog.Logger) { if logger == nil { - u.logger = slog.New(slog.DiscardHandler) + m.logger = slog.New(slog.DiscardHandler) } else { - u.logger = logger + m.logger = logger } - return u } -func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*uploader.UploadResult, error) { +func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLManageUploadResult, error) { // 解析证书内容 certX509, err := xcert.ParseCertificateFromPEM(certPEM) if err != nil { @@ -63,25 +62,23 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE } // 生成新证书名(需符合七牛云命名规则) - var certId, certName string - certName = fmt.Sprintf("certimate-%d", time.Now().UnixMilli()) + certName := fmt.Sprintf("certimate-%d", time.Now().UnixMilli()) // 上传新证书 // REF: https://developer.qiniu.com/fusion/8593/interface-related-certificate - uploadSslCertResp, err := u.sdkClient.UploadSslCert(context.TODO(), certName, certX509.Subject.CommonName, certPEM, privkeyPEM) - u.logger.Debug("sdk request 'cdn.UploadSslCert'", slog.Any("response", uploadSslCertResp)) + uploadSslCertResp, err := m.sdkClient.UploadSslCert(context.TODO(), certName, certX509.Subject.CommonName, certPEM, privkeyPEM) + m.logger.Debug("sdk request 'cdn.UploadSslCert'", slog.Any("response", uploadSslCertResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'cdn.UploadSslCert': %w", err) } - certId = uploadSslCertResp.CertID - return &uploader.UploadResult{ - CertId: certId, + return &core.SSLManageUploadResult{ + CertId: uploadSslCertResp.CertID, CertName: certName, }, nil } -func createSdkClient(accessKey, secretKey string) (*qiniusdk.CdnManager, error) { +func createSDKClient(accessKey, secretKey string) (*qiniusdk.CdnManager, error) { if secretKey == "" { return nil, errors.New("invalid qiniu access key") } diff --git a/internal/pkg/core/uploader/providers/rainyun-sslcenter/rainyun_sslcenter.go b/internal/pkg/core/ssl-manager/providers/rainyun-sslcenter/rainyun_sslcenter.go similarity index 69% rename from internal/pkg/core/uploader/providers/rainyun-sslcenter/rainyun_sslcenter.go rename to internal/pkg/core/ssl-manager/providers/rainyun-sslcenter/rainyun_sslcenter.go index 02234795..fa368905 100644 --- a/internal/pkg/core/uploader/providers/rainyun-sslcenter/rainyun_sslcenter.go +++ b/internal/pkg/core/ssl-manager/providers/rainyun-sslcenter/rainyun_sslcenter.go @@ -7,56 +7,55 @@ import ( "log/slog" "strings" - "github.com/usual2970/certimate/internal/pkg/core/uploader" + "github.com/usual2970/certimate/internal/pkg/core" rainyunsdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/rainyun" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" ) -type UploaderConfig struct { +type SSLManagerProviderConfig struct { // 雨云 API 密钥。 ApiKey string `json:"ApiKey"` } -type UploaderProvider struct { - config *UploaderConfig +type SSLManagerProvider struct { + config *SSLManagerProviderConfig logger *slog.Logger sdkClient *rainyunsdk.Client } -var _ uploader.Uploader = (*UploaderProvider)(nil) +var _ core.SSLManager = (*SSLManagerProvider)(nil) -func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { +func NewSSLManagerProvider(config *SSLManagerProviderConfig) (*SSLManagerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl manager provider is nil") } - client, err := createSdkClient(config.ApiKey) + client, err := createSDKClient(config.ApiKey) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &UploaderProvider{ + return &SSLManagerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { +func (m *SSLManagerProvider) SetLogger(logger *slog.Logger) { if logger == nil { - u.logger = slog.New(slog.DiscardHandler) + m.logger = slog.New(slog.DiscardHandler) } else { - u.logger = logger + m.logger = logger } - return u } -func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*uploader.UploadResult, error) { +func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLManageUploadResult, error) { // 遍历证书列表,避免重复上传 - if res, err := u.findCertIfExists(ctx, certPEM); err != nil { + if res, err := m.findCertIfExists(ctx, certPEM); err != nil { return nil, err } else if res != nil { - u.logger.Info("ssl certificate already exists") + m.logger.Info("ssl certificate already exists") return res, nil } @@ -66,14 +65,14 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE Cert: certPEM, Key: privkeyPEM, } - sslCenterCreateResp, err := u.sdkClient.SslCenterCreate(sslCenterCreateReq) - u.logger.Debug("sdk request 'sslcenter.Create'", slog.Any("request", sslCenterCreateReq), slog.Any("response", sslCenterCreateResp)) + sslCenterCreateResp, err := m.sdkClient.SslCenterCreate(sslCenterCreateReq) + m.logger.Debug("sdk request 'sslcenter.Create'", slog.Any("request", sslCenterCreateReq), slog.Any("response", sslCenterCreateResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'sslcenter.Create': %w", err) } // 遍历证书列表,获取刚刚上传证书 ID - if res, err := u.findCertIfExists(ctx, certPEM); err != nil { + if res, err := m.findCertIfExists(ctx, certPEM); err != nil { return nil, err } else if res == nil { return nil, errors.New("no ssl certificate found, may be upload failed") @@ -82,7 +81,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE } } -func (u *UploaderProvider) findCertIfExists(ctx context.Context, certPEM string) (*uploader.UploadResult, error) { +func (m *SSLManagerProvider) findCertIfExists(ctx context.Context, certPEM string) (*core.SSLManageUploadResult, error) { // 解析证书内容 certX509, err := xcert.ParseCertificateFromPEM(certPEM) if err != nil { @@ -108,8 +107,8 @@ func (u *UploaderProvider) findCertIfExists(ctx context.Context, certPEM string) Page: &sslCenterListPage, PerPage: &sslCenterListPerPage, } - sslCenterListResp, err := u.sdkClient.SslCenterList(sslCenterListReq) - u.logger.Debug("sdk request 'sslcenter.List'", slog.Any("request", sslCenterListReq), slog.Any("response", sslCenterListResp)) + sslCenterListResp, err := m.sdkClient.SslCenterList(sslCenterListReq) + m.logger.Debug("sdk request 'sslcenter.List'", slog.Any("request", sslCenterListReq), slog.Any("response", sslCenterListResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'sslcenter.List': %w", err) } @@ -127,7 +126,7 @@ func (u *UploaderProvider) findCertIfExists(ctx context.Context, certPEM string) } // 最后对比证书内容 - sslCenterGetResp, err := u.sdkClient.SslCenterGet(sslItem.ID) + sslCenterGetResp, err := m.sdkClient.SslCenterGet(sslItem.ID) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'sslcenter.Get': %w", err) } @@ -148,7 +147,7 @@ func (u *UploaderProvider) findCertIfExists(ctx context.Context, certPEM string) // 如果已存在相同证书,直接返回 if isSameCert { - return &uploader.UploadResult{ + return &core.SSLManageUploadResult{ CertId: fmt.Sprintf("%d", sslItem.ID), }, nil } @@ -165,6 +164,6 @@ func (u *UploaderProvider) findCertIfExists(ctx context.Context, certPEM string) return nil, nil } -func createSdkClient(apiKey string) (*rainyunsdk.Client, error) { +func createSDKClient(apiKey string) (*rainyunsdk.Client, error) { return rainyunsdk.NewClient(apiKey) } diff --git a/internal/pkg/core/uploader/providers/rainyun-sslcenter/rainyun_sslcenter_test.go b/internal/pkg/core/ssl-manager/providers/rainyun-sslcenter/rainyun_sslcenter_test.go similarity index 65% rename from internal/pkg/core/uploader/providers/rainyun-sslcenter/rainyun_sslcenter_test.go rename to internal/pkg/core/ssl-manager/providers/rainyun-sslcenter/rainyun_sslcenter_test.go index e6f801a1..d4f60484 100644 --- a/internal/pkg/core/uploader/providers/rainyun-sslcenter/rainyun_sslcenter_test.go +++ b/internal/pkg/core/ssl-manager/providers/rainyun-sslcenter/rainyun_sslcenter_test.go @@ -9,7 +9,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/rainyun-sslcenter" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/rainyun-sslcenter" ) var ( @@ -19,7 +19,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_UPLOADER_RAINYUNSSLCENTER_" + argsPrefix := "CERTIMATE_SSLMANAGER_RAINYUNSSLCENTER_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -30,9 +30,9 @@ func init() { Shell command to run this test: go test -v ./rainyun_sslcenter_test.go -args \ - --CERTIMATE_UPLOADER_RAINYUNSSLCENTER_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_UPLOADER_RAINYUNSSLCENTER_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_UPLOADER_RAINYUNSSLCENTER_APIKEY="your-api-key" + --CERTIMATE_SSLMANAGER_RAINYUNSSLCENTER_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLMANAGER_RAINYUNSSLCENTER_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLMANAGER_RAINYUNSSLCENTER_APIKEY="your-api-key" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -45,7 +45,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("APIKEY: %v", fApiKey), }, "\n")) - uploader, err := provider.NewUploader(&provider.UploaderConfig{ + sslmanager, err := provider.NewSSLManagerProvider(&provider.SSLManagerProviderConfig{ ApiKey: fApiKey, }) if err != nil { @@ -55,7 +55,7 @@ func TestDeploy(t *testing.T) { fInputCertData, _ := os.ReadFile(fInputCertPath) fInputKeyData, _ := os.ReadFile(fInputKeyPath) - res, err := uploader.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) + res, err := sslmanager.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) if err != nil { t.Errorf("err: %+v", err) return diff --git a/internal/pkg/core/uploader/providers/tencentcloud-ssl/tencentcloud_ssl.go b/internal/pkg/core/ssl-manager/providers/tencentcloud-ssl/tencentcloud_ssl.go similarity index 59% rename from internal/pkg/core/uploader/providers/tencentcloud-ssl/tencentcloud_ssl.go rename to internal/pkg/core/ssl-manager/providers/tencentcloud-ssl/tencentcloud_ssl.go index db4e92f4..1d807e18 100644 --- a/internal/pkg/core/uploader/providers/tencentcloud-ssl/tencentcloud_ssl.go +++ b/internal/pkg/core/ssl-manager/providers/tencentcloud-ssl/tencentcloud_ssl.go @@ -2,78 +2,77 @@ package tencentcloudssl import ( "context" + "errors" "fmt" "log/slog" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" tcssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" - - "github.com/usual2970/certimate/internal/pkg/core/uploader" + "github.com/usual2970/certimate/internal/pkg/core" ) -type UploaderConfig struct { +type SSLManagerProviderConfig struct { // 腾讯云 SecretId。 SecretId string `json:"secretId"` // 腾讯云 SecretKey。 SecretKey string `json:"secretKey"` } -type UploaderProvider struct { - config *UploaderConfig +type SSLManagerProvider struct { + config *SSLManagerProviderConfig logger *slog.Logger sdkClient *tcssl.Client } -var _ uploader.Uploader = (*UploaderProvider)(nil) +var _ core.SSLManager = (*SSLManagerProvider)(nil) -func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { +func NewSSLManagerProvider(config *SSLManagerProviderConfig) (*SSLManagerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl manager provider is nil") } - client, err := createSdkClient(config.SecretId, config.SecretKey) + client, err := createSDKClient(config.SecretId, config.SecretKey) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &UploaderProvider{ + return &SSLManagerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { +func (m *SSLManagerProvider) SetLogger(logger *slog.Logger) { if logger == nil { - u.logger = slog.New(slog.DiscardHandler) + m.logger = slog.New(slog.DiscardHandler) } else { - u.logger = logger + m.logger = logger } - return u } -func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*uploader.UploadResult, error) { +func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLManageUploadResult, error) { // 上传新证书 // REF: https://cloud.tencent.com/document/product/400/41665 uploadCertificateReq := tcssl.NewUploadCertificateRequest() uploadCertificateReq.CertificatePublicKey = common.StringPtr(certPEM) uploadCertificateReq.CertificatePrivateKey = common.StringPtr(privkeyPEM) uploadCertificateReq.Repeatable = common.BoolPtr(false) - uploadCertificateResp, err := u.sdkClient.UploadCertificate(uploadCertificateReq) - u.logger.Debug("sdk request 'ssl.UploadCertificate'", slog.Any("request", uploadCertificateReq), slog.Any("response", uploadCertificateResp)) + uploadCertificateResp, err := m.sdkClient.UploadCertificate(uploadCertificateReq) + m.logger.Debug("sdk request 'ssl.UploadCertificate'", slog.Any("request", uploadCertificateReq), slog.Any("response", uploadCertificateResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'ssl.UploadCertificate': %w", err) } certId := *uploadCertificateResp.Response.CertificateId - return &uploader.UploadResult{ + return &core.SSLManageUploadResult{ CertId: certId, CertName: "", }, nil } -func createSdkClient(secretId, secretKey string) (*tcssl.Client, error) { +func createSDKClient(secretId, secretKey string) (*tcssl.Client, error) { credential := common.NewCredential(secretId, secretKey) client, err := tcssl.NewClient(credential, "", profile.NewClientProfile()) if err != nil { diff --git a/internal/pkg/core/uploader/providers/ucloud-ussl/ucloud_ussl.go b/internal/pkg/core/ssl-manager/providers/ucloud-ussl/ucloud_ussl.go similarity index 75% rename from internal/pkg/core/uploader/providers/ucloud-ussl/ucloud_ussl.go rename to internal/pkg/core/ssl-manager/providers/ucloud-ussl/ucloud_ussl.go index 9fc0c313..3922216f 100644 --- a/internal/pkg/core/uploader/providers/ucloud-ussl/ucloud_ussl.go +++ b/internal/pkg/core/ssl-manager/providers/ucloud-ussl/ucloud_ussl.go @@ -15,12 +15,12 @@ import ( "github.com/ucloud/ucloud-sdk-go/ucloud" ucloudauth "github.com/ucloud/ucloud-sdk-go/ucloud/auth" - "github.com/usual2970/certimate/internal/pkg/core/uploader" + "github.com/usual2970/certimate/internal/pkg/core" usslsdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/ucloud/ussl" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" ) -type UploaderConfig struct { +type SSLManagerProviderConfig struct { // 优刻得 API 私钥。 PrivateKey string `json:"privateKey"` // 优刻得 API 公钥。 @@ -29,44 +29,42 @@ type UploaderConfig struct { ProjectId string `json:"projectId,omitempty"` } -type UploaderProvider struct { - config *UploaderConfig +type SSLManagerProvider struct { + config *SSLManagerProviderConfig logger *slog.Logger sdkClient *usslsdk.USSLClient } -var _ uploader.Uploader = (*UploaderProvider)(nil) +var _ core.SSLManager = (*SSLManagerProvider)(nil) -func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { +func NewSSLManagerProvider(config *SSLManagerProviderConfig) (*SSLManagerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl manager provider is nil") } - client, err := createSdkClient(config.PrivateKey, config.PublicKey) + client, err := createSDKClient(config.PrivateKey, config.PublicKey) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &UploaderProvider{ + return &SSLManagerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { +func (m *SSLManagerProvider) SetLogger(logger *slog.Logger) { if logger == nil { - u.logger = slog.New(slog.DiscardHandler) + m.logger = slog.New(slog.DiscardHandler) } else { - u.logger = logger + m.logger = logger } - return u } -func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*uploader.UploadResult, error) { +func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLManageUploadResult, error) { // 生成新证书名(需符合优刻得命名规则) - var certId, certName string - certName = fmt.Sprintf("certimate-%d", time.Now().UnixMilli()) + certName := fmt.Sprintf("certimate-%d", time.Now().UnixMilli()) // 生成优刻得所需的证书参数 certPEMBase64 := base64.StdEncoding.EncodeToString([]byte(certPEM)) @@ -76,24 +74,24 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE // 上传托管证书 // REF: https://docs.ucloud.cn/api/usslcertificate-api/upload_normal_certificate - uploadNormalCertificateReq := u.sdkClient.NewUploadNormalCertificateRequest() + uploadNormalCertificateReq := m.sdkClient.NewUploadNormalCertificateRequest() uploadNormalCertificateReq.CertificateName = ucloud.String(certName) uploadNormalCertificateReq.SslPublicKey = ucloud.String(certPEMBase64) uploadNormalCertificateReq.SslPrivateKey = ucloud.String(privkeyPEMBase64) uploadNormalCertificateReq.SslMD5 = ucloud.String(certMd5Hex) - if u.config.ProjectId != "" { - uploadNormalCertificateReq.ProjectId = ucloud.String(u.config.ProjectId) + if m.config.ProjectId != "" { + uploadNormalCertificateReq.ProjectId = ucloud.String(m.config.ProjectId) } - uploadNormalCertificateResp, err := u.sdkClient.UploadNormalCertificate(uploadNormalCertificateReq) - u.logger.Debug("sdk request 'ussl.UploadNormalCertificate'", slog.Any("request", uploadNormalCertificateReq), slog.Any("response", uploadNormalCertificateResp)) + uploadNormalCertificateResp, err := m.sdkClient.UploadNormalCertificate(uploadNormalCertificateReq) + m.logger.Debug("sdk request 'ussl.UploadNormalCertificate'", slog.Any("request", uploadNormalCertificateReq), slog.Any("response", uploadNormalCertificateResp)) if err != nil { if uploadNormalCertificateResp != nil && uploadNormalCertificateResp.GetRetCode() == 80035 { - if res, err := u.findCertIfExists(ctx, certPEM); err != nil { + if res, err := m.findCertIfExists(ctx, certPEM); err != nil { return nil, err } else if res == nil { return nil, errors.New("ucloud ssl: no certificate found") } else { - u.logger.Info("ssl certificate already exists") + m.logger.Info("ssl certificate already exists") return res, nil } } @@ -101,9 +99,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE return nil, fmt.Errorf("failed to execute sdk request 'ussl.UploadNormalCertificate': %w", err) } - certId = fmt.Sprintf("%d", uploadNormalCertificateResp.CertificateID) - return &uploader.UploadResult{ - CertId: certId, + return &core.SSLManageUploadResult{ + CertId: fmt.Sprintf("%d", uploadNormalCertificateResp.CertificateID), CertName: certName, ExtendedData: map[string]any{ "resourceId": uploadNormalCertificateResp.LongResourceID, @@ -111,7 +108,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE }, nil } -func (u *UploaderProvider) findCertIfExists(ctx context.Context, certPEM string) (*uploader.UploadResult, error) { +func (m *SSLManagerProvider) findCertIfExists(ctx context.Context, certPEM string) (*core.SSLManageUploadResult, error) { // 解析证书内容 certX509, err := xcert.ParseCertificateFromPEM(certPEM) if err != nil { @@ -130,17 +127,17 @@ func (u *UploaderProvider) findCertIfExists(ctx context.Context, certPEM string) default: } - getCertificateListReq := u.sdkClient.NewGetCertificateListRequest() + getCertificateListReq := m.sdkClient.NewGetCertificateListRequest() getCertificateListReq.Mode = ucloud.String("trust") getCertificateListReq.Domain = ucloud.String(certX509.Subject.CommonName) getCertificateListReq.Sort = ucloud.String("2") getCertificateListReq.Page = ucloud.Int(getCertificateListPage) getCertificateListReq.PageSize = ucloud.Int(getCertificateListLimit) - if u.config.ProjectId != "" { - getCertificateListReq.ProjectId = ucloud.String(u.config.ProjectId) + if m.config.ProjectId != "" { + getCertificateListReq.ProjectId = ucloud.String(m.config.ProjectId) } - getCertificateListResp, err := u.sdkClient.GetCertificateList(getCertificateListReq) - u.logger.Debug("sdk request 'ussl.GetCertificateList'", slog.Any("request", getCertificateListReq), slog.Any("response", getCertificateListResp)) + getCertificateListResp, err := m.sdkClient.GetCertificateList(getCertificateListReq) + m.logger.Debug("sdk request 'ussl.GetCertificateList'", slog.Any("request", getCertificateListReq), slog.Any("response", getCertificateListResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'ussl.GetCertificateList': %w", err) } @@ -162,12 +159,12 @@ func (u *UploaderProvider) findCertIfExists(ctx context.Context, certPEM string) continue } - getCertificateDetailInfoReq := u.sdkClient.NewGetCertificateDetailInfoRequest() + getCertificateDetailInfoReq := m.sdkClient.NewGetCertificateDetailInfoRequest() getCertificateDetailInfoReq.CertificateID = ucloud.Int(certInfo.CertificateID) - if u.config.ProjectId != "" { - getCertificateDetailInfoReq.ProjectId = ucloud.String(u.config.ProjectId) + if m.config.ProjectId != "" { + getCertificateDetailInfoReq.ProjectId = ucloud.String(m.config.ProjectId) } - getCertificateDetailInfoResp, err := u.sdkClient.GetCertificateDetailInfo(getCertificateDetailInfoReq) + getCertificateDetailInfoResp, err := m.sdkClient.GetCertificateDetailInfo(getCertificateDetailInfoReq) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'ussl.GetCertificateDetailInfo': %w", err) } @@ -214,7 +211,7 @@ func (u *UploaderProvider) findCertIfExists(ctx context.Context, certPEM string) continue } - return &uploader.UploadResult{ + return &core.SSLManageUploadResult{ CertId: fmt.Sprintf("%d", certInfo.CertificateID), CertName: certInfo.Name, ExtendedData: map[string]any{ @@ -234,7 +231,7 @@ func (u *UploaderProvider) findCertIfExists(ctx context.Context, certPEM string) return nil, nil } -func createSdkClient(privateKey, publicKey string) (*usslsdk.USSLClient, error) { +func createSDKClient(privateKey, publicKey string) (*usslsdk.USSLClient, error) { cfg := ucloud.NewConfig() credential := ucloudauth.NewCredential() diff --git a/internal/pkg/core/uploader/providers/ucloud-ussl/ucloud_ussl_test.go b/internal/pkg/core/ssl-manager/providers/ucloud-ussl/ucloud_ussl_test.go similarity index 66% rename from internal/pkg/core/uploader/providers/ucloud-ussl/ucloud_ussl_test.go rename to internal/pkg/core/ssl-manager/providers/ucloud-ussl/ucloud_ussl_test.go index b459e005..dd2eb6b8 100644 --- a/internal/pkg/core/uploader/providers/ucloud-ussl/ucloud_ussl_test.go +++ b/internal/pkg/core/ssl-manager/providers/ucloud-ussl/ucloud_ussl_test.go @@ -9,7 +9,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/ucloud-ussl" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/ucloud-ussl" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_UPLOADER_UCLOUDUSSL_" + argsPrefix := "CERTIMATE_SSLMANAGER_UCLOUDUSSL_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -32,10 +32,10 @@ func init() { Shell command to run this test: go test -v ./ucloud_ussl_test.go -args \ - --CERTIMATE_UPLOADER_UCLOUDUSSL_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_UPLOADER_UCLOUDUSSL_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_UPLOADER_UCLOUDUSSL_PRIVATEKEY="your-private-key" \ - --CERTIMATE_UPLOADER_UCLOUDUSSL_PUBLICKEY="your-public-key" + --CERTIMATE_SSLMANAGER_UCLOUDUSSL_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLMANAGER_UCLOUDUSSL_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLMANAGER_UCLOUDUSSL_PRIVATEKEY="your-private-key" \ + --CERTIMATE_SSLMANAGER_UCLOUDUSSL_PUBLICKEY="your-public-key" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -49,7 +49,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("PUBLICKEY: %v", fPublicKey), }, "\n")) - uploader, err := provider.NewUploader(&provider.UploaderConfig{ + sslmanager, err := provider.NewSSLManagerProvider(&provider.SSLManagerProviderConfig{ PrivateKey: fPrivateKey, PublicKey: fPublicKey, }) @@ -60,7 +60,7 @@ func TestDeploy(t *testing.T) { fInputCertData, _ := os.ReadFile(fInputCertPath) fInputKeyData, _ := os.ReadFile(fInputKeyPath) - res, err := uploader.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) + res, err := sslmanager.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) if err != nil { t.Errorf("err: %+v", err) return diff --git a/internal/pkg/core/ssl-manager/providers/upyun-ssl/upyun_ssl.go b/internal/pkg/core/ssl-manager/providers/upyun-ssl/upyun_ssl.go new file mode 100644 index 00000000..62919215 --- /dev/null +++ b/internal/pkg/core/ssl-manager/providers/upyun-ssl/upyun_ssl.go @@ -0,0 +1,72 @@ +package upyunssl + +import ( + "context" + "errors" + "fmt" + "log/slog" + + "github.com/usual2970/certimate/internal/pkg/core" + upyunsdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/upyun/console" +) + +type SSLManagerProviderConfig struct { + // 又拍云账号用户名。 + Username string `json:"username"` + // 又拍云账号密码。 + Password string `json:"password"` +} + +type SSLManagerProvider struct { + config *SSLManagerProviderConfig + logger *slog.Logger + sdkClient *upyunsdk.Client +} + +var _ core.SSLManager = (*SSLManagerProvider)(nil) + +func NewSSLManagerProvider(config *SSLManagerProviderConfig) (*SSLManagerProvider, error) { + if config == nil { + return nil, errors.New("the configuration of the ssl manager provider is nil") + } + + client, err := createSDKClient(config.Username, config.Password) + if err != nil { + return nil, fmt.Errorf("could not create sdk client: %w", err) + } + + return &SSLManagerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + }, nil +} + +func (m *SSLManagerProvider) SetLogger(logger *slog.Logger) { + if logger == nil { + m.logger = slog.New(slog.DiscardHandler) + } else { + m.logger = logger + } +} + +func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLManageUploadResult, error) { + // 上传证书 + uploadHttpsCertificateReq := &upyunsdk.UploadHttpsCertificateRequest{ + Certificate: certPEM, + PrivateKey: privkeyPEM, + } + uploadHttpsCertificateResp, err := m.sdkClient.UploadHttpsCertificate(uploadHttpsCertificateReq) + m.logger.Debug("sdk request 'console.UploadHttpsCertificate'", slog.Any("response", uploadHttpsCertificateResp)) + if err != nil { + return nil, fmt.Errorf("failed to execute sdk request 'console.UploadHttpsCertificate': %w", err) + } + + return &core.SSLManageUploadResult{ + CertId: uploadHttpsCertificateResp.Data.Result.CertificateId, + }, nil +} + +func createSDKClient(username, password string) (*upyunsdk.Client, error) { + return upyunsdk.NewClient(username, password) +} diff --git a/internal/pkg/core/uploader/providers/upyun-ssl/upyun_ssl_test.go b/internal/pkg/core/ssl-manager/providers/upyun-ssl/upyun_ssl_test.go similarity index 67% rename from internal/pkg/core/uploader/providers/upyun-ssl/upyun_ssl_test.go rename to internal/pkg/core/ssl-manager/providers/upyun-ssl/upyun_ssl_test.go index baf53d74..62cf8d21 100644 --- a/internal/pkg/core/uploader/providers/upyun-ssl/upyun_ssl_test.go +++ b/internal/pkg/core/ssl-manager/providers/upyun-ssl/upyun_ssl_test.go @@ -9,7 +9,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/upyun-ssl" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/upyun-ssl" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_UPLOADER_UPYUNSSL_" + argsPrefix := "CERTIMATE_SSLMANAGER_UPYUNSSL_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -32,10 +32,10 @@ func init() { Shell command to run this test: go test -v ./upyun_ssl_test.go -args \ - --CERTIMATE_UPLOADER_UPYUNSSL_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_UPLOADER_UPYUNSSL_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_UPLOADER_UPYUNSSL_USERNAME="your-username" \ - --CERTIMATE_UPLOADER_UPYUNSSL_PASSWORD="your-password" + --CERTIMATE_SSLMANAGER_UPYUNSSL_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLMANAGER_UPYUNSSL_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLMANAGER_UPYUNSSL_USERNAME="your-username" \ + --CERTIMATE_SSLMANAGER_UPYUNSSL_PASSWORD="your-password" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -49,7 +49,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("PASSWORD: %v", fPassword), }, "\n")) - uploader, err := provider.NewUploader(&provider.UploaderConfig{ + sslmanager, err := provider.NewSSLManagerProvider(&provider.SSLManagerProviderConfig{ Username: fUsername, Password: fPassword, }) @@ -60,7 +60,7 @@ func TestDeploy(t *testing.T) { fInputCertData, _ := os.ReadFile(fInputCertPath) fInputKeyData, _ := os.ReadFile(fInputKeyPath) - res, err := uploader.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) + res, err := sslmanager.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) if err != nil { t.Errorf("err: %+v", err) return diff --git a/internal/pkg/core/uploader/providers/volcengine-cdn/volcengine_cdn.go b/internal/pkg/core/ssl-manager/providers/volcengine-cdn/volcengine_cdn.go similarity index 71% rename from internal/pkg/core/uploader/providers/volcengine-cdn/volcengine_cdn.go rename to internal/pkg/core/ssl-manager/providers/volcengine-cdn/volcengine_cdn.go index 40ff3f36..301cda7d 100644 --- a/internal/pkg/core/uploader/providers/volcengine-cdn/volcengine_cdn.go +++ b/internal/pkg/core/ssl-manager/providers/volcengine-cdn/volcengine_cdn.go @@ -5,6 +5,7 @@ import ( "crypto/sha1" "crypto/sha256" "encoding/hex" + "errors" "fmt" "log/slog" "strings" @@ -13,51 +14,50 @@ import ( vecdn "github.com/volcengine/volc-sdk-golang/service/cdn" ve "github.com/volcengine/volcengine-go-sdk/volcengine" - "github.com/usual2970/certimate/internal/pkg/core/uploader" + "github.com/usual2970/certimate/internal/pkg/core" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" ) -type UploaderConfig struct { +type SSLManagerProviderConfig struct { // 火山引擎 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 火山引擎 AccessKeySecret。 AccessKeySecret string `json:"accessKeySecret"` } -type UploaderProvider struct { - config *UploaderConfig +type SSLManagerProvider struct { + config *SSLManagerProviderConfig logger *slog.Logger sdkClient *vecdn.CDN } -var _ uploader.Uploader = (*UploaderProvider)(nil) +var _ core.SSLManager = (*SSLManagerProvider)(nil) -func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { +func NewSSLManagerProvider(config *SSLManagerProviderConfig) (*SSLManagerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl manager provider is nil") } client := vecdn.NewInstance() client.Client.SetAccessKey(config.AccessKeyId) client.Client.SetSecretKey(config.AccessKeySecret) - return &UploaderProvider{ + return &SSLManagerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { +func (m *SSLManagerProvider) SetLogger(logger *slog.Logger) { if logger == nil { - u.logger = slog.New(slog.DiscardHandler) + m.logger = slog.New(slog.DiscardHandler) } else { - u.logger = logger + m.logger = logger } - return u } -func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*uploader.UploadResult, error) { +func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLManageUploadResult, error) { // 解析证书内容 certX509, err := xcert.ParseCertificateFromPEM(certPEM) if err != nil { @@ -81,8 +81,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE default: } - listCertInfoResp, err := u.sdkClient.ListCertInfo(listCertInfoReq) - u.logger.Debug("sdk request 'cdn.ListCertInfo'", slog.Any("request", listCertInfoReq), slog.Any("response", listCertInfoResp)) + listCertInfoResp, err := m.sdkClient.ListCertInfo(listCertInfoReq) + m.logger.Debug("sdk request 'cdn.ListCertInfo'", slog.Any("request", listCertInfoReq), slog.Any("response", listCertInfoResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'cdn.ListCertInfo': %w", err) } @@ -95,8 +95,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE strings.EqualFold(hex.EncodeToString(fingerprintSha256[:]), certDetail.CertFingerprint.Sha256) // 如果已存在相同证书,直接返回 if isSameCert { - u.logger.Info("ssl certificate already exists") - return &uploader.UploadResult{ + m.logger.Info("ssl certificate already exists") + return &core.SSLManageUploadResult{ CertId: certDetail.CertId, CertName: certDetail.Desc, }, nil @@ -114,8 +114,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE } // 生成新证书名(需符合火山引擎命名规则) - var certId, certName string - certName = fmt.Sprintf("certimate-%d", time.Now().UnixMilli()) + certName := fmt.Sprintf("certimate-%d", time.Now().UnixMilli()) // 上传新证书 // REF: https://www.volcengine.com/docs/6454/1245763 @@ -125,15 +124,14 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE Source: ve.String("volc_cert_center"), Desc: ve.String(certName), } - addCertificateResp, err := u.sdkClient.AddCertificate(addCertificateReq) - u.logger.Debug("sdk request 'cdn.AddCertificate'", slog.Any("request", addCertificateResp), slog.Any("response", addCertificateResp)) + addCertificateResp, err := m.sdkClient.AddCertificate(addCertificateReq) + m.logger.Debug("sdk request 'cdn.AddCertificate'", slog.Any("request", addCertificateResp), slog.Any("response", addCertificateResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'cdn.AddCertificate': %w", err) } - certId = addCertificateResp.Result.CertId - return &uploader.UploadResult{ - CertId: certId, + return &core.SSLManageUploadResult{ + CertId: addCertificateResp.Result.CertId, CertName: certName, }, nil } diff --git a/internal/pkg/core/uploader/providers/volcengine-certcenter/volcengine_certcenter.go b/internal/pkg/core/ssl-manager/providers/volcengine-certcenter/volcengine_certcenter.go similarity index 59% rename from internal/pkg/core/uploader/providers/volcengine-certcenter/volcengine_certcenter.go rename to internal/pkg/core/ssl-manager/providers/volcengine-certcenter/volcengine_certcenter.go index 9accc17d..d33f2edc 100644 --- a/internal/pkg/core/uploader/providers/volcengine-certcenter/volcengine_certcenter.go +++ b/internal/pkg/core/ssl-manager/providers/volcengine-certcenter/volcengine_certcenter.go @@ -9,11 +9,11 @@ import ( ve "github.com/volcengine/volcengine-go-sdk/volcengine" vesession "github.com/volcengine/volcengine-go-sdk/volcengine/session" - "github.com/usual2970/certimate/internal/pkg/core/uploader" + "github.com/usual2970/certimate/internal/pkg/core" veccsdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/volcengine/certcenter" ) -type UploaderConfig struct { +type SSLManagerProviderConfig struct { // 火山引擎 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 火山引擎 AccessKeySecret。 @@ -22,41 +22,40 @@ type UploaderConfig struct { Region string `json:"region"` } -type UploaderProvider struct { - config *UploaderConfig +type SSLManagerProvider struct { + config *SSLManagerProviderConfig logger *slog.Logger sdkClient *veccsdk.CertCenter } -var _ uploader.Uploader = (*UploaderProvider)(nil) +var _ core.SSLManager = (*SSLManagerProvider)(nil) -func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { +func NewSSLManagerProvider(config *SSLManagerProviderConfig) (*SSLManagerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl manager provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret, config.Region) + client, err := createSDKClient(config.AccessKeyId, config.AccessKeySecret, config.Region) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &UploaderProvider{ + return &SSLManagerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { +func (m *SSLManagerProvider) SetLogger(logger *slog.Logger) { if logger == nil { - u.logger = slog.New(slog.DiscardHandler) + m.logger = slog.New(slog.DiscardHandler) } else { - u.logger = logger + m.logger = logger } - return u } -func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*uploader.UploadResult, error) { +func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLManageUploadResult, error) { // 上传证书 // REF: https://www.volcengine.com/docs/6638/1365580 importCertificateReq := &veccsdk.ImportCertificateInput{ @@ -66,30 +65,30 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE }, Repeatable: ve.Bool(false), } - importCertificateResp, err := u.sdkClient.ImportCertificate(importCertificateReq) - u.logger.Debug("sdk request 'certcenter.ImportCertificate'", slog.Any("request", importCertificateReq), slog.Any("response", importCertificateResp)) + importCertificateResp, err := m.sdkClient.ImportCertificate(importCertificateReq) + m.logger.Debug("sdk request 'certcenter.ImportCertificate'", slog.Any("request", importCertificateReq), slog.Any("response", importCertificateResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'certcenter.ImportCertificate': %w", err) } - var certId string + var sslId string if importCertificateResp.InstanceId != nil && *importCertificateResp.InstanceId != "" { - certId = *importCertificateResp.InstanceId + sslId = *importCertificateResp.InstanceId } if importCertificateResp.RepeatId != nil && *importCertificateResp.RepeatId != "" { - certId = *importCertificateResp.RepeatId + sslId = *importCertificateResp.RepeatId } - if certId == "" { - return nil, errors.New("failed to get certificate id from response, both `InstanceId` and `RepeatId` are empty") + if sslId == "" { + return nil, errors.New("received empty certificate id, both `InstanceId` and `RepeatId` are empty") } - return &uploader.UploadResult{ - CertId: certId, + return &core.SSLManageUploadResult{ + CertId: sslId, }, nil } -func createSdkClient(accessKeyId, accessKeySecret, region string) (*veccsdk.CertCenter, error) { +func createSDKClient(accessKeyId, accessKeySecret, region string) (*veccsdk.CertCenter, error) { if region == "" { region = "cn-beijing" // 证书中心默认区域:北京 } diff --git a/internal/pkg/core/uploader/providers/volcengine-certcenter/volcengine_certcenter_test.go b/internal/pkg/core/ssl-manager/providers/volcengine-certcenter/volcengine_certcenter_test.go similarity index 65% rename from internal/pkg/core/uploader/providers/volcengine-certcenter/volcengine_certcenter_test.go rename to internal/pkg/core/ssl-manager/providers/volcengine-certcenter/volcengine_certcenter_test.go index 1cfa15fe..9992572a 100644 --- a/internal/pkg/core/uploader/providers/volcengine-certcenter/volcengine_certcenter_test.go +++ b/internal/pkg/core/ssl-manager/providers/volcengine-certcenter/volcengine_certcenter_test.go @@ -9,7 +9,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/volcengine-certcenter" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/volcengine-certcenter" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_UPLOADER_VOLCENGINECERTCENTER_" + argsPrefix := "CERTIMATE_SSLMANAGER_VOLCENGINECERTCENTER_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -32,10 +32,10 @@ func init() { Shell command to run this test: go test -v ./volcengine_certcenter_test.go -args \ - --CERTIMATE_UPLOADER_VOLCENGINECERTCENTER_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_UPLOADER_VOLCENGINECERTCENTER_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_UPLOADER_VOLCENGINECERTCENTER_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_UPLOADER_VOLCENGINECERTCENTER_ACCESSKEYSECRET="your-access-key-secret" + --CERTIMATE_SSLMANAGER_VOLCENGINECERTCENTER_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLMANAGER_VOLCENGINECERTCENTER_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLMANAGER_VOLCENGINECERTCENTER_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLMANAGER_VOLCENGINECERTCENTER_ACCESSKEYSECRET="your-access-key-secret" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -49,7 +49,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("ACCESSKEYSECRET: %v", fAccessKeySecret), }, "\n")) - uploader, err := provider.NewUploader(&provider.UploaderConfig{ + sslmanager, err := provider.NewSSLManagerProvider(&provider.SSLManagerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, }) @@ -60,7 +60,7 @@ func TestDeploy(t *testing.T) { fInputCertData, _ := os.ReadFile(fInputCertPath) fInputKeyData, _ := os.ReadFile(fInputKeyPath) - res, err := uploader.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) + res, err := sslmanager.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) if err != nil { t.Errorf("err: %+v", err) return diff --git a/internal/pkg/core/uploader/providers/volcengine-live/volcengine_live.go b/internal/pkg/core/ssl-manager/providers/volcengine-live/volcengine_live.go similarity index 69% rename from internal/pkg/core/uploader/providers/volcengine-live/volcengine_live.go rename to internal/pkg/core/ssl-manager/providers/volcengine-live/volcengine_live.go index 85d022d7..e3684a8d 100644 --- a/internal/pkg/core/uploader/providers/volcengine-live/volcengine_live.go +++ b/internal/pkg/core/ssl-manager/providers/volcengine-live/volcengine_live.go @@ -2,6 +2,7 @@ package volcenginelive import ( "context" + "errors" "fmt" "log/slog" "strings" @@ -10,51 +11,50 @@ import ( velive "github.com/volcengine/volc-sdk-golang/service/live/v20230101" ve "github.com/volcengine/volcengine-go-sdk/volcengine" - "github.com/usual2970/certimate/internal/pkg/core/uploader" + "github.com/usual2970/certimate/internal/pkg/core" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" ) -type UploaderConfig struct { +type SSLManagerProviderConfig struct { // 火山引擎 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 火山引擎 AccessKeySecret。 AccessKeySecret string `json:"accessKeySecret"` } -type UploaderProvider struct { - config *UploaderConfig +type SSLManagerProvider struct { + config *SSLManagerProviderConfig logger *slog.Logger sdkClient *velive.Live } -var _ uploader.Uploader = (*UploaderProvider)(nil) +var _ core.SSLManager = (*SSLManagerProvider)(nil) -func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { +func NewSSLManagerProvider(config *SSLManagerProviderConfig) (*SSLManagerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl manager provider is nil") } client := velive.NewInstance() client.SetAccessKey(config.AccessKeyId) client.SetSecretKey(config.AccessKeySecret) - return &UploaderProvider{ + return &SSLManagerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { +func (m *SSLManagerProvider) SetLogger(logger *slog.Logger) { if logger == nil { - u.logger = slog.New(slog.DiscardHandler) + m.logger = slog.New(slog.DiscardHandler) } else { - u.logger = logger + m.logger = logger } - return u } -func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*uploader.UploadResult, error) { +func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLManageUploadResult, error) { // 解析证书内容 certX509, err := xcert.ParseCertificateFromPEM(certPEM) if err != nil { @@ -64,8 +64,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE // 查询证书列表,避免重复上传 // REF: https://www.volcengine.com/docs/6469/1186278#%E6%9F%A5%E8%AF%A2%E8%AF%81%E4%B9%A6%E5%88%97%E8%A1%A8 listCertReq := &velive.ListCertV2Body{} - listCertResp, err := u.sdkClient.ListCertV2(ctx, listCertReq) - u.logger.Debug("sdk request 'live.ListCertV2'", slog.Any("request", listCertReq), slog.Any("response", listCertResp)) + listCertResp, err := m.sdkClient.ListCertV2(ctx, listCertReq) + m.logger.Debug("sdk request 'live.ListCertV2'", slog.Any("request", listCertReq), slog.Any("response", listCertResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'live.ListCertV2': %w", err) } @@ -76,8 +76,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE describeCertDetailSecretReq := &velive.DescribeCertDetailSecretV2Body{ ChainID: ve.String(certDetail.ChainID), } - describeCertDetailSecretResp, err := u.sdkClient.DescribeCertDetailSecretV2(ctx, describeCertDetailSecretReq) - u.logger.Debug("sdk request 'live.DescribeCertDetailSecretV2'", slog.Any("request", describeCertDetailSecretReq), slog.Any("response", describeCertDetailSecretResp)) + describeCertDetailSecretResp, err := m.sdkClient.DescribeCertDetailSecretV2(ctx, describeCertDetailSecretReq) + m.logger.Debug("sdk request 'live.DescribeCertDetailSecretV2'", slog.Any("request", describeCertDetailSecretReq), slog.Any("response", describeCertDetailSecretResp)) if err != nil { continue } @@ -97,8 +97,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE // 如果已存在相同证书,直接返回 if isSameCert { - u.logger.Info("ssl certificate already exists") - return &uploader.UploadResult{ + m.logger.Info("ssl certificate already exists") + return &core.SSLManageUploadResult{ CertId: certDetail.ChainID, CertName: certDetail.CertName, }, nil @@ -107,8 +107,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE } // 生成新证书名(需符合火山引擎命名规则) - var certId, certName string - certName = fmt.Sprintf("certimate-%d", time.Now().UnixMilli()) + certName := fmt.Sprintf("certimate-%d", time.Now().UnixMilli()) // 上传新证书 // REF: https://www.volcengine.com/docs/6469/1186278#%E6%B7%BB%E5%8A%A0%E8%AF%81%E4%B9%A6 @@ -121,15 +120,14 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE Pubkey: certPEM, }, } - createCertResp, err := u.sdkClient.CreateCert(ctx, createCertReq) - u.logger.Debug("sdk request 'live.CreateCert'", slog.Any("request", createCertReq), slog.Any("response", createCertResp)) + createCertResp, err := m.sdkClient.CreateCert(ctx, createCertReq) + m.logger.Debug("sdk request 'live.CreateCert'", slog.Any("request", createCertReq), slog.Any("response", createCertResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'live.CreateCert': %w", err) } - certId = *createCertResp.Result.ChainID - return &uploader.UploadResult{ - CertId: certId, + return &core.SSLManageUploadResult{ + CertId: *createCertResp.Result.ChainID, CertName: certName, }, nil } diff --git a/internal/pkg/core/uploader/providers/wangsu-certificate/wangsu_certificate.go b/internal/pkg/core/ssl-manager/providers/wangsu-certificate/wangsu_certificate.go similarity index 69% rename from internal/pkg/core/uploader/providers/wangsu-certificate/wangsu_certificate.go rename to internal/pkg/core/ssl-manager/providers/wangsu-certificate/wangsu_certificate.go index 3f2c6824..a37196d1 100644 --- a/internal/pkg/core/uploader/providers/wangsu-certificate/wangsu_certificate.go +++ b/internal/pkg/core/ssl-manager/providers/wangsu-certificate/wangsu_certificate.go @@ -2,60 +2,60 @@ package wangsucertificate import ( "context" + "errors" "fmt" "log/slog" "regexp" "strings" "time" - "github.com/usual2970/certimate/internal/pkg/core/uploader" + "github.com/usual2970/certimate/internal/pkg/core" wangsusdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/wangsu/certificate" xcert "github.com/usual2970/certimate/internal/pkg/utils/cert" xtypes "github.com/usual2970/certimate/internal/pkg/utils/types" ) -type UploaderConfig struct { +type SSLManagerProviderConfig struct { // 网宿云 AccessKeyId。 AccessKeyId string `json:"accessKeyId"` // 网宿云 AccessKeySecret。 AccessKeySecret string `json:"accessKeySecret"` } -type UploaderProvider struct { - config *UploaderConfig +type SSLManagerProvider struct { + config *SSLManagerProviderConfig logger *slog.Logger sdkClient *wangsusdk.Client } -var _ uploader.Uploader = (*UploaderProvider)(nil) +var _ core.SSLManager = (*SSLManagerProvider)(nil) -func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { +func NewSSLManagerProvider(config *SSLManagerProviderConfig) (*SSLManagerProvider, error) { if config == nil { - panic("config is nil") + return nil, errors.New("the configuration of the ssl manager provider is nil") } - client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret) + client, err := createSDKClient(config.AccessKeyId, config.AccessKeySecret) if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) + return nil, fmt.Errorf("could not create sdk client: %w", err) } - return &UploaderProvider{ + return &SSLManagerProvider{ config: config, logger: slog.Default(), sdkClient: client, }, nil } -func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { +func (m *SSLManagerProvider) SetLogger(logger *slog.Logger) { if logger == nil { - u.logger = slog.New(slog.DiscardHandler) + m.logger = slog.New(slog.DiscardHandler) } else { - u.logger = logger + m.logger = logger } - return u } -func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*uploader.UploadResult, error) { +func (m *SSLManagerProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*core.SSLManageUploadResult, error) { // 解析证书内容 certX509, err := xcert.ParseCertificateFromPEM(certPEM) if err != nil { @@ -64,8 +64,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE // 查询证书列表,避免重复上传 // REF: https://www.wangsu.com/document/api-doc/22675?productCode=certificatemanagement - listCertificatesResp, err := u.sdkClient.ListCertificates() - u.logger.Debug("sdk request 'certificatemanagement.ListCertificates'", slog.Any("response", listCertificatesResp)) + listCertificatesResp, err := m.sdkClient.ListCertificates() + m.logger.Debug("sdk request 'certificatemanagement.ListCertificates'", slog.Any("response", listCertificatesResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'certificatemanagement.ListCertificates': %w", err) } @@ -86,8 +86,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE } // 如果以上信息都一致,则视为已存在相同证书,直接返回 - u.logger.Info("ssl certificate already exists") - return &uploader.UploadResult{ + m.logger.Info("ssl certificate already exists") + return &core.SSLManageUploadResult{ CertId: certificate.CertificateId, CertName: certificate.Name, }, nil @@ -95,7 +95,6 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE } // 生成新证书名(需符合网宿云命名规则) - var certId string certName := fmt.Sprintf("certimate_%d", time.Now().UnixMilli()) // 新增证书 @@ -106,8 +105,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE PrivateKey: xtypes.ToPtr(privkeyPEM), Comment: xtypes.ToPtr("upload from certimate"), } - createCertificateResp, err := u.sdkClient.CreateCertificate(createCertificateReq) - u.logger.Debug("sdk request 'certificatemanagement.CreateCertificate'", slog.Any("request", createCertificateReq), slog.Any("response", createCertificateResp)) + createCertificateResp, err := m.sdkClient.CreateCertificate(createCertificateReq) + m.logger.Debug("sdk request 'certificatemanagement.CreateCertificate'", slog.Any("request", createCertificateReq), slog.Any("response", createCertificateResp)) if err != nil { return nil, fmt.Errorf("failed to execute sdk request 'certificatemanagement.CreateCertificate': %w", err) } @@ -116,18 +115,16 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPE // 格式: // https://open.chinanetcenter.com/api/certificate/100001 wangsuCertIdMatches := regexp.MustCompile(`/certificate/([0-9]+)`).FindStringSubmatch(createCertificateResp.CertificateLocation) - if len(wangsuCertIdMatches) > 1 { - certId = wangsuCertIdMatches[1] - } else { + if len(wangsuCertIdMatches) == 0 { return nil, fmt.Errorf("received empty certificate id") } - return &uploader.UploadResult{ - CertId: certId, + return &core.SSLManageUploadResult{ + CertId: wangsuCertIdMatches[1], CertName: certName, }, nil } -func createSdkClient(accessKeyId, accessKeySecret string) (*wangsusdk.Client, error) { +func createSDKClient(accessKeyId, accessKeySecret string) (*wangsusdk.Client, error) { return wangsusdk.NewClient(accessKeyId, accessKeySecret) } diff --git a/internal/pkg/core/uploader/providers/wangsu-certificate/wangsu_certificate_test.go b/internal/pkg/core/ssl-manager/providers/wangsu-certificate/wangsu_certificate_test.go similarity index 65% rename from internal/pkg/core/uploader/providers/wangsu-certificate/wangsu_certificate_test.go rename to internal/pkg/core/ssl-manager/providers/wangsu-certificate/wangsu_certificate_test.go index 7bbf63c6..8e93c5fe 100644 --- a/internal/pkg/core/uploader/providers/wangsu-certificate/wangsu_certificate_test.go +++ b/internal/pkg/core/ssl-manager/providers/wangsu-certificate/wangsu_certificate_test.go @@ -9,7 +9,7 @@ import ( "strings" "testing" - provider "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/wangsu-certificate" + provider "github.com/usual2970/certimate/internal/pkg/core/ssl-manager/providers/wangsu-certificate" ) var ( @@ -20,7 +20,7 @@ var ( ) func init() { - argsPrefix := "CERTIMATE_UPLOADER_WANGSUCERTIFICATE_" + argsPrefix := "CERTIMATE_SSLMANAGER_WANGSUCERTIFICATE_" flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") @@ -32,10 +32,10 @@ func init() { Shell command to run this test: go test -v ./wangsu_certificate_test.go -args \ - --CERTIMATE_UPLOADER_WANGSUCERTIFICATE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ - --CERTIMATE_UPLOADER_WANGSUCERTIFICATE_INPUTKEYPATH="/path/to/your-input-key.pem" \ - --CERTIMATE_UPLOADER_WANGSUCERTIFICATE_ACCESSKEYID="your-access-key-id" \ - --CERTIMATE_UPLOADER_WANGSUCERTIFICATE_ACCESSKEYSECRET="your-access-key-secret" + --CERTIMATE_SSLMANAGER_WANGSUCERTIFICATE_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_SSLMANAGER_WANGSUCERTIFICATE_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_SSLMANAGER_WANGSUCERTIFICATE_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_SSLMANAGER_WANGSUCERTIFICATE_ACCESSKEYSECRET="your-access-key-secret" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -49,7 +49,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("ACCESSKEYSECRET: %v", fAccessKeySecret), }, "\n")) - uploader, err := provider.NewUploader(&provider.UploaderConfig{ + sslmanager, err := provider.NewSSLManagerProvider(&provider.SSLManagerProviderConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, }) @@ -60,7 +60,7 @@ func TestDeploy(t *testing.T) { fInputCertData, _ := os.ReadFile(fInputCertPath) fInputKeyData, _ := os.ReadFile(fInputKeyPath) - res, err := uploader.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) + res, err := sslmanager.Upload(context.Background(), string(fInputCertData), string(fInputKeyData)) if err != nil { t.Errorf("err: %+v", err) return diff --git a/internal/pkg/core/ssl_applicator.go b/internal/pkg/core/ssl_applicator.go new file mode 100644 index 00000000..082167a4 --- /dev/null +++ b/internal/pkg/core/ssl_applicator.go @@ -0,0 +1,7 @@ +package core + +import ( + "github.com/go-acme/lego/v4/challenge" +) + +type ACMEChallenger = challenge.Provider diff --git a/internal/pkg/core/ssl_manager.go b/internal/pkg/core/ssl_manager.go index 837b62c7..149818c1 100644 --- a/internal/pkg/core/ssl_manager.go +++ b/internal/pkg/core/ssl_manager.go @@ -19,12 +19,12 @@ type SSLManager interface { // 出参: // - res:上传结果。 // - err: 错误。 - Upload(ctx context.Context, certPEM string, privkeyPEM string) (_res *SSLUploadResult, _err error) + Upload(ctx context.Context, certPEM string, privkeyPEM string) (_res *SSLManageUploadResult, _err error) } -// 表示证书上传结果的数据结构,包含上传后的证书 ID、名称和其他数据。 -type SSLUploadResult struct { - CertId string `json:"certId"` +// 表示 SSL 证书管理上传结果的数据结构,包含上传后的证书 ID、名称和其他数据。 +type SSLManageUploadResult struct { + CertId string `json:"certId,omitempty"` CertName string `json:"certName,omitempty"` ExtendedData map[string]any `json:"extendedData,omitempty"` } diff --git a/internal/pkg/core/uploader/providers/dogecloud/dogecloud.go b/internal/pkg/core/uploader/providers/dogecloud/dogecloud.go deleted file mode 100644 index 4670e354..00000000 --- a/internal/pkg/core/uploader/providers/dogecloud/dogecloud.go +++ /dev/null @@ -1,81 +0,0 @@ -package dogecloud - -import ( - "context" - "fmt" - "log/slog" - "time" - - "github.com/usual2970/certimate/internal/pkg/core/uploader" - dogesdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/dogecloud" -) - -type UploaderConfig struct { - // 多吉云 AccessKey。 - AccessKey string `json:"accessKey"` - // 多吉云 SecretKey。 - SecretKey string `json:"secretKey"` -} - -type UploaderProvider struct { - config *UploaderConfig - logger *slog.Logger - sdkClient *dogesdk.Client -} - -var _ uploader.Uploader = (*UploaderProvider)(nil) - -func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { - if config == nil { - panic("config is nil") - } - - client, err := createSdkClient(config.AccessKey, config.SecretKey) - if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) - } - - return &UploaderProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - }, nil -} - -func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { - if logger == nil { - u.logger = slog.New(slog.DiscardHandler) - } else { - u.logger = logger - } - return u -} - -func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*uploader.UploadResult, error) { - // 生成新证书名(需符合多吉云命名规则) - var certId, certName string - certName = fmt.Sprintf("certimate-%d", time.Now().UnixMilli()) - - // 上传新证书 - // REF: https://docs.dogecloud.com/cdn/api-cert-upload - uploadSslCertReq := &dogesdk.UploadCdnCertRequest{ - Note: certName, - Certificate: certPEM, - PrivateKey: privkeyPEM, - } - uploadSslCertResp, err := u.sdkClient.UploadCdnCert(uploadSslCertReq) - u.logger.Debug("sdk request 'cdn.UploadCdnCert'", slog.Any("request", uploadSslCertReq), slog.Any("response", uploadSslCertResp)) - if err != nil { - return nil, fmt.Errorf("failed to execute sdk request 'cdn.UploadCdnCert': %w", err) - } - - certId = fmt.Sprintf("%d", uploadSslCertResp.Data.Id) - return &uploader.UploadResult{ - CertId: certId, - CertName: certName, - }, nil -} - -func createSdkClient(accessKey, secretKey string) (*dogesdk.Client, error) { - return dogesdk.NewClient(accessKey, secretKey) -} diff --git a/internal/pkg/core/uploader/providers/upyun-ssl/upyun_ssl.go b/internal/pkg/core/uploader/providers/upyun-ssl/upyun_ssl.go deleted file mode 100644 index 57e8e506..00000000 --- a/internal/pkg/core/uploader/providers/upyun-ssl/upyun_ssl.go +++ /dev/null @@ -1,72 +0,0 @@ -package upyunssl - -import ( - "context" - "fmt" - "log/slog" - - "github.com/usual2970/certimate/internal/pkg/core/uploader" - upyunsdk "github.com/usual2970/certimate/internal/pkg/sdk3rd/upyun/console" -) - -type UploaderConfig struct { - // 又拍云账号用户名。 - Username string `json:"username"` - // 又拍云账号密码。 - Password string `json:"password"` -} - -type UploaderProvider struct { - config *UploaderConfig - logger *slog.Logger - sdkClient *upyunsdk.Client -} - -var _ uploader.Uploader = (*UploaderProvider)(nil) - -func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { - if config == nil { - panic("config is nil") - } - - client, err := createSdkClient(config.Username, config.Password) - if err != nil { - return nil, fmt.Errorf("failed to create sdk client: %w", err) - } - - return &UploaderProvider{ - config: config, - logger: slog.Default(), - sdkClient: client, - }, nil -} - -func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { - if logger == nil { - u.logger = slog.New(slog.DiscardHandler) - } else { - u.logger = logger - } - return u -} - -func (u *UploaderProvider) Upload(ctx context.Context, certPEM string, privkeyPEM string) (*uploader.UploadResult, error) { - // 上传证书 - uploadHttpsCertificateReq := &upyunsdk.UploadHttpsCertificateRequest{ - Certificate: certPEM, - PrivateKey: privkeyPEM, - } - uploadHttpsCertificateResp, err := u.sdkClient.UploadHttpsCertificate(uploadHttpsCertificateReq) - u.logger.Debug("sdk request 'console.UploadHttpsCertificate'", slog.Any("response", uploadHttpsCertificateResp)) - if err != nil { - return nil, fmt.Errorf("failed to execute sdk request 'console.UploadHttpsCertificate': %w", err) - } - - return &uploader.UploadResult{ - CertId: uploadHttpsCertificateResp.Data.Result.CertificateId, - }, nil -} - -func createSdkClient(username, password string) (*upyunsdk.Client, error) { - return upyunsdk.NewClient(username, password) -} diff --git a/internal/pkg/core/uploader/uploader.go b/internal/pkg/core/uploader/uploader.go deleted file mode 100644 index 0a1681a7..00000000 --- a/internal/pkg/core/uploader/uploader.go +++ /dev/null @@ -1,32 +0,0 @@ -package uploader - -import ( - "context" - "log/slog" -) - -// 表示定义证书上传器的抽象类型接口。 -// 云服务商通常会提供 SSL 证书管理服务,可供用户集中管理证书。 -// 注意与 `Deployer` 区分,“上传”通常为“部署”的前置操作。 -type Uploader interface { - WithLogger(logger *slog.Logger) Uploader - - // 上传证书。 - // - // 入参: - // - ctx:上下文。 - // - certPEM:证书 PEM 内容。 - // - privkeyPEM:私钥 PEM 内容。 - // - // 出参: - // - res:上传结果。 - // - err: 错误。 - Upload(ctx context.Context, certPEM string, privkeyPEM string) (_res *UploadResult, _err error) -} - -// 表示证书上传结果的数据结构,包含上传后的证书 ID、名称和其他数据。 -type UploadResult struct { - CertId string `json:"certId"` - CertName string `json:"certName,omitzero"` - ExtendedData map[string]any `json:"extendedData,omitempty"` -} diff --git a/internal/workflow/node-processor/deploy_node.go b/internal/workflow/node-processor/deploy_node.go index 30a7c4e7..cd8455e5 100644 --- a/internal/workflow/node-processor/deploy_node.go +++ b/internal/workflow/node-processor/deploy_node.go @@ -7,10 +7,11 @@ import ( "strconv" "strings" + "golang.org/x/exp/maps" + "github.com/usual2970/certimate/internal/deployer" "github.com/usual2970/certimate/internal/domain" "github.com/usual2970/certimate/internal/repository" - "golang.org/x/exp/maps" ) type deployNode struct {