From e7174c090a23fe437d717d01fce44196305dea5f Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sat, 16 Jan 2016 03:39:51 +0100 Subject: Experimantal --- provider.go | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'provider.go') diff --git a/provider.go b/provider.go index 79aa959..755e8c6 100644 --- a/provider.go +++ b/provider.go @@ -16,6 +16,7 @@ type Provider struct { Directory nonces chan string http.Client + dir string } var ( @@ -35,6 +36,13 @@ func (p Provider) Nonce() (string, error) { } } +func (p Provider) nonce(resp *http.Response) { + if rn := resp.Header.Get("Replay-Nonce"); rn != "" { + p.nonces <- rn + } + log.Println("# nonces", len(p.nonces)) +} + // NewProvider fetches directory and initializes nonce func NewProvider(directory string) (*Provider, error) { p := &Provider{ @@ -42,6 +50,7 @@ func NewProvider(directory string) (*Provider, error) { Client: http.Client{ Timeout: time.Duration(5 * time.Second), }, + dir: directory, } return p, p.getJson(directory, &p.Directory) } @@ -51,7 +60,9 @@ func (p *Provider) post(uri string, s Signer, v interface{}) (*http.Response, er if err != nil { return nil, err } - return p.Post(uri, "application/jose+json", signed) + resp, err := p.Post(uri, "application/jose+json", signed) + p.nonce(resp) + return resp, err } func (p *Provider) postJson(uri string, s Signer, v interface{}) (nextStep, error) { @@ -78,6 +89,7 @@ func (p *Provider) getJson(uri string, v interface{}) error { if err != nil { return err } + p.nonce(resp) _, err = p.parseJson(resp, v) return err } @@ -87,6 +99,7 @@ func (p *Provider) getCert(uri string) (*x509.Certificate, error) { if err != nil { return nil, err } + p.nonce(resp) log.Println("get len", resp.ContentLength) crt, _, err := p.parseCert(resp) return crt, err @@ -111,10 +124,6 @@ func (p *Provider) parseHeader(resp *http.Response) nextStep { ns.Link[re[2]] = re[1] } } - if rn := resp.Header.Get("Replay-Nonce"); rn != "" { - log.Println("# nonces", len(p.nonces)) - p.nonces <- rn - } return ns } -- cgit v1.2.3