1package api
2
3func (c *Sys) InitStatus() (bool, error) {
4	r := c.c.NewRequest("GET", "/v1/sys/init")
5	resp, err := c.c.RawRequest(r)
6	if err != nil {
7		return false, err
8	}
9	defer resp.Body.Close()
10
11	var result InitStatusResponse
12	err = resp.DecodeJSON(&result)
13	return result.Initialized, err
14}
15
16func (c *Sys) Init(opts *InitRequest) (*InitResponse, error) {
17	r := c.c.NewRequest("PUT", "/v1/sys/init")
18	if err := r.SetJSONBody(opts); err != nil {
19		return nil, err
20	}
21
22	resp, err := c.c.RawRequest(r)
23	if err != nil {
24		return nil, err
25	}
26	defer resp.Body.Close()
27
28	var result InitResponse
29	err = resp.DecodeJSON(&result)
30	return &result, err
31}
32
33type InitRequest struct {
34	SecretShares      int      `json:"secret_shares"`
35	SecretThreshold   int      `json:"secret_threshold"`
36	StoredShares      int      `json:"stored_shares"`
37	PGPKeys           []string `json:"pgp_keys"`
38	RecoveryShares    int      `json:"recovery_shares"`
39	RecoveryThreshold int      `json:"recovery_threshold"`
40	RecoveryPGPKeys   []string `json:"recovery_pgp_keys"`
41}
42
43type InitStatusResponse struct {
44	Initialized bool
45}
46
47type InitResponse struct {
48	Keys         []string
49	RecoveryKeys []string `json:"recovery_keys"`
50	RootToken    string   `json:"root_token"`
51}
52