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