mirror of
https://github.com/optim-enterprises-bv/vault.git
synced 2025-11-03 12:07:54 +00:00
api: sys methods
This commit is contained in:
@@ -91,7 +91,7 @@ The following HTTP status codes are used throughout the API.
|
|||||||
|
|
||||||
# Group Seal/Unseal
|
# Group Seal/Unseal
|
||||||
|
|
||||||
## Seal [/sys/seal]
|
## Seal Status [/sys/seal-status]
|
||||||
### Seal Status [GET]
|
### Seal Status [GET]
|
||||||
Returns the status of whether the vault is currently
|
Returns the status of whether the vault is currently
|
||||||
sealed or not, as well as the progress of unsealing.
|
sealed or not, as well as the progress of unsealing.
|
||||||
@@ -116,6 +116,7 @@ The response has the following attributes:
|
|||||||
"progress": 1
|
"progress": 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
## Seal [/sys/seal]
|
||||||
### Seal [PUT]
|
### Seal [PUT]
|
||||||
Seal the vault.
|
Seal the vault.
|
||||||
|
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ func (c *Client) NewRequest(method, path string) *Request {
|
|||||||
// RawRequest performs the raw request given. This request may be against
|
// RawRequest performs the raw request given. This request may be against
|
||||||
// a Vault server not configured with this client. This is an advanced operation
|
// a Vault server not configured with this client. This is an advanced operation
|
||||||
// that generally won't need to be called externally.
|
// that generally won't need to be called externally.
|
||||||
func (c *Client) RawRequest(r *Request) (*http.Response, error) {
|
func (c *Client) RawRequest(r *Request) (*Response, error) {
|
||||||
req, err := r.ToHTTP()
|
req, err := r.ToHTTP()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -78,5 +78,5 @@ func (c *Client) RawRequest(r *Request) (*http.Response, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return resp, nil
|
return &Response{Response: resp}, nil
|
||||||
}
|
}
|
||||||
|
|||||||
19
api/response.go
Normal file
19
api/response.go
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Response is a raw response that wraps an HTTP response.
|
||||||
|
type Response struct {
|
||||||
|
*http.Response
|
||||||
|
}
|
||||||
|
|
||||||
|
// DecodeJSON will decode the response body to a JSON structure. This
|
||||||
|
// will consume the response body, but will not close it. Close must
|
||||||
|
// still be called.
|
||||||
|
func (r *Response) DecodeJSON(out interface{}) error {
|
||||||
|
dec := json.NewDecoder(r.Body)
|
||||||
|
return dec.Decode(out)
|
||||||
|
}
|
||||||
50
api/sys.go
50
api/sys.go
@@ -9,3 +9,53 @@ type Sys struct {
|
|||||||
func (c *Client) Sys() *Sys {
|
func (c *Client) Sys() *Sys {
|
||||||
return &Sys{c: c}
|
return &Sys{c: c}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Sys) SealStatus() (*SealStatusResponse, error) {
|
||||||
|
r := c.c.NewRequest("GET", "/sys/seal-status")
|
||||||
|
resp, err := c.c.RawRequest(r)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
var result SealStatusResponse
|
||||||
|
err = resp.DecodeJSON(&result)
|
||||||
|
return &result, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Sys) Seal() error {
|
||||||
|
r := c.c.NewRequest("PUT", "/sys/seal")
|
||||||
|
resp, err := c.c.RawRequest(r)
|
||||||
|
defer resp.Body.Close()
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Sys) Unseal(shard string) (*SealStatusResponse, error) {
|
||||||
|
body := map[string]interface{}{"key": shard}
|
||||||
|
|
||||||
|
r := c.c.NewRequest("PUT", "/sys/unseal")
|
||||||
|
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 SealStatusResponse
|
||||||
|
err = resp.DecodeJSON(&result)
|
||||||
|
return &result, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Structures for the requests/resposne are all down here. They aren't
|
||||||
|
// individually documentd because the map almost directly to the raw HTTP API
|
||||||
|
// documentation. Please refer to that documentation for more details.
|
||||||
|
|
||||||
|
type SealStatusResponse struct {
|
||||||
|
Sealed bool
|
||||||
|
T int
|
||||||
|
N int
|
||||||
|
Progress int
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user