auth
auth/grant.go
Add basic test for retrieving profiles by login. Add a basic test for retrieving profiles from ProfileStores by a passed login. The test is very basic, in that it doesn't test for deleted logins, deleted profiles, etc. But it at least tests that in ordinary circumstances, things work as they're supposed to.
| paddy@26 | 1 package auth |
| paddy@26 | 2 |
| paddy@26 | 3 import ( |
| paddy@29 | 4 "errors" |
| paddy@26 | 5 "time" |
| paddy@26 | 6 |
| paddy@45 | 7 "code.secondbit.org/uuid" |
| paddy@26 | 8 ) |
| paddy@26 | 9 |
| paddy@29 | 10 var ( |
| paddy@29 | 11 ErrGrantNotFound = errors.New("Grant not found in GrantStore.") |
| paddy@29 | 12 ErrGrantAlreadyExists = errors.New("Grant already exists in GrantStore.") |
| paddy@29 | 13 ) |
| paddy@29 | 14 |
| paddy@26 | 15 type Grant struct { |
| paddy@26 | 16 Code string |
| paddy@26 | 17 Created time.Time |
| paddy@26 | 18 ExpiresIn int32 |
| paddy@26 | 19 ClientID uuid.ID |
| paddy@26 | 20 Scope string |
| paddy@26 | 21 RedirectURI string |
| paddy@26 | 22 State string |
| paddy@26 | 23 } |
| paddy@26 | 24 |
| paddy@26 | 25 type GrantStore interface { |
| paddy@26 | 26 GetGrant(code string) (Grant, error) |
| paddy@26 | 27 SaveGrant(grant Grant) error |
| paddy@29 | 28 DeleteGrant(code string) error |
| paddy@26 | 29 } |
| paddy@29 | 30 |
| paddy@29 | 31 func (m *Memstore) GetGrant(code string) (Grant, error) { |
| paddy@29 | 32 m.grantLock.RLock() |
| paddy@29 | 33 defer m.grantLock.RUnlock() |
| paddy@29 | 34 grant, ok := m.grants[code] |
| paddy@29 | 35 if !ok { |
| paddy@29 | 36 return Grant{}, ErrGrantNotFound |
| paddy@29 | 37 } |
| paddy@29 | 38 return grant, nil |
| paddy@29 | 39 } |
| paddy@29 | 40 |
| paddy@29 | 41 func (m *Memstore) SaveGrant(grant Grant) error { |
| paddy@29 | 42 m.grantLock.Lock() |
| paddy@29 | 43 defer m.grantLock.Unlock() |
| paddy@29 | 44 _, ok := m.grants[grant.Code] |
| paddy@29 | 45 if ok { |
| paddy@29 | 46 return ErrGrantAlreadyExists |
| paddy@29 | 47 } |
| paddy@29 | 48 m.grants[grant.Code] = grant |
| paddy@29 | 49 return nil |
| paddy@29 | 50 } |
| paddy@29 | 51 |
| paddy@29 | 52 func (m *Memstore) DeleteGrant(code string) error { |
| paddy@29 | 53 m.grantLock.Lock() |
| paddy@29 | 54 defer m.grantLock.Unlock() |
| paddy@29 | 55 _, ok := m.grants[code] |
| paddy@29 | 56 if !ok { |
| paddy@29 | 57 return ErrGrantNotFound |
| paddy@29 | 58 } |
| paddy@29 | 59 delete(m.grants, code) |
| paddy@29 | 60 return nil |
| paddy@29 | 61 } |