// Copyright (c) HashiCorp, Inc. // SPDX-License-Identifier: MPL-2.0 package api import ( "context" "errors" "net/http" ) func (c *Sys) Renew(id string, increment int) (*Secret, error) { return c.RenewWithContext(context.Background(), id, increment) } func (c *Sys) RenewWithContext(ctx context.Context, id string, increment int) (*Secret, error) { ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() r := c.c.NewRequest(http.MethodPut, "/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.rawRequestWithContext(ctx, r) if err != nil { return nil, err } defer resp.Body.Close() return ParseSecret(resp.Body) } func (c *Sys) Lookup(id string) (*Secret, error) { return c.LookupWithContext(context.Background(), id) } func (c *Sys) LookupWithContext(ctx context.Context, id string) (*Secret, error) { ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() r := c.c.NewRequest(http.MethodPut, "/v1/sys/leases/lookup") body := map[string]interface{}{ "lease_id": id, } if err := r.SetJSONBody(body); err != nil { return nil, err } resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } defer resp.Body.Close() return ParseSecret(resp.Body) } func (c *Sys) Revoke(id string) error { return c.RevokeWithContext(context.Background(), id) } func (c *Sys) RevokeWithContext(ctx context.Context, id string) error { ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() r := c.c.NewRequest(http.MethodPut, "/v1/sys/leases/revoke") body := map[string]interface{}{ "lease_id": id, } if err := r.SetJSONBody(body); err != nil { return err } resp, err := c.c.rawRequestWithContext(ctx, r) if err == nil { defer resp.Body.Close() } return err } func (c *Sys) RevokePrefix(id string) error { return c.RevokePrefixWithContext(context.Background(), id) } func (c *Sys) RevokePrefixWithContext(ctx context.Context, id string) error { ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() r := c.c.NewRequest(http.MethodPut, "/v1/sys/leases/revoke-prefix/"+id) resp, err := c.c.rawRequestWithContext(ctx, r) if err == nil { defer resp.Body.Close() } return err } func (c *Sys) RevokeForce(id string) error { return c.RevokeForceWithContext(context.Background(), id) } func (c *Sys) RevokeForceWithContext(ctx context.Context, id string) error { ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() r := c.c.NewRequest(http.MethodPut, "/v1/sys/leases/revoke-force/"+id) resp, err := c.c.rawRequestWithContext(ctx, r) if err == nil { defer resp.Body.Close() } return err } func (c *Sys) RevokeWithOptions(opts *RevokeOptions) error { return c.RevokeWithOptionsWithContext(context.Background(), opts) } func (c *Sys) RevokeWithOptionsWithContext(ctx context.Context, opts *RevokeOptions) error { ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() 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(http.MethodPut, path) if !opts.Force { body := map[string]interface{}{ "sync": opts.Sync, } if err := r.SetJSONBody(body); err != nil { return err } } resp, err := c.c.rawRequestWithContext(ctx, r) if err == nil { defer resp.Body.Close() } return err } type RevokeOptions struct { LeaseID string Force bool Prefix bool Sync bool }