1package api 2 3import ( 4 "context" 5 "errors" 6) 7 8func (c *Sys) Renew(id string, increment int) (*Secret, error) { 9 r := c.c.NewRequest("PUT", "/v1/sys/leases/renew") 10 11 body := map[string]interface{}{ 12 "increment": increment, 13 "lease_id": id, 14 } 15 if err := r.SetJSONBody(body); err != nil { 16 return nil, err 17 } 18 19 ctx, cancelFunc := context.WithCancel(context.Background()) 20 defer cancelFunc() 21 resp, err := c.c.RawRequestWithContext(ctx, r) 22 if err != nil { 23 return nil, err 24 } 25 defer resp.Body.Close() 26 27 return ParseSecret(resp.Body) 28} 29 30func (c *Sys) Revoke(id string) error { 31 r := c.c.NewRequest("PUT", "/v1/sys/leases/revoke") 32 body := map[string]interface{}{ 33 "lease_id": id, 34 } 35 if err := r.SetJSONBody(body); err != nil { 36 return err 37 } 38 39 ctx, cancelFunc := context.WithCancel(context.Background()) 40 defer cancelFunc() 41 resp, err := c.c.RawRequestWithContext(ctx, r) 42 if err == nil { 43 defer resp.Body.Close() 44 } 45 return err 46} 47 48func (c *Sys) RevokePrefix(id string) error { 49 r := c.c.NewRequest("PUT", "/v1/sys/leases/revoke-prefix/"+id) 50 51 ctx, cancelFunc := context.WithCancel(context.Background()) 52 defer cancelFunc() 53 resp, err := c.c.RawRequestWithContext(ctx, r) 54 if err == nil { 55 defer resp.Body.Close() 56 } 57 return err 58} 59 60func (c *Sys) RevokeForce(id string) error { 61 r := c.c.NewRequest("PUT", "/v1/sys/leases/revoke-force/"+id) 62 63 ctx, cancelFunc := context.WithCancel(context.Background()) 64 defer cancelFunc() 65 resp, err := c.c.RawRequestWithContext(ctx, r) 66 if err == nil { 67 defer resp.Body.Close() 68 } 69 return err 70} 71 72func (c *Sys) RevokeWithOptions(opts *RevokeOptions) error { 73 if opts == nil { 74 return errors.New("nil options provided") 75 } 76 77 // Construct path 78 path := "/v1/sys/leases/revoke/" 79 switch { 80 case opts.Force: 81 path = "/v1/sys/leases/revoke-force/" 82 case opts.Prefix: 83 path = "/v1/sys/leases/revoke-prefix/" 84 } 85 path += opts.LeaseID 86 87 r := c.c.NewRequest("PUT", path) 88 if !opts.Force { 89 body := map[string]interface{}{ 90 "sync": opts.Sync, 91 } 92 if err := r.SetJSONBody(body); err != nil { 93 return err 94 } 95 } 96 97 ctx, cancelFunc := context.WithCancel(context.Background()) 98 defer cancelFunc() 99 resp, err := c.c.RawRequestWithContext(ctx, r) 100 if err == nil { 101 defer resp.Body.Close() 102 } 103 return err 104} 105 106type RevokeOptions struct { 107 LeaseID string 108 Force bool 109 Prefix bool 110 Sync bool 111} 112