From d31f0aef1bc45ef78478a0195b1ab32cf5f5518e Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 19 Jan 2016 17:38:36 +0100 Subject: Collect mimes, change Signer interface to generic []byte --- account.go | 9 ++------- provider.go | 21 ++++++++++++++++----- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/account.go b/account.go index 48849c4..393d27f 100644 --- a/account.go +++ b/account.go @@ -6,7 +6,6 @@ import ( "crypto/rand" "crypto/rsa" "encoding/base64" - "encoding/json" "io" "strings" @@ -53,16 +52,12 @@ func newAccount(key crypto.PrivateKey) (*Account, error) { // Signer describes a signing interface type Signer interface { - Sign(interface{}, jose.NonceSource) (io.Reader, error) + Sign([]byte, jose.NonceSource) (io.Reader, error) KeyAuth(string) (string, error) } // Sign implements Signer interface -func (a *Account) Sign(v interface{}, n jose.NonceSource) (io.Reader, error) { - msg, err := json.Marshal(v) - if err != nil { - return nil, err - } +func (a *Account) Sign(msg []byte, n jose.NonceSource) (io.Reader, error) { a.signer.SetNonceSource(n) obj, err := a.signer.Sign(msg) if err != nil { diff --git a/provider.go b/provider.go index 8a3f052..302d4c3 100644 --- a/provider.go +++ b/provider.go @@ -26,6 +26,13 @@ var ( errStatus = errors.New("unexpected status") ) +const ( + mimeJson = "application/json" + mimeJose = "application/jose+json" + mimeProblem = "application/problem+json" + mimePkix = "application/pkix-cert" +) + // RoundTrip implements RoundTipper func (p Provider) RoundTrip(req *http.Request) (*http.Response, error) { resp, err := p.Transport.RoundTrip(req) @@ -69,11 +76,15 @@ func DialProvider(directory string) (*Provider, error) { } func (p *Provider) post(uri string, s Signer, v interface{}) (*http.Response, error) { - signed, err := s.Sign(v, p) + msg, err := json.Marshal(v) + if err != nil { + return nil, err + } + signed, err := s.Sign(msg, p) if err != nil { return nil, err } - return p.Post(uri, "application/jose+json", signed) + return p.Post(uri, mimeJose, signed) } type nextStep struct { @@ -100,7 +111,7 @@ func parseHeader(resp *http.Response) nextStep { func parseJson(resp *http.Response, v interface{}) error { defer resp.Body.Close() - if resp.Header.Get("Content-Type") != "application/json" { + if resp.Header.Get("Content-Type") != mimeJson { return errContentType } return json.NewDecoder(resp.Body).Decode(v) @@ -108,14 +119,14 @@ func parseJson(resp *http.Response, v interface{}) error { func parseCert(resp *http.Response) (*x509.Certificate, error) { defer resp.Body.Close() - if resp.Header.Get("Content-Type") != "application/pkix-cert" { + if resp.Header.Get("Content-Type") != mimePkix { return nil, errContentType } return readCert(resp.Body) } func hasProblem(resp *http.Response) bool { - return resp.Header.Get("Content-Type") == "application/problem+json" + return resp.Header.Get("Content-Type") == mimeProblem } func problem(r io.Reader) error { -- cgit v1.2.3