wrapper.go raw
1 package edgeone
2
3 import (
4 "context"
5 "fmt"
6
7 "github.com/go-acme/lego/v4/challenge/dns01"
8 "github.com/go-acme/lego/v4/providers/dns/internal/ptr"
9 teo "github.com/go-acme/tencentedgdeone/v20220901"
10 )
11
12 func (d *DNSProvider) getHostedZoneID(ctx context.Context, domain string) (*string, error) {
13 authZone, err := dns01.FindZoneByFqdn(domain)
14 if err != nil {
15 return nil, fmt.Errorf("could not find zone: %w", err)
16 }
17
18 if d.config.ZonesMapping != nil {
19 zoneID, ok := d.config.ZonesMapping[authZone]
20 if ok {
21 return ptr.Pointer(zoneID), nil
22 }
23 }
24
25 request := teo.NewDescribeZonesRequest()
26
27 var zones []*teo.Zone
28
29 for {
30 response, err := teo.DescribeZonesWithContext(ctx, d.client, request)
31 if err != nil {
32 return nil, fmt.Errorf("API call failed: %w", err)
33 }
34
35 zones = append(zones, response.Response.Zones...)
36
37 if int64(len(zones)) >= ptr.Deref(response.Response.TotalCount) {
38 break
39 }
40
41 request.Offset = ptr.Pointer(int64(len(zones)))
42 }
43
44 var hostedZone *teo.Zone
45
46 for _, zone := range zones {
47 unfqdn := dns01.UnFqdn(authZone)
48 if ptr.Deref(zone.ZoneName) == unfqdn {
49 hostedZone = zone
50 }
51 }
52
53 if hostedZone == nil {
54 return nil, fmt.Errorf("zone %s not found for domain %s", authZone, domain)
55 }
56
57 return hostedZone.ZoneId, nil
58 }
59