aboutsummaryrefslogtreecommitdiff
path: root/client.go
diff options
context:
space:
mode:
Diffstat (limited to 'client.go')
-rw-r--r--client.go31
1 files changed, 10 insertions, 21 deletions
diff --git a/client.go b/client.go
index 5b178a8..b144e6f 100644
--- a/client.go
+++ b/client.go
@@ -9,20 +9,21 @@ import (
"net/textproto"
"regexp"
"time"
+
+ "github.com/square/go-jose"
)
type Solver interface {
Solve()
}
-type NonceSigner interface {
- Sign([]byte) ([]byte, error)
- parseNonce(*http.Response)
+type Signer interface {
+ Sign([]byte, jose.NonceSource) ([]byte, error)
}
type Client struct {
- directory Directory
- nonce chan string
+ Dir Directory
+ nonce chan string
}
// NewClient fetches directory and initializes nonce
@@ -34,7 +35,7 @@ func NewClient(uri string) (*Client, error) {
defer resp.Body.Close()
c := &Client{nonce: make(chan string, 10)}
c.nonce <- replyNonce(resp)
- err = json.NewDecoder(resp.Body).Decode(&c.directory)
+ err = json.NewDecoder(resp.Body).Decode(&c.Dir)
if err != nil {
return nil, err
}
@@ -53,18 +54,6 @@ func (c Client) Nonce() (string, error) {
}
}
-// Get is used for
-// directory, authz, cert
-func Get(s NonceSigner, uri string, v interface{}) error {
- resp, err := http.Get(uri)
- if err != nil {
- return err
- }
- defer resp.Body.Close()
- s.parseNonce(resp)
- return json.NewDecoder(resp.Body).Decode(v)
-}
-
// Important header fields
//
// Replay-Nonce each response, required for next request
@@ -82,13 +71,13 @@ func Get(s NonceSigner, uri string, v interface{}) error {
// Post is used for
// new-reg, new-authz, challenge, new-cert
-func Post(s NonceSigner, uri string, v interface{}) (*http.Response, error) {
+func (c Client) Post(s Signer, uri string, v interface{}) (*http.Response, error) {
body, err := json.Marshal(v)
if err != nil {
return nil, err
}
- signed, err := s.Sign(body)
+ signed, err := s.Sign(body, c)
if err != nil {
return nil, err
}
@@ -99,7 +88,7 @@ func Post(s NonceSigner, uri string, v interface{}) (*http.Response, error) {
return nil, err
}
- s.parseNonce(resp)
+ c.nonce <- replyNonce(resp)
if resp.StatusCode >= http.StatusBadRequest {
return nil, handleError(resp)