mirror of
https://github.com/TeaOSLab/EdgeAPI.git
synced 2025-11-03 23:20:26 +08:00
65 lines
1.6 KiB
Go
65 lines
1.6 KiB
Go
package acme
|
|
|
|
import (
|
|
"github.com/TeaOSLab/EdgeAPI/internal/dnsclients"
|
|
"github.com/TeaOSLab/EdgeAPI/internal/dnsclients/dnstypes"
|
|
"github.com/TeaOSLab/EdgeAPI/internal/errors"
|
|
"github.com/go-acme/lego/v4/challenge/dns01"
|
|
"strings"
|
|
)
|
|
|
|
type DNSProvider struct {
|
|
raw dnsclients.ProviderInterface
|
|
dnsDomain string
|
|
}
|
|
|
|
func NewDNSProvider(raw dnsclients.ProviderInterface, dnsDomain string) *DNSProvider {
|
|
return &DNSProvider{
|
|
raw: raw,
|
|
dnsDomain: dnsDomain,
|
|
}
|
|
}
|
|
|
|
func (this *DNSProvider) Present(domain, token, keyAuth string) error {
|
|
fqdn, value := dns01.GetRecord(domain, keyAuth)
|
|
|
|
// 设置记录
|
|
var index = strings.Index(fqdn, "."+this.dnsDomain)
|
|
if index < 0 {
|
|
return errors.New("invalid fqdn value")
|
|
}
|
|
var recordName = fqdn[:index]
|
|
record, err := this.raw.QueryRecord(this.dnsDomain, recordName, dnstypes.RecordTypeTXT)
|
|
if err != nil {
|
|
return errors.New("query DNS record failed: " + err.Error())
|
|
}
|
|
if record == nil {
|
|
err = this.raw.AddRecord(this.dnsDomain, &dnstypes.Record{
|
|
Id: "",
|
|
Name: recordName,
|
|
Type: dnstypes.RecordTypeTXT,
|
|
Value: value,
|
|
Route: this.raw.DefaultRoute(),
|
|
})
|
|
if err != nil {
|
|
return errors.New("create DNS record failed: " + err.Error())
|
|
}
|
|
} else {
|
|
err = this.raw.UpdateRecord(this.dnsDomain, record, &dnstypes.Record{
|
|
Name: recordName,
|
|
Type: dnstypes.RecordTypeTXT,
|
|
Value: value,
|
|
Route: this.raw.DefaultRoute(),
|
|
})
|
|
if err != nil {
|
|
return errors.New("update DNS record failed: " + err.Error())
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (this *DNSProvider) CleanUp(domain, token, keyAuth string) error {
|
|
return nil
|
|
}
|