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