aboutsummaryrefslogtreecommitdiff
path: root/client.go
blob: 45562bce5044e591a189f86a579f7ba4dc558088 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package acme

import "encoding/json"

type Client struct {
	Location string
	Link     map[string]string
	Directory
	Signer
}

func NewClient(p Provider, s Signer) (*Client, error) {
	var dir Directory
	resp, err := p.Get(p.dir)
	if err != nil {
		return nil, err
	}
	p.nonce(resp) // get first nonce
	err = json.NewDecoder(resp.Body).Decode(&dir)
	if err != nil {
		return nil, err
	}
	return &Client{Directory: dir, Signer: s}, nil
}

func (c *Client) newReg(p Provider, s Signer, con Contacts) error {
	r := &Registration{
		Resource: ResNewReg,
		Contact:  con,
	}
	resp, err := p.post(c.NewReg, s, r)
	if err != nil {
		return err
	}
	p.nonce(resp)
	r = &Registration{
		Resource:  ResReg,
		Agreement: c.Link["terms-of-service"],
	}
	if _, err := p.postJson(c.Location, s, r); err != nil {
		return err
	}
	return nil
}