From 6ccca7c4e8a6efa649a6b7d96463d30498406bdf Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sat, 12 Dec 2015 15:29:06 +0100 Subject: Combine request and response --- client.go | 47 ++++++++++++++++++----------------------------- 1 file changed, 18 insertions(+), 29 deletions(-) (limited to 'client.go') diff --git a/client.go b/client.go index 0422a39..aef6ec0 100644 --- a/client.go +++ b/client.go @@ -66,28 +66,29 @@ func (c Client) Nonce() (string, error) { // Request issuance POST new-cert 201 -> cert // Check for new cert GET cert 200 -// post is used for +// request is used for // new-reg, new-authz, challenge, new-cert -func (c *Client) post(url string, s Signer, v interface{}) (*http.Response, error) { - body, err := json.Marshal(v) +func (c *Client) request(url string, s Signer, rq, re interface{}) error { + body, err := json.Marshal(rq) if err != nil { - return nil, err + return err } log.Println(string(body)) signed, err := s.Sign(body, c) if err != nil { - return nil, err + return err } resp, err := http.Post(url, "application/jose+json", bytes.NewReader(signed)) if err != nil { - return nil, err + return err } + defer resp.Body.Close() if resp.StatusCode >= http.StatusBadRequest { - return nil, handleError(resp) + return handleError(resp) } c.nonce <- replyNonce(resp) @@ -96,12 +97,7 @@ func (c *Client) post(url string, s Signer, v interface{}) (*http.Response, erro c.Location = location(resp) } - return resp, nil -} - -func (c *Client) response(r *http.Response, v interface{}) error { - defer r.Body.Close() - return json.NewDecoder(r.Body).Decode(v) + return json.NewDecoder(resp.Body).Decode(re) } func location(r *http.Response) string { @@ -153,49 +149,42 @@ func replyNonce(r *http.Response) string { */ func (c *Client) Register(a *Account) error { - r := Registration{ + rq := Registration{ Resource: ResNewReg, Contact: a.Contact, } - resp, err := c.post(c.Dir.NewReg, a, r) - if err != nil { - return err - } re := RegistrationResp{} - err = c.response(resp, &re) + err := c.request(c.Dir.NewReg, a, rq, &re) if err != nil { return err } log.Println(re) // Agree to TOS - r.Resource = ResRegister - r.Agreement = c.Link["terms-of-service"] - aresp, err := c.post(c.Location, a, r) + rq.Resource = ResRegister + rq.Agreement = c.Link["terms-of-service"] + err = c.request(c.Location, a, rq, &re) if err != nil { return err } - err = c.response(aresp, &re) log.Println(re) return err } func (c *Client) Authorize(a *Account, domain string) error { - az := Authorization{ + rq := Authorization{ Resource: ResNewAuthz, Identifier: Identifier{ Type: IdentDNS, Value: domain, }, } - resp, err := c.post(c.Dir.NewAuthz, a, az) + re := AuthorizationResp{} + err := c.request(c.Dir.NewAuthz, a, rq, &re) if err != nil { return err } - defer resp.Body.Close() - ae := AuthorizationResp{} - err = json.NewDecoder(resp.Body).Decode(&ae) - log.Println(ae) + log.Println(re) return err } -- cgit v1.2.3