challenge.go raw

   1  package api
   2  
   3  import (
   4  	"errors"
   5  
   6  	"github.com/go-acme/lego/v4/acme"
   7  )
   8  
   9  type ChallengeService service
  10  
  11  // New Creates a challenge.
  12  func (c *ChallengeService) New(chlgURL string) (acme.ExtendedChallenge, error) {
  13  	if chlgURL == "" {
  14  		return acme.ExtendedChallenge{}, errors.New("challenge[new]: empty URL")
  15  	}
  16  
  17  	// Challenge initiation is done by sending a JWS payload containing the trivial JSON object `{}`.
  18  	// We use an empty struct instance as the postJSON payload here to achieve this result.
  19  	var chlng acme.ExtendedChallenge
  20  
  21  	resp, err := c.core.post(chlgURL, struct{}{}, &chlng)
  22  	if err != nil {
  23  		return acme.ExtendedChallenge{}, err
  24  	}
  25  
  26  	chlng.AuthorizationURL = getLink(resp.Header, "up")
  27  	chlng.RetryAfter = getRetryAfter(resp)
  28  
  29  	return chlng, nil
  30  }
  31  
  32  // Get Gets a challenge.
  33  func (c *ChallengeService) Get(chlgURL string) (acme.ExtendedChallenge, error) {
  34  	if chlgURL == "" {
  35  		return acme.ExtendedChallenge{}, errors.New("challenge[get]: empty URL")
  36  	}
  37  
  38  	var chlng acme.ExtendedChallenge
  39  
  40  	resp, err := c.core.postAsGet(chlgURL, &chlng)
  41  	if err != nil {
  42  		return acme.ExtendedChallenge{}, err
  43  	}
  44  
  45  	chlng.AuthorizationURL = getLink(resp.Header, "up")
  46  	chlng.RetryAfter = getRetryAfter(resp)
  47  
  48  	return chlng, nil
  49  }
  50