1package api 2 3import "context" 4 5func (c *Sys) SealStatus() (*SealStatusResponse, error) { 6 r := c.c.NewRequest("GET", "/v1/sys/seal-status") 7 return sealStatusRequest(c, r) 8} 9 10func (c *Sys) Seal() error { 11 r := c.c.NewRequest("PUT", "/v1/sys/seal") 12 13 ctx, cancelFunc := context.WithCancel(context.Background()) 14 defer cancelFunc() 15 resp, err := c.c.RawRequestWithContext(ctx, r) 16 if err == nil { 17 defer resp.Body.Close() 18 } 19 return err 20} 21 22func (c *Sys) ResetUnsealProcess() (*SealStatusResponse, error) { 23 body := map[string]interface{}{"reset": true} 24 25 r := c.c.NewRequest("PUT", "/v1/sys/unseal") 26 if err := r.SetJSONBody(body); err != nil { 27 return nil, err 28 } 29 30 return sealStatusRequest(c, r) 31} 32 33func (c *Sys) Unseal(shard string) (*SealStatusResponse, error) { 34 body := map[string]interface{}{"key": shard} 35 36 r := c.c.NewRequest("PUT", "/v1/sys/unseal") 37 if err := r.SetJSONBody(body); err != nil { 38 return nil, err 39 } 40 41 return sealStatusRequest(c, r) 42} 43 44func (c *Sys) UnsealWithOptions(opts *UnsealOpts) (*SealStatusResponse, error) { 45 r := c.c.NewRequest("PUT", "/v1/sys/unseal") 46 if err := r.SetJSONBody(opts); err != nil { 47 return nil, err 48 } 49 50 return sealStatusRequest(c, r) 51} 52 53func sealStatusRequest(c *Sys, r *Request) (*SealStatusResponse, error) { 54 ctx, cancelFunc := context.WithCancel(context.Background()) 55 defer cancelFunc() 56 resp, err := c.c.RawRequestWithContext(ctx, r) 57 if err != nil { 58 return nil, err 59 } 60 defer resp.Body.Close() 61 62 var result SealStatusResponse 63 err = resp.DecodeJSON(&result) 64 return &result, err 65} 66 67type SealStatusResponse struct { 68 Type string `json:"type"` 69 Initialized bool `json:"initialized"` 70 Sealed bool `json:"sealed"` 71 T int `json:"t"` 72 N int `json:"n"` 73 Progress int `json:"progress"` 74 Nonce string `json:"nonce"` 75 Version string `json:"version"` 76 Migration bool `json:"migration"` 77 ClusterName string `json:"cluster_name,omitempty"` 78 ClusterID string `json:"cluster_id,omitempty"` 79 RecoverySeal bool `json:"recovery_seal"` 80 StorageType string `json:"storage_type,omitempty"` 81} 82 83type UnsealOpts struct { 84 Key string `json:"key"` 85 Reset bool `json:"reset"` 86 Migrate bool `json:"migrate"` 87} 88