From 030249c40d3f811c31acd4e0dfacea11202beb78 Mon Sep 17 00:00:00 2001 From: socketcat Date: Wed, 20 Mar 2024 16:26:45 +0800 Subject: [PATCH] Add Tencent Cloud DNS01 Challenge provider --- common/tls/acme.go | 6 ++++++ constant/dns.go | 1 + docs/configuration/shared/dns01_challenge.md | 10 ++++++++++ docs/configuration/shared/dns01_challenge.zh.md | 10 ++++++++++ go.mod | 2 ++ go.sum | 4 ++++ option/tls_acme.go | 10 ++++++++++ 7 files changed, 43 insertions(+) diff --git a/common/tls/acme.go b/common/tls/acme.go index 08b24ed2..d597745a 100644 --- a/common/tls/acme.go +++ b/common/tls/acme.go @@ -16,6 +16,7 @@ import ( "github.com/caddyserver/certmagic" "github.com/libdns/alidns" "github.com/libdns/cloudflare" + "github.com/libdns/tencentcloud" "github.com/mholt/acmez/acme" "go.uber.org/zap" "go.uber.org/zap/zapcore" @@ -90,6 +91,11 @@ func startACME(ctx context.Context, options option.InboundACMEOptions) (*tls.Con solver.DNSProvider = &cloudflare.Provider{ APIToken: dnsOptions.CloudflareOptions.APIToken, } + case C.DNSProviderTencentCloud: + solver.DNSProvider = &tencentcloud.Provider{ + SecretId: dnsOptions.TencentCloudOptions.SecretId, + SecretKey: dnsOptions.TencentCloudOptions.SecretKey, + } default: return nil, nil, E.New("unsupported ACME DNS01 provider type: " + dnsOptions.Provider) } diff --git a/constant/dns.go b/constant/dns.go index 3907b8c1..92ec6545 100644 --- a/constant/dns.go +++ b/constant/dns.go @@ -3,4 +3,5 @@ package constant const ( DNSProviderAliDNS = "alidns" DNSProviderCloudflare = "cloudflare" + DNSProviderTencentCloud = "tencentcloud" ) diff --git a/docs/configuration/shared/dns01_challenge.md b/docs/configuration/shared/dns01_challenge.md index f9949e16..3cf583e6 100644 --- a/docs/configuration/shared/dns01_challenge.md +++ b/docs/configuration/shared/dns01_challenge.md @@ -28,4 +28,14 @@ "provider": "cloudflare", "api_token": "" } +``` + +#### Tencent Cloud + +```json +{ + "provider": "tencentcloud", + "secret_id": "", + "secert_key": "" +} ``` \ No newline at end of file diff --git a/docs/configuration/shared/dns01_challenge.zh.md b/docs/configuration/shared/dns01_challenge.zh.md index c942fef0..45b07281 100644 --- a/docs/configuration/shared/dns01_challenge.zh.md +++ b/docs/configuration/shared/dns01_challenge.zh.md @@ -28,4 +28,14 @@ "provider": "cloudflare", "api_token": "" } +``` + +#### Tencent Cloud + +```json +{ + "provider": "tencentcloud", + "secret_id": "", + "secert_key": "" +} ``` \ No newline at end of file diff --git a/go.mod b/go.mod index e8824414..c85ca034 100644 --- a/go.mod +++ b/go.mod @@ -15,6 +15,7 @@ require ( github.com/insomniacslk/dhcp v0.0.0-20231206064809-8c70d406f6d2 github.com/libdns/alidns v1.0.3 github.com/libdns/cloudflare v0.1.0 + github.com/libdns/tencentcloud v1.0.0 github.com/logrusorgru/aurora v2.0.3+incompatible github.com/mholt/acmez v1.2.0 github.com/miekg/dns v1.1.58 @@ -81,6 +82,7 @@ require ( github.com/quic-go/qtls-go1-20 v0.4.1 // indirect github.com/sagernet/netlink v0.0.0-20220905062125-8043b4a9aa97 // indirect github.com/spf13/pflag v1.0.5 // indirect + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.597 // indirect github.com/u-root/uio v0.0.0-20230220225925-ffce2a382923 // indirect github.com/vishvananda/netns v0.0.0-20211101163701-50045581ed74 // indirect github.com/zeebo/blake3 v0.2.3 // indirect diff --git a/go.sum b/go.sum index d8c1b287..a7070b24 100644 --- a/go.sum +++ b/go.sum @@ -70,6 +70,8 @@ github.com/libdns/cloudflare v0.1.0/go.mod h1:a44IP6J1YH6nvcNl1PverfJviADgXUnsoz github.com/libdns/libdns v0.2.0/go.mod h1:yQCXzk1lEZmmCPa857bnk4TsOiqYasqpyOEeSObbb40= github.com/libdns/libdns v0.2.1 h1:Wu59T7wSHRgtA0cfxC+n1c/e+O3upJGWytknkmFEDis= github.com/libdns/libdns v0.2.1/go.mod h1:yQCXzk1lEZmmCPa857bnk4TsOiqYasqpyOEeSObbb40= +github.com/libdns/tencentcloud v1.0.0 h1:u4LXnYu/lu/9P5W+MCVPeSDnwI+6w+DxYhQ1wSnQOuU= +github.com/libdns/tencentcloud v1.0.0/go.mod h1:NlCgPumzUsZWSOo1+Q/Hfh8G6TNRAaTUeWQdg6LbtUI= github.com/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczGlG91VSDkswnjF5A8= github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/mholt/acmez v1.2.0 h1:1hhLxSgY5FvH5HCnGUuwbKY2VQVo8IU7rxXKSnZ7F30= @@ -147,6 +149,8 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.597 h1:C0GHdLTfikLVoEzfhgPfrZ7LwlG0xiCmk6iwNKE+xs0= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.597/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y= github.com/u-root/uio v0.0.0-20230220225925-ffce2a382923 h1:tHNk7XK9GkmKUR6Gh8gVBKXc2MVSZ4G/NnWLtzw4gNA= github.com/u-root/uio v0.0.0-20230220225925-ffce2a382923/go.mod h1:eLL9Nub3yfAho7qB0MzZizFhTU2QkLeoVsWdHtDW264= github.com/vishvananda/netns v0.0.0-20211101163701-50045581ed74 h1:gga7acRE695APm9hlsSMoOoE65U4/TcqNj90mc69Rlg= diff --git a/option/tls_acme.go b/option/tls_acme.go index 17d515e2..9d8dbf58 100644 --- a/option/tls_acme.go +++ b/option/tls_acme.go @@ -29,6 +29,7 @@ type _ACMEDNS01ChallengeOptions struct { Provider string `json:"provider,omitempty"` AliDNSOptions ACMEDNS01AliDNSOptions `json:"-"` CloudflareOptions ACMEDNS01CloudflareOptions `json:"-"` + TencentCloudOptions ACMEDNS01TencentCloudOptions `json:"-"` } type ACMEDNS01ChallengeOptions _ACMEDNS01ChallengeOptions @@ -40,6 +41,8 @@ func (o ACMEDNS01ChallengeOptions) MarshalJSON() ([]byte, error) { v = o.AliDNSOptions case C.DNSProviderCloudflare: v = o.CloudflareOptions + case C.DNSProviderTencentCloud: + v = o.TencentCloudOptions case "": return nil, E.New("missing provider type") default: @@ -59,6 +62,8 @@ func (o *ACMEDNS01ChallengeOptions) UnmarshalJSON(bytes []byte) error { v = &o.AliDNSOptions case C.DNSProviderCloudflare: v = &o.CloudflareOptions + case C.DNSProviderTencentCloud: + v = &o.TencentCloudOptions default: return E.New("unknown provider type: " + o.Provider) } @@ -78,3 +83,8 @@ type ACMEDNS01AliDNSOptions struct { type ACMEDNS01CloudflareOptions struct { APIToken string `json:"api_token,omitempty"` } + +type ACMEDNS01TencentCloudOptions struct { + SecretId string `json:"secert_id,omitempty"` + SecretKey string `json:"secert_key,omitempty"` +}