51 lines
1003 B
Go
51 lines
1003 B
Go
|
// Copyright 2023 the Pinniped contributors. All Rights Reserved.
|
||
|
// SPDX-License-Identifier: Apache-2.0
|
||
|
|
||
|
package tokenclient
|
||
|
|
||
|
import (
|
||
|
"time"
|
||
|
|
||
|
"k8s.io/apimachinery/pkg/util/cache"
|
||
|
)
|
||
|
|
||
|
const tokenCacheKey = "token"
|
||
|
|
||
|
type ExpiringSingletonTokenCacheGet interface {
|
||
|
Get() string
|
||
|
}
|
||
|
|
||
|
type ExpiringSingletonTokenCache interface {
|
||
|
ExpiringSingletonTokenCacheGet
|
||
|
Set(token string, ttl time.Duration)
|
||
|
}
|
||
|
|
||
|
type expiringCacheImpl struct {
|
||
|
cache *cache.Expiring
|
||
|
}
|
||
|
|
||
|
var _ ExpiringSingletonTokenCacheGet = &expiringCacheImpl{}
|
||
|
var _ ExpiringSingletonTokenCache = &expiringCacheImpl{}
|
||
|
|
||
|
func NewExpiringSingletonTokenCache() ExpiringSingletonTokenCache {
|
||
|
return &expiringCacheImpl{cache: cache.NewExpiring()}
|
||
|
}
|
||
|
|
||
|
func (e *expiringCacheImpl) Get() string {
|
||
|
maybeToken, ok := e.cache.Get(tokenCacheKey)
|
||
|
if !ok {
|
||
|
return ""
|
||
|
}
|
||
|
|
||
|
token, ok := maybeToken.(string)
|
||
|
if !ok {
|
||
|
return ""
|
||
|
}
|
||
|
|
||
|
return token
|
||
|
}
|
||
|
|
||
|
func (e *expiringCacheImpl) Set(token string, ttl time.Duration) {
|
||
|
e.cache.Set(tokenCacheKey, token, ttl)
|
||
|
}
|