1
0
mirror of https://github.com/mayflower/docker-ls.git synced 2025-04-19 13:02:17 +03:00
docker-ls/lib/auth/cache.go
2016-02-17 11:43:45 +01:00

56 lines
1015 B
Go

package auth
import (
"sort"
"strings"
"sync"
)
type challengeCacheKey struct {
realm string
service string
scopes string
}
type tokenCache struct {
entries map[challengeCacheKey]authResponse
mutex sync.RWMutex
}
func newCacheKey(challenge *Challenge) challengeCacheKey {
scopes := append([]string(nil), challenge.scope...)
sort.Sort(sort.StringSlice(scopes))
return challengeCacheKey{
realm: challenge.realm.String(),
service: challenge.service,
scopes: strings.Join(scopes, " "),
}
}
func (c *tokenCache) Get(challenge *Challenge) (token string) {
key := newCacheKey(challenge)
c.mutex.RLock()
if entry, cached := c.entries[key]; cached {
token = entry.Token
}
c.mutex.RUnlock()
return
}
func (c *tokenCache) Set(challenge *Challenge, response authResponse) {
key := newCacheKey(challenge)
c.mutex.Lock()
c.entries[key] = response
c.mutex.Unlock()
}
func newTokenCache() *tokenCache {
return &tokenCache{
entries: make(map[challengeCacheKey]authResponse),
}
}