98bf463a65
This change makes it so that if a lease is revoked through user action, we set the expiration time to now and update pending, just as we do with tokens. This allows the normal retry logic to apply in these cases as well, instead of just erroring out immediately. The idea being that once you tell Vault to revoke something it should keep doing its darndest to actually make that happen.
90 lines
1.7 KiB
Go
90 lines
1.7 KiB
Go
package api
|
|
|
|
import "errors"
|
|
|
|
func (c *Sys) Renew(id string, increment int) (*Secret, error) {
|
|
r := c.c.NewRequest("PUT", "/v1/sys/leases/renew")
|
|
|
|
body := map[string]interface{}{
|
|
"increment": increment,
|
|
"lease_id": id,
|
|
}
|
|
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()
|
|
|
|
return ParseSecret(resp.Body)
|
|
}
|
|
|
|
func (c *Sys) Revoke(id string) error {
|
|
r := c.c.NewRequest("PUT", "/v1/sys/leases/revoke/"+id)
|
|
resp, err := c.c.RawRequest(r)
|
|
if err == nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
return err
|
|
}
|
|
|
|
func (c *Sys) RevokePrefix(id string) error {
|
|
r := c.c.NewRequest("PUT", "/v1/sys/leases/revoke-prefix/"+id)
|
|
resp, err := c.c.RawRequest(r)
|
|
if err == nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
return err
|
|
}
|
|
|
|
func (c *Sys) RevokeForce(id string) error {
|
|
r := c.c.NewRequest("PUT", "/v1/sys/leases/revoke-force/"+id)
|
|
resp, err := c.c.RawRequest(r)
|
|
if err == nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
return err
|
|
}
|
|
|
|
func (c *Sys) RevokeWithOptions(opts *RevokeOptions) error {
|
|
if opts == nil {
|
|
return errors.New("nil options provided")
|
|
}
|
|
|
|
// Construct path
|
|
path := "/v1/sys/leases/revoke/"
|
|
switch {
|
|
case opts.Force:
|
|
path = "/v1/sys/leases/revoke-force/"
|
|
case opts.Prefix:
|
|
path = "/v1/sys/leases/revoke-prefix/"
|
|
}
|
|
path += opts.LeaseID
|
|
|
|
r := c.c.NewRequest("PUT", path)
|
|
if !opts.Force {
|
|
body := map[string]interface{}{
|
|
"sync": opts.Sync,
|
|
}
|
|
if err := r.SetJSONBody(body); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
resp, err := c.c.RawRequest(r)
|
|
if err == nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
return err
|
|
}
|
|
|
|
type RevokeOptions struct {
|
|
LeaseID string
|
|
Force bool
|
|
Prefix bool
|
|
Sync bool
|
|
}
|