aboutsummaryrefslogtreecommitdiff
path: root/client.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-12-12 00:41:48 +0100
committerDimitri Sokolyuk <demon@dim13.org>2015-12-12 00:41:48 +0100
commiteac7b8aa09eb0bd73688e9da0150d9ab1d449430 (patch)
treeb8b3ad8f17c57472870ecc2744ca8fb7dc4226b0 /client.go
parent410ae274cd8b375b1b555d37bcca6999eccd678f (diff)
Use c.Next
Diffstat (limited to 'client.go')
-rw-r--r--client.go32
1 files changed, 21 insertions, 11 deletions
diff --git a/client.go b/client.go
index 238c340..6e496b3 100644
--- a/client.go
+++ b/client.go
@@ -67,7 +67,7 @@ func (c Client) Nonce() (string, error) {
// post is used for
// new-reg, new-authz, challenge, new-cert
-func (c *Client) post(s Signer, uri string, v interface{}) (*http.Response, error) {
+func (c *Client) post(s Signer, v interface{}) (*http.Response, error) {
body, err := json.Marshal(v)
if err != nil {
return nil, err
@@ -79,7 +79,7 @@ func (c *Client) post(s Signer, uri string, v interface{}) (*http.Response, erro
return nil, err
}
- resp, err := http.Post(uri, "application/jose+json",
+ resp, err := http.Post(c.Next, "application/jose+json",
bytes.NewReader(signed))
if err != nil {
return nil, err
@@ -95,6 +95,16 @@ func (c *Client) post(s Signer, uri string, v interface{}) (*http.Response, erro
return resp, nil
}
+func (c *Client) response(r *http.Response, v interface{}) (string, error) {
+ defer r.Body.Close()
+ next := r.Header.Get("Location")
+ if next == "" {
+ next = c.Links["next"]
+ }
+ err := json.NewDecoder(r.Body).Decode(v)
+ return next, err
+}
+
func links(r *http.Response) Links {
links := make(Links)
key := textproto.CanonicalMIMEHeaderKey("Link")
@@ -125,13 +135,13 @@ func (c *Client) Register(a *Account) error {
Resource: ResNewReg,
Contact: a.Contact,
}
- resp, err := c.post(a, c.Dir.NewReg, r)
+ c.Next = c.Dir.NewReg
+ resp, err := c.post(a, r)
if err != nil {
return err
}
- defer resp.Body.Close()
re := RegistrationResp{}
- err = json.NewDecoder(resp.Body).Decode(&re)
+ c.Next, err = c.response(resp, &re)
if err != nil {
return err
}
@@ -139,14 +149,12 @@ func (c *Client) Register(a *Account) error {
r.Resource = ResRegister
r.Agreement = c.Links["terms-of-service"]
- aresp, err := c.post(a, resp.Header.Get("Location"), r)
+ aresp, err := c.post(a, r)
if err != nil {
return err
}
- defer aresp.Body.Close()
- err = json.NewDecoder(aresp.Body).Decode(&re)
+ c.Next, err = c.response(aresp, &re)
log.Println(re)
- c.Next = c.Links["next"]
return err
}
@@ -157,7 +165,8 @@ func (c *Client) Agree(a *Account) error {
Contact: a.Contact,
Agreement: c.Links["terms-of-service"],
}
- resp, err := c.post(a, c.Dir.NewReg, r)
+ c.Next = c.Dir.NewReg
+ resp, err := c.post(a, r)
if err != nil {
return err
}
@@ -176,7 +185,8 @@ func (c *Client) Authorize(a *Account, domain string) error {
Value: domain,
},
}
- resp, err := c.post(a, c.Dir.NewAuthz, az)
+ c.Next = c.Dir.NewAuthz
+ resp, err := c.post(a, az)
if err != nil {
return err
}