feat: add DNS provider ClouDNS (#8207)
Some checks failed
SonarCloud Scan / SonarCloud (push) Failing after 10m28s

* feat: add DNS provider ClouDNS

* feat: ClouDNS account parameter validation
This commit is contained in:
sunsky 2025-03-25 10:12:14 +08:00 committed by GitHub
parent 3c4a1ea614
commit ed12bec460
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 37 additions and 1 deletions

View file

@ -19,6 +19,7 @@ import (
"github.com/go-acme/lego/v4/lego" "github.com/go-acme/lego/v4/lego"
"github.com/go-acme/lego/v4/providers/dns/alidns" "github.com/go-acme/lego/v4/providers/dns/alidns"
"github.com/go-acme/lego/v4/providers/dns/clouddns" "github.com/go-acme/lego/v4/providers/dns/clouddns"
"github.com/go-acme/lego/v4/providers/dns/cloudns"
"github.com/go-acme/lego/v4/providers/dns/cloudflare" "github.com/go-acme/lego/v4/providers/dns/cloudflare"
"github.com/go-acme/lego/v4/providers/dns/dnspod" "github.com/go-acme/lego/v4/providers/dns/dnspod"
"github.com/go-acme/lego/v4/providers/dns/godaddy" "github.com/go-acme/lego/v4/providers/dns/godaddy"
@ -75,6 +76,7 @@ const (
Volcengine DnsType = "Volcengine" Volcengine DnsType = "Volcengine"
CloudFlare DnsType = "CloudFlare" CloudFlare DnsType = "CloudFlare"
CloudDns DnsType = "CloudDns" CloudDns DnsType = "CloudDns"
ClouDNS DnsType = "ClouDNS"
FreeMyIP DnsType = "FreeMyIP" FreeMyIP DnsType = "FreeMyIP"
NameSilo DnsType = "NameSilo" NameSilo DnsType = "NameSilo"
NameCheap DnsType = "NameCheap" NameCheap DnsType = "NameCheap"
@ -98,6 +100,9 @@ type DNSParam struct {
Region string `json:"region"` Region string `json:"region"`
ClientID string `json:"clientID"` ClientID string `json:"clientID"`
Password string `json:"password"` Password string `json:"password"`
AuthID string `json:"authID"`
SubAuthID string `json:"subAuthID"`
AuthPassword string `json:"authPassword"`
} }
var ( var (
@ -158,6 +163,15 @@ func (c *AcmeClient) UseDns(dnsType DnsType, params string, websiteSSL model.Web
clouddnsConfig.PollingInterval = pollingInterval clouddnsConfig.PollingInterval = pollingInterval
clouddnsConfig.TTL = ttl clouddnsConfig.TTL = ttl
p, err = clouddns.NewDNSProviderConfig(clouddnsConfig) p, err = clouddns.NewDNSProviderConfig(clouddnsConfig)
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 = clouddns.NewDNSProviderConfig(cloudnsConfig)
case FreeMyIP: case FreeMyIP:
freeMyIpConfig := freemyip.NewDefaultConfig() freeMyIpConfig := freemyip.NewDefaultConfig()
freeMyIpConfig.Token = param.Token freeMyIpConfig.Token = param.Token

View file

@ -184,6 +184,10 @@ export const DNSTypes = [
label: 'CloudDNS', label: 'CloudDNS',
value: 'CloudDns', value: 'CloudDns',
}, },
{
label: 'ClouDNS',
value: 'ClouDNS',
},
{ {
label: 'NameSilo', label: 'NameSilo',
value: 'NameSilo', value: 'NameSilo',

View file

@ -97,6 +97,17 @@
<el-input v-model.trim="account.authorization['password']"></el-input> <el-input v-model.trim="account.authorization['password']"></el-input>
</el-form-item> </el-form-item>
</div> </div>
<div v-if="account.type === 'ClouDNS'">
<el-form-item label="Auth ID" prop="authorization.authID">
<el-input v-model.trim="account.authorization['authID']"></el-input>
</el-form-item>
<el-form-item label="Sub Auth ID" prop="authorization.subAuthID">
<el-input v-model.trim="account.authorization['subAuthID']"></el-input>
</el-form-item>
<el-form-item label="Auth Password" prop="authorization.authPassword">
<el-input v-model.trim="account.authorization['authPassword']"></el-input>
</el-form-item>
</div>
<el-form-item <el-form-item
label="API Key" label="API Key"
prop="authorization.apiKey" prop="authorization.apiKey"
@ -137,7 +148,7 @@
import { CreateDnsAccount, UpdateDnsAccount } from '@/api/modules/website'; import { CreateDnsAccount, UpdateDnsAccount } from '@/api/modules/website';
import { Rules } from '@/global/form-rules'; import { Rules } from '@/global/form-rules';
import i18n from '@/lang'; import i18n from '@/lang';
import { MsgSuccess } from '@/utils/message'; import { MsgSuccess, MsgError } from '@/utils/message';
import { FormInstance } from 'element-plus'; import { FormInstance } from 'element-plus';
import { ref } from 'vue'; import { ref } from 'vue';
import { DNSTypes } from '@/global/mimetype'; import { DNSTypes } from '@/global/mimetype';
@ -169,6 +180,7 @@ const rules = ref<any>({
clientID: [Rules.requiredInput], clientID: [Rules.requiredInput],
email: [Rules.email], email: [Rules.email],
password: [Rules.requiredInput], password: [Rules.requiredInput],
authPassword: [Rules.requiredInput],
}, },
}); });
const account = ref({ const account = ref({
@ -217,6 +229,12 @@ const submit = async (formEl: FormInstance | undefined) => {
if (!valid) { if (!valid) {
return; return;
} }
if (account.value.type === 'ClouDNS') {
if (!account.value.authorization.authID && !account.value.authorization.subAuthID) {
MsgError('Please input Auth ID or Sub Auth ID');
return;
}
}
loading.value = true; loading.value = true;
if (accountData.value.mode === 'edit') { if (accountData.value.mode === 'edit') {