open-vault/vendor/github.com/sethvargo/go-limiter/store.go
2020-07-29 15:15:05 -04:00

34 lines
1.3 KiB
Go

package limiter
import "io"
// Store is an interface for limiter storage backends.
//
// Keys should be hash, sanitized, or otherwise scrubbed of identifiable
// information they will be given to the store in plaintext. If you're rate
// limiting by IP address, for example, the IP address would be stored in the
// storage system in plaintext. This may be undesirable in certain situations,
// like when the store is a public database. In those cases, you should hash or
// HMAC the key before passing giving it to the store. If you want to encrypt
// the value, you must use homomorphic encryption to ensure the value always
// encrypts to the same ciphertext.
type Store interface {
// Take takes a token from the given key if available, returning:
//
// - the configured limit size
// - the number of remaining tokens in the interval
// - the server time when new tokens will be available
// - whether the take was successful
//
// If "ok" is false, the take was unsuccessful and the caller should NOT
// service the request.
//
// See the note about keys on the interface documentation.
Take(key string) (limit, remaining, reset uint64, ok bool)
// Close terminates the store and cleans up any data structures or connections
// that may remain open. After a store is stopped, Take() should always return
// zero values.
io.Closer
}