auth
auth/memstore.go
Implement GrantStore for Memstore. Fix bug in GrantStore that asks for a UUID when it really wants a string. Implement GrantStore interface in Memstore, including unit tests for successful (i.e., works-as-intended) scenarios.
| paddy@28 | 1 package auth |
| paddy@28 | 2 |
| paddy@28 | 3 import "sync" |
| paddy@28 | 4 |
| paddy@28 | 5 type Memstore struct { |
| paddy@28 | 6 tokens map[string]Token |
| paddy@28 | 7 refreshTokenLookup map[string]string |
| paddy@28 | 8 profileTokenLookup map[string][]string |
| paddy@28 | 9 tokenLock sync.RWMutex |
| paddy@29 | 10 |
| paddy@29 | 11 grants map[string]Grant |
| paddy@29 | 12 grantLock sync.RWMutex |
| paddy@28 | 13 } |
| paddy@28 | 14 |
| paddy@28 | 15 func NewMemstore() *Memstore { |
| paddy@28 | 16 return &Memstore{ |
| paddy@28 | 17 tokens: map[string]Token{}, |
| paddy@28 | 18 refreshTokenLookup: map[string]string{}, |
| paddy@28 | 19 profileTokenLookup: map[string][]string{}, |
| paddy@29 | 20 grants: map[string]Grant{}, |
| paddy@28 | 21 } |
| paddy@28 | 22 } |
| paddy@28 | 23 |
| paddy@28 | 24 func (m *Memstore) lookupTokenByRefresh(token string) (string, error) { |
| paddy@28 | 25 m.tokenLock.RLock() |
| paddy@28 | 26 defer m.tokenLock.RUnlock() |
| paddy@28 | 27 t, ok := m.refreshTokenLookup[token] |
| paddy@28 | 28 if !ok { |
| paddy@28 | 29 return "", ErrTokenNotFound |
| paddy@28 | 30 } |
| paddy@28 | 31 return t, nil |
| paddy@28 | 32 } |
| paddy@28 | 33 |
| paddy@28 | 34 func (m *Memstore) lookupTokensByProfileID(id string) ([]string, error) { |
| paddy@28 | 35 m.tokenLock.RLock() |
| paddy@28 | 36 defer m.tokenLock.RUnlock() |
| paddy@28 | 37 return m.profileTokenLookup[id], nil |
| paddy@28 | 38 } |