aboutsummaryrefslogtreecommitdiff
path: root/provider.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-01-05 02:29:12 +0100
committerDimitri Sokolyuk <demon@dim13.org>2016-01-05 02:29:12 +0100
commiteb4849347e7f8acb15201649bf1af52d23438c2e (patch)
treea0e4711367bd446af4a5bbbd66ac46a01f3b6779 /provider.go
parent4350ff88d75c4aabf514ce242464ba51060a4bf4 (diff)
Encapsulate get
Diffstat (limited to 'provider.go')
-rw-r--r--provider.go38
1 files 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 {