mirror of
https://github.com/usual2970/certimate.git
synced 2025-06-22 20:29:56 +00:00
refactor: reimpl custom lego dns providers
This commit is contained in:
parent
906141a415
commit
6f94f4d882
@ -87,17 +87,17 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
|
|||||||
func (d *DNSProvider) Present(domain, token, keyAuth string) error {
|
func (d *DNSProvider) Present(domain, token, keyAuth string) error {
|
||||||
info := dns01.GetChallengeInfo(domain, keyAuth)
|
info := dns01.GetChallengeInfo(domain, keyAuth)
|
||||||
|
|
||||||
zoneName, err := dns01.FindZoneByFqdn(info.EffectiveFQDN)
|
authZone, err := dns01.FindZoneByFqdn(info.EffectiveFQDN)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("baiducloud: %w", err)
|
return fmt.Errorf("baiducloud: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
subDomain, err := dns01.ExtractSubDomain(info.EffectiveFQDN, zoneName)
|
subDomain, err := dns01.ExtractSubDomain(info.EffectiveFQDN, authZone)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("baiducloud: %w", err)
|
return fmt.Errorf("baiducloud: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := d.addOrUpdateDNSRecord(domain, subDomain, info.Value); err != nil {
|
if err := d.addOrUpdateDNSRecord(dns01.UnFqdn(authZone), subDomain, info.Value); err != nil {
|
||||||
return fmt.Errorf("baiducloud: %w", err)
|
return fmt.Errorf("baiducloud: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -105,10 +105,19 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
|
func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
|
||||||
fqdn, value := dns01.GetRecord(domain, keyAuth)
|
info := dns01.GetChallengeInfo(domain, keyAuth)
|
||||||
subDomain := dns01.UnFqdn(fqdn)
|
|
||||||
|
|
||||||
if err := d.removeDNSRecord(domain, subDomain, value); err != nil {
|
authZone, err := dns01.FindZoneByFqdn(info.EffectiveFQDN)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("baiducloud: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
subDomain, err := dns01.ExtractSubDomain(info.EffectiveFQDN, authZone)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("baiducloud: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := d.removeDNSRecord(dns01.UnFqdn(authZone), subDomain); err != nil {
|
||||||
return fmt.Errorf("baiducloud: %w", err)
|
return fmt.Errorf("baiducloud: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,16 +128,16 @@ func (d *DNSProvider) Timeout() (timeout, interval time.Duration) {
|
|||||||
return d.config.PropagationTimeout, d.config.PollingInterval
|
return d.config.PropagationTimeout, d.config.PollingInterval
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *DNSProvider) getDNSRecord(domain, subDomain string) (*bceDns.Record, error) {
|
func (d *DNSProvider) getDNSRecord(zoneName, subDomain string) (*bceDns.Record, error) {
|
||||||
pageMarker := ""
|
pageMarker := ""
|
||||||
pageSize := 1000
|
pageSize := 1000
|
||||||
for {
|
for {
|
||||||
request := &bceDns.ListRecordRequest{}
|
request := &bceDns.ListRecordRequest{}
|
||||||
request.Rr = domain
|
request.Rr = zoneName
|
||||||
request.Marker = pageMarker
|
request.Marker = pageMarker
|
||||||
request.MaxKeys = pageSize
|
request.MaxKeys = pageSize
|
||||||
|
|
||||||
response, err := d.client.ListRecord(domain, request)
|
response, err := d.client.ListRecord(zoneName, request)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -149,8 +158,8 @@ func (d *DNSProvider) getDNSRecord(domain, subDomain string) (*bceDns.Record, er
|
|||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *DNSProvider) addOrUpdateDNSRecord(domain, subDomain, value string) error {
|
func (d *DNSProvider) addOrUpdateDNSRecord(zoneName, subDomain, value string) error {
|
||||||
record, err := d.getDNSRecord(domain, subDomain)
|
record, err := d.getDNSRecord(zoneName, subDomain)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -162,7 +171,7 @@ func (d *DNSProvider) addOrUpdateDNSRecord(domain, subDomain, value string) erro
|
|||||||
Value: value,
|
Value: value,
|
||||||
Ttl: &d.config.TTL,
|
Ttl: &d.config.TTL,
|
||||||
}
|
}
|
||||||
err := d.client.CreateRecord(domain, request, d.generateClientToken())
|
err := d.client.CreateRecord(zoneName, request, d.generateClientToken())
|
||||||
return err
|
return err
|
||||||
} else {
|
} else {
|
||||||
request := &bceDns.UpdateRecordRequest{
|
request := &bceDns.UpdateRecordRequest{
|
||||||
@ -171,13 +180,13 @@ func (d *DNSProvider) addOrUpdateDNSRecord(domain, subDomain, value string) erro
|
|||||||
Value: value,
|
Value: value,
|
||||||
Ttl: &d.config.TTL,
|
Ttl: &d.config.TTL,
|
||||||
}
|
}
|
||||||
err := d.client.UpdateRecord(domain, record.Id, request, d.generateClientToken())
|
err := d.client.UpdateRecord(zoneName, record.Id, request, d.generateClientToken())
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *DNSProvider) removeDNSRecord(domain, subDomain, value string) error {
|
func (d *DNSProvider) removeDNSRecord(zoneName, subDomain string) error {
|
||||||
record, err := d.getDNSRecord(domain, subDomain)
|
record, err := d.getDNSRecord(zoneName, subDomain)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -185,7 +194,7 @@ func (d *DNSProvider) removeDNSRecord(domain, subDomain, value string) error {
|
|||||||
if record == nil {
|
if record == nil {
|
||||||
return nil
|
return nil
|
||||||
} else {
|
} else {
|
||||||
err = d.client.DeleteRecord(domain, record.Id, d.generateClientToken())
|
err = d.client.DeleteRecord(zoneName, record.Id, d.generateClientToken())
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -80,17 +80,17 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
|
|||||||
func (d *DNSProvider) Present(domain, token, keyAuth string) error {
|
func (d *DNSProvider) Present(domain, token, keyAuth string) error {
|
||||||
info := dns01.GetChallengeInfo(domain, keyAuth)
|
info := dns01.GetChallengeInfo(domain, keyAuth)
|
||||||
|
|
||||||
zoneName, err := dns01.FindZoneByFqdn(info.EffectiveFQDN)
|
authZone, err := dns01.FindZoneByFqdn(info.EffectiveFQDN)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("gname: %w", err)
|
return fmt.Errorf("gname: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
subDomain, err := dns01.ExtractSubDomain(info.EffectiveFQDN, zoneName)
|
subDomain, err := dns01.ExtractSubDomain(info.EffectiveFQDN, authZone)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("gname: %w", err)
|
return fmt.Errorf("gname: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := d.addOrUpdateDNSRecord(domain, subDomain, info.Value); err != nil {
|
if err := d.addOrUpdateDNSRecord(dns01.UnFqdn(authZone), subDomain, info.Value); err != nil {
|
||||||
return fmt.Errorf("gname: %w", err)
|
return fmt.Errorf("gname: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,10 +98,19 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
|
func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
|
||||||
fqdn, value := dns01.GetRecord(domain, keyAuth)
|
info := dns01.GetChallengeInfo(domain, keyAuth)
|
||||||
subDomain := dns01.UnFqdn(fqdn)
|
|
||||||
|
|
||||||
if err := d.removeDNSRecord(domain, subDomain, value); err != nil {
|
authZone, err := dns01.FindZoneByFqdn(info.EffectiveFQDN)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("gname: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
subDomain, err := dns01.ExtractSubDomain(info.EffectiveFQDN, authZone)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("gname: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := d.removeDNSRecord(dns01.UnFqdn(authZone), subDomain); err != nil {
|
||||||
return fmt.Errorf("gname: %w", err)
|
return fmt.Errorf("gname: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,12 +121,12 @@ func (d *DNSProvider) Timeout() (timeout, interval time.Duration) {
|
|||||||
return d.config.PropagationTimeout, d.config.PollingInterval
|
return d.config.PropagationTimeout, d.config.PollingInterval
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *DNSProvider) getDNSRecord(domain, subDomain string) (*gnamesdk.ResolutionRecord, error) {
|
func (d *DNSProvider) getDNSRecord(zoneName, subDomain string) (*gnamesdk.ResolutionRecord, error) {
|
||||||
page := 1
|
page := 1
|
||||||
pageSize := 20
|
pageSize := 20
|
||||||
for {
|
for {
|
||||||
request := &gnamesdk.ListDomainResolutionRequest{}
|
request := &gnamesdk.ListDomainResolutionRequest{}
|
||||||
request.ZoneName = domain
|
request.ZoneName = zoneName
|
||||||
request.Page = &page
|
request.Page = &page
|
||||||
request.PageSize = &pageSize
|
request.PageSize = &pageSize
|
||||||
|
|
||||||
@ -145,15 +154,15 @@ func (d *DNSProvider) getDNSRecord(domain, subDomain string) (*gnamesdk.Resoluti
|
|||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *DNSProvider) addOrUpdateDNSRecord(domain, subDomain, value string) error {
|
func (d *DNSProvider) addOrUpdateDNSRecord(zoneName, subDomain, value string) error {
|
||||||
record, err := d.getDNSRecord(domain, subDomain)
|
record, err := d.getDNSRecord(zoneName, subDomain)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if record == nil {
|
if record == nil {
|
||||||
request := &gnamesdk.AddDomainResolutionRequest{
|
request := &gnamesdk.AddDomainResolutionRequest{
|
||||||
ZoneName: domain,
|
ZoneName: zoneName,
|
||||||
RecordType: "TXT",
|
RecordType: "TXT",
|
||||||
RecordName: subDomain,
|
RecordName: subDomain,
|
||||||
RecordValue: value,
|
RecordValue: value,
|
||||||
@ -164,7 +173,7 @@ func (d *DNSProvider) addOrUpdateDNSRecord(domain, subDomain, value string) erro
|
|||||||
} else {
|
} else {
|
||||||
request := &gnamesdk.ModifyDomainResolutionRequest{
|
request := &gnamesdk.ModifyDomainResolutionRequest{
|
||||||
ID: record.ID,
|
ID: record.ID,
|
||||||
ZoneName: domain,
|
ZoneName: zoneName,
|
||||||
RecordType: "TXT",
|
RecordType: "TXT",
|
||||||
RecordName: subDomain,
|
RecordName: subDomain,
|
||||||
RecordValue: value,
|
RecordValue: value,
|
||||||
@ -175,8 +184,8 @@ func (d *DNSProvider) addOrUpdateDNSRecord(domain, subDomain, value string) erro
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *DNSProvider) removeDNSRecord(domain, subDomain, value string) error {
|
func (d *DNSProvider) removeDNSRecord(zoneName, subDomain string) error {
|
||||||
record, err := d.getDNSRecord(domain, subDomain)
|
record, err := d.getDNSRecord(zoneName, subDomain)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -186,7 +195,7 @@ func (d *DNSProvider) removeDNSRecord(domain, subDomain, value string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
request := &gnamesdk.DeleteDomainResolutionRequest{
|
request := &gnamesdk.DeleteDomainResolutionRequest{
|
||||||
ZoneName: domain,
|
ZoneName: zoneName,
|
||||||
RecordID: record.ID,
|
RecordID: record.ID,
|
||||||
}
|
}
|
||||||
_, err = d.client.DeleteDomainResolution(request)
|
_, err = d.client.DeleteDomainResolution(request)
|
||||||
|
@ -88,17 +88,17 @@ func NewDNSProviderConfig(config *Config) (*DNSProvider, error) {
|
|||||||
func (d *DNSProvider) Present(domain, token, keyAuth string) error {
|
func (d *DNSProvider) Present(domain, token, keyAuth string) error {
|
||||||
info := dns01.GetChallengeInfo(domain, keyAuth)
|
info := dns01.GetChallengeInfo(domain, keyAuth)
|
||||||
|
|
||||||
zoneName, err := dns01.FindZoneByFqdn(info.EffectiveFQDN)
|
authZone, err := dns01.FindZoneByFqdn(info.EffectiveFQDN)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("jdcloud: %w", err)
|
return fmt.Errorf("jdcloud: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
subDomain, err := dns01.ExtractSubDomain(info.EffectiveFQDN, zoneName)
|
subDomain, err := dns01.ExtractSubDomain(info.EffectiveFQDN, authZone)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("jdcloud: %w", err)
|
return fmt.Errorf("jdcloud: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := d.addOrUpdateDNSRecord(domain, subDomain, info.Value); err != nil {
|
if err := d.addOrUpdateDNSRecord(dns01.UnFqdn(authZone), subDomain, info.Value); err != nil {
|
||||||
return fmt.Errorf("jdcloud: %w", err)
|
return fmt.Errorf("jdcloud: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,10 +106,19 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
|
func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
|
||||||
fqdn, value := dns01.GetRecord(domain, keyAuth)
|
info := dns01.GetChallengeInfo(domain, keyAuth)
|
||||||
subDomain := dns01.UnFqdn(fqdn)
|
|
||||||
|
|
||||||
if err := d.removeDNSRecord(domain, subDomain, value); err != nil {
|
authZone, err := dns01.FindZoneByFqdn(info.EffectiveFQDN)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("jdcloud: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
subDomain, err := dns01.ExtractSubDomain(info.EffectiveFQDN, authZone)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("jdcloud: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := d.removeDNSRecord(dns01.UnFqdn(authZone), subDomain); err != nil {
|
||||||
return fmt.Errorf("jdcloud: %w", err)
|
return fmt.Errorf("jdcloud: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -151,8 +160,8 @@ func (d *DNSProvider) getDNSZone(domain string) (*jdDnsModel.DomainInfo, error)
|
|||||||
return nil, fmt.Errorf("jdcloud: zone %s not found", domain)
|
return nil, fmt.Errorf("jdcloud: zone %s not found", domain)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *DNSProvider) getDNSZoneAndRecord(domain, subDomain string) (*jdDnsModel.DomainInfo, *jdDnsModel.RRInfo, error) {
|
func (d *DNSProvider) getDNSZoneAndRecord(zoneName, subDomain string) (*jdDnsModel.DomainInfo, *jdDnsModel.RRInfo, error) {
|
||||||
zone, err := d.getDNSZone(domain)
|
zone, err := d.getDNSZone(zoneName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
@ -186,8 +195,8 @@ func (d *DNSProvider) getDNSZoneAndRecord(domain, subDomain string) (*jdDnsModel
|
|||||||
return nil, nil, nil
|
return nil, nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *DNSProvider) addOrUpdateDNSRecord(domain, subDomain, value string) error {
|
func (d *DNSProvider) addOrUpdateDNSRecord(zoneName, subDomain, value string) error {
|
||||||
zone, record, err := d.getDNSZoneAndRecord(domain, subDomain)
|
zone, record, err := d.getDNSZoneAndRecord(zoneName, subDomain)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -213,8 +222,8 @@ func (d *DNSProvider) addOrUpdateDNSRecord(domain, subDomain, value string) erro
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *DNSProvider) removeDNSRecord(domain, subDomain, value string) error {
|
func (d *DNSProvider) removeDNSRecord(zoneName, subDomain string) error {
|
||||||
zone, record, err := d.getDNSZoneAndRecord(domain, subDomain)
|
zone, record, err := d.getDNSZoneAndRecord(zoneName, subDomain)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user