dnssec.go raw

   1  package rest
   2  
   3  import (
   4  	"errors"
   5  	"fmt"
   6  	"net/http"
   7  
   8  	"gopkg.in/ns1/ns1-go.v2/rest/model/dns"
   9  )
  10  
  11  // DNSSECService handles 'zones/ZONE/dnssec' endpoint.
  12  type DNSSECService service
  13  
  14  // Get takes a zone, and returns DNSSEC information.
  15  //
  16  // NS1 API docs: https://ns1.com/api#get-get-dnssec-details-for-a-zone
  17  func (s *DNSSECService) Get(zone string) (*dns.ZoneDNSSEC, *http.Response, error) {
  18  	path := fmt.Sprintf("zones/%s/dnssec", zone)
  19  
  20  	req, err := s.client.NewRequest("GET", path, nil)
  21  	if err != nil {
  22  		return nil, nil, err
  23  	}
  24  
  25  	var d dns.ZoneDNSSEC
  26  	resp, err := s.client.Do(req, &d)
  27  
  28  	if err != nil {
  29  		switch err.(type) {
  30  		case *Error:
  31  			if err.(*Error).Message == "zone not found" {
  32  				return nil, resp, ErrZoneMissing
  33  			}
  34  			if err.(*Error).Message == "DNSSEC is not enabled on the zone" {
  35  				return nil, resp, ErrDNSECNotEnabled
  36  			}
  37  		}
  38  		return nil, resp, err
  39  	}
  40  
  41  	return &d, resp, nil
  42  }
  43  
  44  var (
  45  	// ErrDNSECNotEnabled if DNSSEC is not enabled for the zone, regardless of
  46  	// account-level DNSSEC permission.
  47  	ErrDNSECNotEnabled = errors.New("DNSSEC is not enabled on the zone")
  48  )
  49