feat: add baidu and rynu dns provider for ssl (#9167)

Refs https://github.com/1Panel-dev/1Panel/issues/9160
This commit is contained in:
CityFun 2025-06-18 15:20:57 +08:00 committed by GitHub
parent 80e217e839
commit 0778e3e81d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
13 changed files with 170 additions and 125 deletions

View file

@ -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

View file

@ -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=

View file

@ -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 {

View file

@ -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',

View file

@ -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',

View file

@ -2513,6 +2513,7 @@ const message = {
'スクリプトのデフォルトの実行ディレクトリは1Panelインストールディレクトリです証明書がローカルディレクトリにプッシュされた場合実行ディレクトリは証明書プッシュディレクトリになりますデフォルトの実行タイムアウトは30分です',
customAcme: 'カスタム ACME サービス',
customAcmeURL: 'ACME サービス URL',
baiduCloud: '百度クラウド',
},
firewall: {
create: 'ルールを作成します',

View file

@ -2470,6 +2470,7 @@ const message = {
'스크립트의 기본 실행 디렉토리는 1Panel 설치 디렉토리입니다. 인증서가 로컬 디렉토리에 푸시되는 경우 실행 디렉토리는 인증서 푸시 디렉토리가 됩니다. 기본 실행 제한 시간은 30분입니다.',
customAcme: '사용자 정의 ACME 서비스',
customAcmeURL: 'ACME 서비스 URL',
baiduCloud: '바이두 클라우드',
},
firewall: {
create: '규칙 만들기',

View file

@ -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',

View file

@ -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',

View file

@ -2565,6 +2565,7 @@ const message = {
'Директория выполнения скрипта по умолчанию - директория установки 1Panel. Если сертификат отправляется в локальную директорию, директорией выполнения будет директория отправки сертификата. Тайм-аут выполнения по умолчанию - 30 минут.',
customAcme: 'Пользовательская служба ACME',
customAcmeURL: 'URL службы ACME',
baiduCloud: 'Baidu Cloud',
},
firewall: {
create: 'Создать правило',

View file

@ -2440,6 +2440,7 @@ const message = {
'腳本預設執行目錄為 1Panel 安裝目錄如果有推送證書那麼執行目錄為證書推送目錄預設超時時間 30 分鐘',
customAcme: '自訂 ACME 服務',
customAcmeURL: 'ACME 服務 URL',
baiduCloud: '百度雲',
},
firewall: {
create: '創建規則',

View file

@ -2428,6 +2428,7 @@ const message = {
'脚本默认执行目录为 1Panel 安装目录如果有推送证书那么执行目录为证书推送目录默认超时时间 30 分钟',
customAcme: '自定义 ACME 服务',
customAcmeURL: 'ACME 服务 URL',
baiduCloud: '百度云',
},
firewall: {
create: '创建规则',

View file

@ -19,7 +19,11 @@
{{ $t('ssl.deprecatedHelper') }}
</span>
</el-form-item>
<div v-if="account.type === 'AliYun' || account.type === 'HuaweiCloud'">
<div
v-if="
account.type === 'AliYun' || account.type === 'HuaweiCloud' || account.type === 'BaiduCloud'
"
>
<el-form-item label="Access key" prop="authorization.accessKey">
<el-input v-model.trim="account.authorization['accessKey']"></el-input>
</el-form-item>
@ -84,7 +88,8 @@
account.type === 'NameSilo' ||
account.type === 'Godaddy' ||
account.type === 'RainYun' ||
account.type === 'Spaceship'
account.type === 'Spaceship' ||
account.type === 'Dynu'
"
>
<el-input v-model.trim="account.authorization['apiKey']"></el-input>