diff --git a/agent/go.mod b/agent/go.mod index c54adb7ba..420568115 100644 --- a/agent/go.mod +++ b/agent/go.mod @@ -64,6 +64,7 @@ require ( github.com/alex-ant/gomath v0.0.0-20160516115720-89013a210a82 // indirect github.com/aliyun/alibaba-cloud-sdk-go v1.63.100 // indirect github.com/andybalholm/brotli v1.0.4 // indirect + github.com/baidubce/bce-sdk-go v0.9.223 // indirect github.com/bodgit/plumbing v1.2.0 // indirect github.com/bodgit/sevenzip v1.3.0 // indirect github.com/bodgit/windows v1.0.0 // indirect diff --git a/agent/go.sum b/agent/go.sum index 9122d6b94..dd550e663 100644 --- a/agent/go.sum +++ b/agent/go.sum @@ -90,6 +90,8 @@ github.com/aws/aws-sdk-go v1.55.0/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQ github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o= github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= +github.com/baidubce/bce-sdk-go v0.9.223 h1:vvDeIemf7ePPP59nLHCntQ/vS++ok2HKbRPgmz1VZKU= +github.com/baidubce/bce-sdk-go v0.9.223/go.mod h1:zbYJMQwE4IZuyrJiFO8tO8NbtYiKTFTbwh4eIsqjVdg= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= diff --git a/agent/utils/ssl/dns_provider.go b/agent/utils/ssl/dns_provider.go index e852b74a4..65e1f1dee 100644 --- a/agent/utils/ssl/dns_provider.go +++ b/agent/utils/ssl/dns_provider.go @@ -4,10 +4,12 @@ import ( "encoding/json" "github.com/go-acme/lego/v4/challenge" "github.com/go-acme/lego/v4/providers/dns/alidns" + "github.com/go-acme/lego/v4/providers/dns/baiducloud" "github.com/go-acme/lego/v4/providers/dns/clouddns" "github.com/go-acme/lego/v4/providers/dns/cloudflare" "github.com/go-acme/lego/v4/providers/dns/cloudns" "github.com/go-acme/lego/v4/providers/dns/dnspod" + "github.com/go-acme/lego/v4/providers/dns/dynu" "github.com/go-acme/lego/v4/providers/dns/freemyip" "github.com/go-acme/lego/v4/providers/dns/godaddy" "github.com/go-acme/lego/v4/providers/dns/huaweicloud" @@ -45,6 +47,8 @@ const ( WestCN DnsType = "WestCN" ClouDNS DnsType = "ClouDNS" RegRu DnsType = "RegRu" + Dynu DnsType = "Dynu" + BaiduCloud DnsType = "BaiduCloud" ) type DNSParam struct { @@ -85,146 +89,163 @@ func getDNSProviderConfig(dnsType DnsType, params string) (challenge.Provider, e } switch dnsType { case DnsPod: - dnsPodConfig := dnspod.NewDefaultConfig() - dnsPodConfig.LoginToken = param.ID + "," + param.Token - dnsPodConfig.PropagationTimeout = propagationTimeout - dnsPodConfig.PollingInterval = pollingInterval - dnsPodConfig.TTL = ttl - p, err = dnspod.NewDNSProviderConfig(dnsPodConfig) + config := dnspod.NewDefaultConfig() + config.LoginToken = param.ID + "," + param.Token + config.PropagationTimeout = propagationTimeout + config.PollingInterval = pollingInterval + config.TTL = ttl + p, err = dnspod.NewDNSProviderConfig(config) case AliYun: - alidnsConfig := alidns.NewDefaultConfig() - alidnsConfig.SecretKey = param.SecretKey - alidnsConfig.APIKey = param.AccessKey - alidnsConfig.PropagationTimeout = propagationTimeout - alidnsConfig.PollingInterval = pollingInterval - alidnsConfig.TTL = ttl - p, err = alidns.NewDNSProviderConfig(alidnsConfig) + config := alidns.NewDefaultConfig() + config.SecretKey = param.SecretKey + config.APIKey = param.AccessKey + config.PropagationTimeout = propagationTimeout + config.PollingInterval = pollingInterval + config.TTL = ttl + p, err = alidns.NewDNSProviderConfig(config) case CloudFlare: - cloudflareConfig := cloudflare.NewDefaultConfig() - cloudflareConfig.AuthEmail = param.Email - cloudflareConfig.AuthToken = param.APIkey - cloudflareConfig.PropagationTimeout = propagationTimeout - cloudflareConfig.PollingInterval = pollingInterval - cloudflareConfig.TTL = ttl - p, err = cloudflare.NewDNSProviderConfig(cloudflareConfig) + config := cloudflare.NewDefaultConfig() + config.AuthEmail = param.Email + config.AuthToken = param.APIkey + config.PropagationTimeout = propagationTimeout + config.PollingInterval = pollingInterval + config.TTL = ttl + p, err = cloudflare.NewDNSProviderConfig(config) case CloudDns: - clouddnsConfig := clouddns.NewDefaultConfig() - clouddnsConfig.ClientID = param.ClientID - clouddnsConfig.Email = param.Email - clouddnsConfig.Password = param.Password - clouddnsConfig.PropagationTimeout = propagationTimeout - clouddnsConfig.PollingInterval = pollingInterval - clouddnsConfig.TTL = ttl - p, err = clouddns.NewDNSProviderConfig(clouddnsConfig) + config := clouddns.NewDefaultConfig() + config.ClientID = param.ClientID + config.Email = param.Email + config.Password = param.Password + config.PropagationTimeout = propagationTimeout + config.PollingInterval = pollingInterval + config.TTL = ttl + p, err = clouddns.NewDNSProviderConfig(config) case NameCheap: - namecheapConfig := namecheap.NewDefaultConfig() - namecheapConfig.APIKey = param.APIkey - namecheapConfig.APIUser = param.APIUser - namecheapConfig.PropagationTimeout = propagationTimeout - namecheapConfig.PollingInterval = pollingInterval - namecheapConfig.TTL = ttl - p, err = namecheap.NewDNSProviderConfig(namecheapConfig) + config := namecheap.NewDefaultConfig() + config.APIKey = param.APIkey + config.APIUser = param.APIUser + config.PropagationTimeout = propagationTimeout + config.PollingInterval = pollingInterval + config.TTL = ttl + p, err = namecheap.NewDNSProviderConfig(config) case NameSilo: - nameSiloConfig := namesilo.NewDefaultConfig() - nameSiloConfig.APIKey = param.APIkey - nameSiloConfig.PropagationTimeout = propagationTimeout - nameSiloConfig.PollingInterval = pollingInterval - nameSiloConfig.TTL = ttl - p, err = namesilo.NewDNSProviderConfig(nameSiloConfig) + config := namesilo.NewDefaultConfig() + config.APIKey = param.APIkey + config.PropagationTimeout = propagationTimeout + config.PollingInterval = pollingInterval + config.TTL = ttl + p, err = namesilo.NewDNSProviderConfig(config) case Godaddy: - godaddyConfig := godaddy.NewDefaultConfig() - godaddyConfig.APIKey = param.APIkey - godaddyConfig.APISecret = param.APISecret - godaddyConfig.PropagationTimeout = propagationTimeout - godaddyConfig.PollingInterval = pollingInterval - godaddyConfig.TTL = ttl - p, err = godaddy.NewDNSProviderConfig(godaddyConfig) + config := godaddy.NewDefaultConfig() + config.APIKey = param.APIkey + config.APISecret = param.APISecret + config.PropagationTimeout = propagationTimeout + config.PollingInterval = pollingInterval + config.TTL = ttl + p, err = godaddy.NewDNSProviderConfig(config) case NameCom: - nameComConfig := namedotcom.NewDefaultConfig() - nameComConfig.APIToken = param.Token - nameComConfig.Username = param.APIUser - nameComConfig.PropagationTimeout = propagationTimeout - nameComConfig.PollingInterval = pollingInterval - nameComConfig.TTL = ttl - p, err = namedotcom.NewDNSProviderConfig(nameComConfig) + config := namedotcom.NewDefaultConfig() + config.APIToken = param.Token + config.Username = param.APIUser + config.PropagationTimeout = propagationTimeout + config.PollingInterval = pollingInterval + config.TTL = ttl + p, err = namedotcom.NewDNSProviderConfig(config) case TencentCloud: - tencentCloudConfig := tencentcloud.NewDefaultConfig() - tencentCloudConfig.SecretID = param.SecretID - tencentCloudConfig.SecretKey = param.SecretKey - tencentCloudConfig.PropagationTimeout = propagationTimeout - tencentCloudConfig.PollingInterval = pollingInterval - tencentCloudConfig.TTL = ttl - p, err = tencentcloud.NewDNSProviderConfig(tencentCloudConfig) + config := tencentcloud.NewDefaultConfig() + config.SecretID = param.SecretID + config.SecretKey = param.SecretKey + config.PropagationTimeout = propagationTimeout + config.PollingInterval = pollingInterval + config.TTL = ttl + p, err = tencentcloud.NewDNSProviderConfig(config) case RainYun: - rainyunConfig := rainyun.NewDefaultConfig() - rainyunConfig.APIKey = param.APIkey - rainyunConfig.PropagationTimeout = propagationTimeout - rainyunConfig.PollingInterval = pollingInterval - rainyunConfig.TTL = ttl - p, err = rainyun.NewDNSProviderConfig(rainyunConfig) + config := rainyun.NewDefaultConfig() + config.APIKey = param.APIkey + config.PropagationTimeout = propagationTimeout + config.PollingInterval = pollingInterval + config.TTL = ttl + p, err = rainyun.NewDNSProviderConfig(config) case Volcengine: - volcConfig := volcengine.NewDefaultConfig() - volcConfig.SecretKey = param.SecretKey - volcConfig.AccessKey = param.AccessKey - volcConfig.PropagationTimeout = propagationTimeout - volcConfig.PollingInterval = pollingInterval - volcConfig.TTL = ttl - p, err = volcengine.NewDNSProviderConfig(volcConfig) + config := volcengine.NewDefaultConfig() + config.SecretKey = param.SecretKey + config.AccessKey = param.AccessKey + config.PropagationTimeout = propagationTimeout + config.PollingInterval = pollingInterval + config.TTL = ttl + p, err = volcengine.NewDNSProviderConfig(config) case HuaweiCloud: - huaweiCloudConfig := huaweicloud.NewDefaultConfig() - huaweiCloudConfig.AccessKeyID = param.AccessKey - huaweiCloudConfig.SecretAccessKey = param.SecretKey - huaweiCloudConfig.Region = param.Region - huaweiCloudConfig.PropagationTimeout = propagationTimeout - huaweiCloudConfig.PollingInterval = pollingInterval - huaweiCloudConfig.TTL = int32(ttl) - p, err = huaweicloud.NewDNSProviderConfig(huaweiCloudConfig) + config := huaweicloud.NewDefaultConfig() + config.AccessKeyID = param.AccessKey + config.SecretAccessKey = param.SecretKey + config.Region = param.Region + if config.Region == "" { + config.Region = "cn-north-1" + } + config.PropagationTimeout = propagationTimeout + config.PollingInterval = pollingInterval + config.TTL = int32(ttl) + p, err = huaweicloud.NewDNSProviderConfig(config) case FreeMyIP: - freeMyIpConfig := freemyip.NewDefaultConfig() - freeMyIpConfig.Token = param.Token - freeMyIpConfig.PropagationTimeout = propagationTimeout - freeMyIpConfig.PollingInterval = pollingInterval - p, err = freemyip.NewDNSProviderConfig(freeMyIpConfig) + config := freemyip.NewDefaultConfig() + config.Token = param.Token + config.PropagationTimeout = propagationTimeout + config.PollingInterval = pollingInterval + p, err = freemyip.NewDNSProviderConfig(config) case Vercel: - vercelConfig := vercel.NewDefaultConfig() - vercelConfig.AuthToken = param.Token - vercelConfig.PropagationTimeout = propagationTimeout - vercelConfig.PollingInterval = pollingInterval - p, err = vercel.NewDNSProviderConfig(vercelConfig) + config := vercel.NewDefaultConfig() + config.AuthToken = param.Token + config.PropagationTimeout = propagationTimeout + config.PollingInterval = pollingInterval + p, err = vercel.NewDNSProviderConfig(config) case Spaceship: - spaceshipConfig := spaceship.NewDefaultConfig() - spaceshipConfig.APIKey = param.APIkey - spaceshipConfig.APISecret = param.APISecret - spaceshipConfig.PropagationTimeout = propagationTimeout - spaceshipConfig.PollingInterval = pollingInterval - spaceshipConfig.TTL = ttl - p, err = spaceship.NewDNSProviderConfig(spaceshipConfig) + config := spaceship.NewDefaultConfig() + config.APIKey = param.APIkey + config.APISecret = param.APISecret + config.PropagationTimeout = propagationTimeout + config.PollingInterval = pollingInterval + config.TTL = ttl + p, err = spaceship.NewDNSProviderConfig(config) case WestCN: - westcnConfig := westcn.NewDefaultConfig() - westcnConfig.Username = param.Username - westcnConfig.Password = param.Password - westcnConfig.PropagationTimeout = propagationTimeout - westcnConfig.PollingInterval = pollingInterval - westcnConfig.TTL = ttl - p, err = westcn.NewDNSProviderConfig(westcnConfig) - + config := westcn.NewDefaultConfig() + config.Username = param.Username + config.Password = param.Password + config.PropagationTimeout = propagationTimeout + config.PollingInterval = pollingInterval + config.TTL = ttl + p, err = westcn.NewDNSProviderConfig(config) case ClouDNS: - cloudnsConfig := cloudns.NewDefaultConfig() - cloudnsConfig.AuthID = param.AuthID - cloudnsConfig.SubAuthID = param.SubAuthID - cloudnsConfig.AuthPassword = param.AuthPassword - cloudnsConfig.PropagationTimeout = propagationTimeout - cloudnsConfig.PollingInterval = pollingInterval - cloudnsConfig.TTL = ttl - p, err = cloudns.NewDNSProviderConfig(cloudnsConfig) + config := cloudns.NewDefaultConfig() + config.AuthID = param.AuthID + config.SubAuthID = param.SubAuthID + config.AuthPassword = param.AuthPassword + config.PropagationTimeout = propagationTimeout + config.PollingInterval = pollingInterval + config.TTL = ttl + p, err = cloudns.NewDNSProviderConfig(config) case RegRu: - regRuConfig := regru.NewDefaultConfig() - regRuConfig.Username = param.Username - regRuConfig.Password = param.Password - regRuConfig.PropagationTimeout = propagationTimeout - regRuConfig.PollingInterval = pollingInterval - regRuConfig.TTL = ttl - p, err = regru.NewDNSProviderConfig(regRuConfig) + config := regru.NewDefaultConfig() + config.Username = param.Username + config.Password = param.Password + config.PropagationTimeout = propagationTimeout + config.PollingInterval = pollingInterval + config.TTL = ttl + p, err = regru.NewDNSProviderConfig(config) + case Dynu: + config := dynu.NewDefaultConfig() + config.APIKey = param.APIkey + config.PropagationTimeout = propagationTimeout + config.PollingInterval = pollingInterval + config.TTL = ttl + p, err = dynu.NewDNSProviderConfig(config) + case BaiduCloud: + config := baiducloud.NewDefaultConfig() + config.AccessKeyID = param.AccessKey + config.SecretAccessKey = param.SecretKey + config.PropagationTimeout = propagationTimeout + config.PollingInterval = pollingInterval + config.TTL = ttl + p, err = baiducloud.NewDNSProviderConfig(config) } if err != nil { diff --git a/frontend/src/global/mimetype.ts b/frontend/src/global/mimetype.ts index 1a81efa88..c0a3007d7 100644 --- a/frontend/src/global/mimetype.ts +++ b/frontend/src/global/mimetype.ts @@ -211,6 +211,10 @@ export const DNSTypes = [ label: 'Name.com', value: 'NameCom', }, + { + label: 'Dynu', + value: 'Dynu', + }, { label: 'reg.ru', value: 'RegRu', @@ -219,6 +223,10 @@ export const DNSTypes = [ label: 'FreeMyIP', value: 'FreeMyIP', }, + { + label: i18n.global.t('website.baiduCloud'), + value: 'BaiduCloud', + }, { label: i18n.global.t('website.rainyun'), value: 'RainYun', diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index 50109a3b9..045f3774a 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -2616,6 +2616,7 @@ const message = { 'The default execution directory of the script is the 1Panel installation directory. If a certificate is pushed into local directory, the execution directory will be the certificate push directory. The default execution timeout is 30 minutes.', customAcme: 'Custom ACME Service', customAcmeURL: 'ACME Service URL', + baiduCloud: 'Baidu Cloud', }, firewall: { create: 'Create rule', diff --git a/frontend/src/lang/modules/ja.ts b/frontend/src/lang/modules/ja.ts index 1186eca6f..9e9d0258b 100644 --- a/frontend/src/lang/modules/ja.ts +++ b/frontend/src/lang/modules/ja.ts @@ -2513,6 +2513,7 @@ const message = { 'スクリプトのデフォルトの実行ディレクトリは、1Panelインストールディレクトリです。証明書がローカルディレクトリにプッシュされた場合、実行ディレクトリは証明書プッシュディレクトリになります。デフォルトの実行タイムアウトは30分です。', customAcme: 'カスタム ACME サービス', customAcmeURL: 'ACME サービス URL', + baiduCloud: '百度クラウド', }, firewall: { create: 'ルールを作成します', diff --git a/frontend/src/lang/modules/ko.ts b/frontend/src/lang/modules/ko.ts index 265c47cec..94e10dc9e 100644 --- a/frontend/src/lang/modules/ko.ts +++ b/frontend/src/lang/modules/ko.ts @@ -2470,6 +2470,7 @@ const message = { '스크립트의 기본 실행 디렉토리는 1Panel 설치 디렉토리입니다. 인증서가 로컬 디렉토리에 푸시되는 경우 실행 디렉토리는 인증서 푸시 디렉토리가 됩니다. 기본 실행 제한 시간은 30분입니다.', customAcme: '사용자 정의 ACME 서비스', customAcmeURL: 'ACME 서비스 URL', + baiduCloud: '바이두 클라우드', }, firewall: { create: '규칙 만들기', diff --git a/frontend/src/lang/modules/ms.ts b/frontend/src/lang/modules/ms.ts index 735067df4..4735f27e5 100644 --- a/frontend/src/lang/modules/ms.ts +++ b/frontend/src/lang/modules/ms.ts @@ -2570,6 +2570,7 @@ const message = { 'Direktori pelaksanaan lalai skrip adalah direktori pemasangan 1Panel. Jika sijil ditolak ke direktori tempatan, direktori pelaksanaan akan menjadi direktori tolak sijil. Tamat masa pelaksanaan lalai ialah 30 minit.', customAcme: 'Perkhidmatan ACME Tersuai', customAcmeURL: 'URL Perkhidmatan ACME', + baiduCloud: 'Baidu Cloud', }, firewall: { create: 'Buat peraturan', diff --git a/frontend/src/lang/modules/pt-br.ts b/frontend/src/lang/modules/pt-br.ts index 5dd40c182..013efa186 100644 --- a/frontend/src/lang/modules/pt-br.ts +++ b/frontend/src/lang/modules/pt-br.ts @@ -2568,6 +2568,7 @@ const message = { 'O diretório padrão de execução do script é o diretório de instalação do 1Panel. Se um certificado for enviado para o diretório local, o diretório de execução será o diretório de envio do certificado. O tempo limite padrão de execução é de 30 minutos.', customAcme: 'Serviço ACME Personalizado', customAcmeURL: 'URL do Serviço ACME', + baiduCloud: 'Baidu Cloud', }, firewall: { create: 'Criar regra', diff --git a/frontend/src/lang/modules/ru.ts b/frontend/src/lang/modules/ru.ts index 155ecf817..44dce2aee 100644 --- a/frontend/src/lang/modules/ru.ts +++ b/frontend/src/lang/modules/ru.ts @@ -2565,6 +2565,7 @@ const message = { 'Директория выполнения скрипта по умолчанию - директория установки 1Panel. Если сертификат отправляется в локальную директорию, директорией выполнения будет директория отправки сертификата. Тайм-аут выполнения по умолчанию - 30 минут.', customAcme: 'Пользовательская служба ACME', customAcmeURL: 'URL службы ACME', + baiduCloud: 'Baidu Cloud', }, firewall: { create: 'Создать правило', diff --git a/frontend/src/lang/modules/zh-Hant.ts b/frontend/src/lang/modules/zh-Hant.ts index 33c7f0a04..f45266626 100644 --- a/frontend/src/lang/modules/zh-Hant.ts +++ b/frontend/src/lang/modules/zh-Hant.ts @@ -2440,6 +2440,7 @@ const message = { '腳本預設執行目錄為 1Panel 安裝目錄,如果有推送證書,那麼執行目錄為證書推送目錄。預設超時時間 30 分鐘', customAcme: '自訂 ACME 服務', customAcmeURL: 'ACME 服務 URL', + baiduCloud: '百度雲', }, firewall: { create: '創建規則', diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index 16ba7652d..3fcd6bcc8 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -2428,6 +2428,7 @@ const message = { '脚本默认执行目录为 1Panel 安装目录,如果有推送证书,那么执行目录为证书推送目录。默认超时时间 30 分钟', customAcme: '自定义 ACME 服务', customAcmeURL: 'ACME 服务 URL', + baiduCloud: '百度云', }, firewall: { create: '创建规则', diff --git a/frontend/src/views/website/ssl/dns-account/create/index.vue b/frontend/src/views/website/ssl/dns-account/create/index.vue index 3f50f1d1f..c9ec5ec8f 100644 --- a/frontend/src/views/website/ssl/dns-account/create/index.vue +++ b/frontend/src/views/website/ssl/dns-account/create/index.vue @@ -19,7 +19,11 @@ {{ $t('ssl.deprecatedHelper') }} -
+
@@ -84,7 +88,8 @@ account.type === 'NameSilo' || account.type === 'Godaddy' || account.type === 'RainYun' || - account.type === 'Spaceship' + account.type === 'Spaceship' || + account.type === 'Dynu' " >