auth
auth/memstore.go
Test all possible successful requests, fix query setting in test. Test all the possible successful requests for an authorization code grant. Fix a bug wherein the query string wasn't actually set for the test.
| paddy@28 | 1 package auth |
| paddy@28 | 2 |
| paddy@31 | 3 import ( |
| paddy@31 | 4 "sync" |
| paddy@31 | 5 |
| paddy@45 | 6 "code.secondbit.org/uuid" |
| paddy@31 | 7 ) |
| paddy@28 | 8 |
| paddy@28 | 9 type Memstore struct { |
| paddy@28 | 10 tokens map[string]Token |
| paddy@28 | 11 refreshTokenLookup map[string]string |
| paddy@28 | 12 profileTokenLookup map[string][]string |
| paddy@28 | 13 tokenLock sync.RWMutex |
| paddy@29 | 14 |
| paddy@29 | 15 grants map[string]Grant |
| paddy@29 | 16 grantLock sync.RWMutex |
| paddy@31 | 17 |
| paddy@31 | 18 clients map[string]Client |
| paddy@31 | 19 profileClientLookup map[string][]uuid.ID |
| paddy@31 | 20 clientLock sync.RWMutex |
| paddy@38 | 21 |
| paddy@41 | 22 endpoints map[string][]Endpoint |
| paddy@41 | 23 endpointLock sync.RWMutex |
| paddy@41 | 24 |
| paddy@38 | 25 profiles map[string]Profile |
| paddy@38 | 26 profileLock sync.RWMutex |
| paddy@44 | 27 |
| paddy@44 | 28 logins map[string]Login |
| paddy@44 | 29 profileLoginLookup map[string][]string |
| paddy@44 | 30 loginLock sync.RWMutex |
| paddy@28 | 31 } |
| paddy@28 | 32 |
| paddy@28 | 33 func NewMemstore() *Memstore { |
| paddy@28 | 34 return &Memstore{ |
| paddy@31 | 35 tokens: map[string]Token{}, |
| paddy@31 | 36 refreshTokenLookup: map[string]string{}, |
| paddy@31 | 37 profileTokenLookup: map[string][]string{}, |
| paddy@31 | 38 grants: map[string]Grant{}, |
| paddy@31 | 39 clients: map[string]Client{}, |
| paddy@31 | 40 profileClientLookup: map[string][]uuid.ID{}, |
| paddy@41 | 41 endpoints: map[string][]Endpoint{}, |
| paddy@38 | 42 profiles: map[string]Profile{}, |
| paddy@44 | 43 logins: map[string]Login{}, |
| paddy@44 | 44 profileLoginLookup: map[string][]string{}, |
| paddy@28 | 45 } |
| paddy@28 | 46 } |
| paddy@28 | 47 |
| paddy@28 | 48 func (m *Memstore) lookupTokenByRefresh(token string) (string, error) { |
| paddy@28 | 49 m.tokenLock.RLock() |
| paddy@28 | 50 defer m.tokenLock.RUnlock() |
| paddy@28 | 51 t, ok := m.refreshTokenLookup[token] |
| paddy@28 | 52 if !ok { |
| paddy@28 | 53 return "", ErrTokenNotFound |
| paddy@28 | 54 } |
| paddy@28 | 55 return t, nil |
| paddy@28 | 56 } |
| paddy@28 | 57 |
| paddy@28 | 58 func (m *Memstore) lookupTokensByProfileID(id string) ([]string, error) { |
| paddy@28 | 59 m.tokenLock.RLock() |
| paddy@28 | 60 defer m.tokenLock.RUnlock() |
| paddy@28 | 61 return m.profileTokenLookup[id], nil |
| paddy@28 | 62 } |
| paddy@31 | 63 |
| paddy@33 | 64 func (m *Memstore) lookupClientsByProfileID(id string) []uuid.ID { |
| paddy@31 | 65 m.clientLock.RLock() |
| paddy@31 | 66 defer m.clientLock.RUnlock() |
| paddy@33 | 67 c, ok := m.profileClientLookup[id] |
| paddy@33 | 68 if !ok { |
| paddy@33 | 69 return []uuid.ID{} |
| paddy@33 | 70 } |
| paddy@33 | 71 return c |
| paddy@31 | 72 } |