From eac7b8aa09eb0bd73688e9da0150d9ab1d449430 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sat, 12 Dec 2015 00:41:48 +0100 Subject: Use c.Next --- client.go | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) (limited to 'client.go') 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 } -- cgit v1.2.3