aboutsummaryrefslogtreecommitdiff
path: root/provider.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-01-19 17:38:36 +0100
committerDimitri Sokolyuk <demon@dim13.org>2016-01-19 17:38:36 +0100
commitd31f0aef1bc45ef78478a0195b1ab32cf5f5518e (patch)
tree3cee389508aac8fb9b3fac5baac798d5420d8b70 /provider.go
parent5d38f751c2daaea13b860347dd01561ca8225261 (diff)
Collect mimes, change Signer interface to generic []byte
Diffstat (limited to 'provider.go')
-rw-r--r--provider.go21
1 files changed, 16 insertions, 5 deletions
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 {