From 9ed605aad5f9a94ee0c050155c02dc31e9652764 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 19 Jan 2016 16:35:54 +0100 Subject: Inject roundtripper --- provider.go | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/provider.go b/provider.go index 2a75059..a4aab8a 100644 --- a/provider.go +++ b/provider.go @@ -16,6 +16,7 @@ type Provider struct { Directory nonces chan string http.Client + http.Transport } var ( @@ -25,6 +26,19 @@ var ( errStatus = errors.New("unexpected status") ) +// RoundTrip implements RoundTipper +func (p Provider) RoundTrip(req *http.Request) (*http.Response, error) { + resp, err := p.Transport.RoundTrip(req) + if err != nil { + return nil, err + } + nonce := resp.Header.Get("Replay-Nonce") + if nonce != "" && len(p.nonces) < cap(p.nonces) { + p.nonces <- nonce + } + return resp, nil +} + // Nonce implements jose nonce provider func (p Provider) Nonce() (string, error) { select { @@ -35,20 +49,12 @@ func (p Provider) Nonce() (string, error) { } } -func (p Provider) nonce(resp *http.Response) { - rn := resp.Header.Get("Replay-Nonce") - if rn != "" && len(p.nonces) < cap(p.nonces) { - p.nonces <- rn - } -} - // DialProvider fetches directory and initializes nonce func DialProvider(directory string) (*Provider, error) { - p := &Provider{ - nonces: make(chan string, 10), - Client: http.Client{ - Timeout: time.Duration(5 * time.Second), - }, + p := &Provider{nonces: make(chan string, 10)} + p.Client = http.Client{ + Transport: p, + Timeout: time.Duration(5 * time.Second), } resp, err := p.get(directory) if err != nil { @@ -66,7 +72,6 @@ func (p *Provider) post(uri string, s Signer, v interface{}) (*http.Response, er if err != nil { return nil, err } - p.nonce(resp) if hasProblem(resp) { defer resp.Body.Close() return nil, problem(resp.Body) @@ -79,7 +84,6 @@ func (p *Provider) get(uri string) (*http.Response, error) { if err != nil { return nil, err } - p.nonce(resp) if hasProblem(resp) { defer resp.Body.Close() return nil, problem(resp.Body) -- cgit v1.2.3