From ecff16c89de4bafa04ee3f948d7cb3f183d163a7 Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Thu, 3 Apr 2025 21:03:43 +0800 Subject: [PATCH] chore: improve error messages --- .../baiducloud/internal/lego.go | 4 +- .../lego-providers/cmcccloud/internal/lego.go | 55 +++++++++++-------- .../lego-providers/dnsla/internal/lego.go | 4 +- .../lego-providers/dynv6/internal/lego.go | 4 +- .../lego-providers/gname/internal/lego.go | 4 +- .../lego-providers/jdcloud/internal/lego.go | 4 +- 6 files changed, 43 insertions(+), 32 deletions(-) diff --git a/internal/pkg/core/applicant/acme-dns-01/lego-providers/baiducloud/internal/lego.go b/internal/pkg/core/applicant/acme-dns-01/lego-providers/baiducloud/internal/lego.go index da157bd0..68d59d47 100644 --- a/internal/pkg/core/applicant/acme-dns-01/lego-providers/baiducloud/internal/lego.go +++ b/internal/pkg/core/applicant/acme-dns-01/lego-providers/baiducloud/internal/lego.go @@ -89,7 +89,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error { authZone, err := dns01.FindZoneByFqdn(info.EffectiveFQDN) if err != nil { - return fmt.Errorf("baiducloud: %w", err) + return fmt.Errorf("baiducloud: could not find zone for domain %q: %w", domain, err) } subDomain, err := dns01.ExtractSubDomain(info.EffectiveFQDN, authZone) @@ -109,7 +109,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { authZone, err := dns01.FindZoneByFqdn(info.EffectiveFQDN) if err != nil { - return fmt.Errorf("baiducloud: %w", err) + return fmt.Errorf("baiducloud: could not find zone for domain %q: %w", domain, err) } subDomain, err := dns01.ExtractSubDomain(info.EffectiveFQDN, authZone) diff --git a/internal/pkg/core/applicant/acme-dns-01/lego-providers/cmcccloud/internal/lego.go b/internal/pkg/core/applicant/acme-dns-01/lego-providers/cmcccloud/internal/lego.go index 0329d18d..6bccb1dc 100644 --- a/internal/pkg/core/applicant/acme-dns-01/lego-providers/cmcccloud/internal/lego.go +++ b/internal/pkg/core/applicant/acme-dns-01/lego-providers/cmcccloud/internal/lego.go @@ -93,7 +93,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error { zoneName, err := dns01.FindZoneByFqdn(info.EffectiveFQDN) if err != nil { - return fmt.Errorf("cmccecloud: %w", err) + return fmt.Errorf("cmccecloud: could not find zone for domain %q: %w", domain, err) } subDomain, err := dns01.ExtractSubDomain(info.EffectiveFQDN, zoneName) @@ -108,33 +108,33 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error { } if record == nil { - // add new record resp, err := d.client.CreateRecordOpenapi(&model.CreateRecordOpenapiRequest{ CreateRecordOpenapiBody: &model.CreateRecordOpenapiBody{ LineId: "0", // 默认线路 Rr: subDomain, DomainName: readDomain, - Description: "from certimate", + Description: "certimate acme", Type: model.CreateRecordOpenapiBodyTypeEnumTxt, Value: info.Value, Ttl: &d.config.TTL, }, }) if err != nil { - return fmt.Errorf("lego: %w", err) + return fmt.Errorf("cmccecloud: %w", err) } + if resp.State != model.CreateRecordOpenapiResponseStateEnumOk { - return fmt.Errorf("lego: create record failed, response state: %s, message: %s, code: %s", resp.State, resp.ErrorMessage, resp.ErrorCode) + return fmt.Errorf("cmccecloud: create record failed, response state: %s, message: %s, code: %s", resp.State, resp.ErrorMessage, resp.ErrorCode) } + return nil } else { - // update record resp, err := d.client.ModifyRecordOpenapi(&model.ModifyRecordOpenapiRequest{ ModifyRecordOpenapiBody: &model.ModifyRecordOpenapiBody{ RecordId: record.RecordId, Rr: subDomain, DomainName: readDomain, - Description: "from certmate", + Description: "certmate acme", LineId: "0", Type: model.ModifyRecordOpenapiBodyTypeEnumTxt, Value: info.Value, @@ -142,44 +142,52 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error { }, }) if err != nil { - return fmt.Errorf("lego: %w", err) + return fmt.Errorf("cmccecloud: %w", err) } + if resp.State != model.ModifyRecordOpenapiResponseStateEnumOk { - return fmt.Errorf("lego: create record failed, response state: %s", resp.State) + return fmt.Errorf("cmccecloud: create record failed, response state: %s", resp.State) } + return nil } } func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { challengeInfo := dns01.GetChallengeInfo(domain, keyAuth) + zoneName, err := dns01.FindZoneByFqdn(challengeInfo.FQDN) if err != nil { - return fmt.Errorf("cmccecloud: %w", err) + return fmt.Errorf("cmccecloud: could not find zone for domain %q: %w", domain, err) } + subDomain, err := dns01.ExtractSubDomain(challengeInfo.FQDN, zoneName) if err != nil { return fmt.Errorf("cmccecloud: %w", err) } + readDomain := strings.Trim(zoneName, ".") record, err := d.getDomainRecord(readDomain, subDomain) if err != nil { return err } + if record == nil { return nil + } else { + resp, err := d.client.DeleteRecordOpenapi(&model.DeleteRecordOpenapiRequest{ + DeleteRecordOpenapiBody: &model.DeleteRecordOpenapiBody{ + RecordIdList: []string{record.RecordId}, + }, + }) + if err != nil { + return fmt.Errorf("cmccecloud: %w", err) + } + if resp.State != model.DeleteRecordOpenapiResponseStateEnumOk { + return fmt.Errorf("cmccecloud: delete record failed, unexpected response state: %s", resp.State) + } } - resp, err := d.client.DeleteRecordOpenapi(&model.DeleteRecordOpenapiRequest{ - DeleteRecordOpenapiBody: &model.DeleteRecordOpenapiBody{ - RecordIdList: []string{record.RecordId}, - }, - }) - if err != nil { - return fmt.Errorf("lego: %w", err) - } - if resp.State != model.DeleteRecordOpenapiResponseStateEnumOk { - return fmt.Errorf("lego: delete record failed, response state: %s", resp.State) - } + return nil } @@ -205,8 +213,9 @@ func (d *DNSProvider) getDomainRecord(domain string, rr string) (*model.ListReco } if resp.State != model.ListRecordOpenapiResponseStateEnumOk { respStr, _ := json.Marshal(resp) - return nil, fmt.Errorf("request error. %s", string(respStr)) + return nil, fmt.Errorf("cmccecloud: request error: %s", string(respStr)) } + if resp.Body.Data != nil { for _, item := range *resp.Body.Data { if item.Rr == rr { @@ -214,9 +223,11 @@ func (d *DNSProvider) getDomainRecord(domain string, rr string) (*model.ListReco } } } + if resp.Body.TotalPages == nil || page >= *resp.Body.TotalPages { return nil, nil } + page++ } } diff --git a/internal/pkg/core/applicant/acme-dns-01/lego-providers/dnsla/internal/lego.go b/internal/pkg/core/applicant/acme-dns-01/lego-providers/dnsla/internal/lego.go index 1b9603bd..249f6045 100644 --- a/internal/pkg/core/applicant/acme-dns-01/lego-providers/dnsla/internal/lego.go +++ b/internal/pkg/core/applicant/acme-dns-01/lego-providers/dnsla/internal/lego.go @@ -83,7 +83,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error { authZone, err := dns01.FindZoneByFqdn(info.EffectiveFQDN) if err != nil { - return fmt.Errorf("dnsla: %w", err) + return fmt.Errorf("dnsla: could not find zone for domain %q: %w", domain, err) } subDomain, err := dns01.ExtractSubDomain(info.EffectiveFQDN, authZone) @@ -103,7 +103,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { authZone, err := dns01.FindZoneByFqdn(info.EffectiveFQDN) if err != nil { - return fmt.Errorf("dnsla: %w", err) + return fmt.Errorf("dnsla: could not find zone for domain %q: %w", domain, err) } subDomain, err := dns01.ExtractSubDomain(info.EffectiveFQDN, authZone) diff --git a/internal/pkg/core/applicant/acme-dns-01/lego-providers/dynv6/internal/lego.go b/internal/pkg/core/applicant/acme-dns-01/lego-providers/dynv6/internal/lego.go index f83949a2..d833acd0 100644 --- a/internal/pkg/core/applicant/acme-dns-01/lego-providers/dynv6/internal/lego.go +++ b/internal/pkg/core/applicant/acme-dns-01/lego-providers/dynv6/internal/lego.go @@ -76,7 +76,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error { authZone, err := dns01.FindZoneByFqdn(info.EffectiveFQDN) if err != nil { - return fmt.Errorf("dynv6: %w", err) + return fmt.Errorf("dynv6: could not find zone for domain %q: %w", domain, err) } subDomain, err := dns01.ExtractSubDomain(info.EffectiveFQDN, authZone) @@ -96,7 +96,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { authZone, err := dns01.FindZoneByFqdn(info.EffectiveFQDN) if err != nil { - return fmt.Errorf("dynv6: %w", err) + return fmt.Errorf("dynv6: could not find zone for domain %q: %w", domain, err) } subDomain, err := dns01.ExtractSubDomain(info.EffectiveFQDN, authZone) diff --git a/internal/pkg/core/applicant/acme-dns-01/lego-providers/gname/internal/lego.go b/internal/pkg/core/applicant/acme-dns-01/lego-providers/gname/internal/lego.go index 3c9b1b13..b5df4207 100644 --- a/internal/pkg/core/applicant/acme-dns-01/lego-providers/gname/internal/lego.go +++ b/internal/pkg/core/applicant/acme-dns-01/lego-providers/gname/internal/lego.go @@ -82,7 +82,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error { authZone, err := dns01.FindZoneByFqdn(info.EffectiveFQDN) if err != nil { - return fmt.Errorf("gname: %w", err) + return fmt.Errorf("gname: could not find zone for domain %q: %w", domain, err) } subDomain, err := dns01.ExtractSubDomain(info.EffectiveFQDN, authZone) @@ -102,7 +102,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { authZone, err := dns01.FindZoneByFqdn(info.EffectiveFQDN) if err != nil { - return fmt.Errorf("gname: %w", err) + return fmt.Errorf("gname: could not find zone for domain %q: %w", domain, err) } subDomain, err := dns01.ExtractSubDomain(info.EffectiveFQDN, authZone) diff --git a/internal/pkg/core/applicant/acme-dns-01/lego-providers/jdcloud/internal/lego.go b/internal/pkg/core/applicant/acme-dns-01/lego-providers/jdcloud/internal/lego.go index d5b5277b..8c0e5ddf 100644 --- a/internal/pkg/core/applicant/acme-dns-01/lego-providers/jdcloud/internal/lego.go +++ b/internal/pkg/core/applicant/acme-dns-01/lego-providers/jdcloud/internal/lego.go @@ -91,7 +91,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error { authZone, err := dns01.FindZoneByFqdn(info.EffectiveFQDN) if err != nil { - return fmt.Errorf("jdcloud: %w", err) + return fmt.Errorf("jdcloud: could not find zone for domain %q: %w", domain, err) } subDomain, err := dns01.ExtractSubDomain(info.EffectiveFQDN, authZone) @@ -111,7 +111,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { authZone, err := dns01.FindZoneByFqdn(info.EffectiveFQDN) if err != nil { - return fmt.Errorf("jdcloud: %w", err) + return fmt.Errorf("jdcloud: could not find zone for domain %q: %w", domain, err) } subDomain, err := dns01.ExtractSubDomain(info.EffectiveFQDN, authZone)