From eb4849347e7f8acb15201649bf1af52d23438c2e Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 5 Jan 2016 02:29:12 +0100 Subject: Encapsulate get --- provider.go | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/provider.go b/provider.go index ea037d6..8ae4f0e 100644 --- a/provider.go +++ b/provider.go @@ -19,7 +19,7 @@ import ( // Provider ... type Provider struct { Directory - nonce chan string + nonces chan string } var ( @@ -32,29 +32,26 @@ var ( // Nonce implements jose nonce provider func (p Provider) Nonce() (string, error) { select { - case nonce := <-p.nonce: + case nonce := <-p.nonces: return nonce, nil default: return "", errNoNonces } } -func (p Provider) replyNonce(r *http.Response) { +func (p Provider) nonce(r *http.Response) { if rn := r.Header.Get("Replay-Nonce"); rn != "" { - p.nonce <- rn + p.nonces <- rn } } // NewProvider fetches directory and initializes nonce func NewProvider(directory string) (*Provider, error) { - p := &Provider{nonce: make(chan string, 10)} - resp, err := http.Get(directory) - if err != nil { + p := &Provider{nonces: make(chan string, 10)} + if _, err := p.get(directory, &p.Directory); err != nil { return nil, err } - defer resp.Body.Close() - p.replyNonce(resp) - return p, json.NewDecoder(resp.Body).Decode(&p.Directory) + return p, nil } // Important header fields @@ -92,7 +89,7 @@ func (p *Provider) post(uri string, s Signer, v interface{}) (*http.Response, er if err != nil { return nil, err } - p.replyNonce(resp) + p.nonce(resp) log.Println(ansi.Color("STATUS", "yellow"), resp.Status) switch resp.Header.Get("Content-Type") { @@ -109,6 +106,16 @@ func (p *Provider) post(uri string, s Signer, v interface{}) (*http.Response, er } } +func (p *Provider) get(uri string, v interface{}) (*http.Response, error) { + resp, err := http.Get(uri) + if err != nil { + return nil, err + } + defer resp.Body.Close() + p.nonce(resp) + return resp, json.NewDecoder(resp.Body).Decode(v) +} + func parseProblem(resp *http.Response) error { var p Problem if err := json.NewDecoder(resp.Body).Decode(&p); err != nil { @@ -282,14 +289,7 @@ func (p *Provider) Authorize(s ThumbSigner, domain string) error { func (p *Provider) queryStatus(url string, n int, done chan bool) error { r := &Authorization{} - resp, err := http.Get(url) - if err != nil { - return err - } - defer resp.Body.Close() - p.replyNonce(resp) - err = json.NewDecoder(resp.Body).Decode(r) - if err != nil { + if _, err := p.get(url, r); err != nil { return err } if r.Challenges[n].Status == StatusValid { -- cgit v1.2.3