diff --git a/api/sys_init.go b/api/sys_init.go new file mode 100644 index 0000000000..e7dbc5ddab --- /dev/null +++ b/api/sys_init.go @@ -0,0 +1,49 @@ +package api + +func (c *Sys) InitStatus() (bool, error) { + r := c.c.NewRequest("GET", "/sys/init") + resp, err := c.c.RawRequest(r) + if err != nil { + return false, err + } + defer resp.Body.Close() + + var result InitStatusResponse + err = resp.DecodeJSON(&result) + return result.Initialized, err +} + +func (c *Sys) Init(opts *InitRequest) (*InitResponse, error) { + body := map[string]interface{}{ + "secret_shares": opts.SecretShares, + "secret_threshold": opts.SecretThreshold, + } + + r := c.c.NewRequest("PUT", "/sys/init") + if err := r.SetJSONBody(body); err != nil { + return nil, err + } + + resp, err := c.c.RawRequest(r) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + var result InitResponse + err = resp.DecodeJSON(&result) + return &result, err +} + +type InitRequest struct { + SecretShares int + SecretThreshold int +} + +type InitStatusResponse struct { + Initialized bool +} + +type InitResponse struct { + Keys []string +}