| // Copyright (c) HashiCorp, Inc. |
| // SPDX-License-Identifier: MPL-2.0 |
| |
| package logical |
| |
| import ( |
| "time" |
| ) |
| |
| // LeaseOptions is an embeddable struct to capture common lease |
| // settings between a Secret and Auth |
| type LeaseOptions struct { |
| // TTL is the duration that this secret is valid for. Vault |
| // will automatically revoke it after the duration. |
| TTL time.Duration `json:"lease"` |
| |
| // MaxTTL is the maximum duration that this secret is valid for. |
| MaxTTL time.Duration `json:"max_ttl"` |
| |
| // Renewable, if true, means that this secret can be renewed. |
| Renewable bool `json:"renewable"` |
| |
| // Increment will be the lease increment that the user requested. |
| // This is only available on a Renew operation and has no effect |
| // when returning a response. |
| Increment time.Duration `json:"-"` |
| |
| // IssueTime is the time of issue for the original lease. This is |
| // only available on Renew and Revoke operations and has no effect when returning |
| // a response. It can be used to enforce maximum lease periods by |
| // a logical backend. |
| IssueTime time.Time `json:"-"` |
| } |
| |
| // LeaseEnabled checks if leasing is enabled |
| func (l *LeaseOptions) LeaseEnabled() bool { |
| return l.TTL > 0 |
| } |
| |
| // LeaseTotal is the lease duration with a guard against a negative TTL |
| func (l *LeaseOptions) LeaseTotal() time.Duration { |
| if l.TTL <= 0 { |
| return 0 |
| } |
| |
| return l.TTL |
| } |
| |
| // ExpirationTime computes the time until expiration including the grace period |
| func (l *LeaseOptions) ExpirationTime() time.Time { |
| var expireTime time.Time |
| if l.LeaseEnabled() { |
| expireTime = time.Now().Add(l.LeaseTotal()) |
| } |
| return expireTime |
| } |