diff --git a/api/SPEC.md b/api/SPEC.md index 43296f8969..73e88b1ce1 100644 --- a/api/SPEC.md +++ b/api/SPEC.md @@ -287,7 +287,6 @@ Create or update a policy with the given ID. + Request (application/json) { - "name": "root", "rules": "HCL" } diff --git a/api/sys_acl.go b/api/sys_acl.go deleted file mode 100644 index 6150e72beb..0000000000 --- a/api/sys_acl.go +++ /dev/null @@ -1,3 +0,0 @@ -package api - -// TODO: This file is a placeholder so I remember this needs to happen. diff --git a/api/sys_policy.go b/api/sys_policy.go new file mode 100644 index 0000000000..635bc7c28a --- /dev/null +++ b/api/sys_policy.go @@ -0,0 +1,67 @@ +package api + +import ( + "fmt" +) + +func (c *Sys) ListPolicies() ([]string, error) { + r := c.c.NewRequest("GET", "/v1/sys/policy") + resp, err := c.c.RawRequest(r) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + var result listPoliciesResp + err = resp.DecodeJSON(&result) + return result.Policies, err +} + +func (c *Sys) GetPolicy(name string) (string, error) { + r := c.c.NewRequest("GET", fmt.Sprintf("/v1/sys/policy/%s", name)) + resp, err := c.c.RawRequest(r) + if err != nil { + return "", err + } + defer resp.Body.Close() + + var result getPoliciesResp + err = resp.DecodeJSON(&result) + return result.Rules, err +} + +func (c *Sys) PutPolicy(name, rules string) error { + body := map[string]string{ + "rules": rules, + } + + r := c.c.NewRequest("PUT", fmt.Sprintf("/v1/sys/policy/%s", name)) + if err := r.SetJSONBody(body); err != nil { + return err + } + + resp, err := c.c.RawRequest(r) + if err != nil { + return err + } + defer resp.Body.Close() + + return nil +} + +func (c *Sys) DeletePolicy(name string) error { + r := c.c.NewRequest("DELETE", fmt.Sprintf("/v1/sys/policy/%s", name)) + resp, err := c.c.RawRequest(r) + if err == nil { + defer resp.Body.Close() + } + return err +} + +type getPoliciesResp struct { + Rules string `json:"rules"` +} + +type listPoliciesResp struct { + Policies []string `json:"policies"` +}