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