auth

Paddy 2014-09-07 Parent:607708cd8829 Child:113ccb15b919

38:1f7b44b130a0 Go to Latest

auth/memstore.go

Update profiles and add tests. Add tests for profile storage. Make Memstore implement the profilestore interface. Get the groundwork of profiles laid.

History
paddy@28 1 package auth
paddy@28 2
paddy@31 3 import (
paddy@31 4 "sync"
paddy@31 5
paddy@31 6 "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@38 22 profiles map[string]Profile
paddy@38 23 profileLock sync.RWMutex
paddy@28 24 }
paddy@28 25
paddy@28 26 func NewMemstore() *Memstore {
paddy@28 27 return &Memstore{
paddy@31 28 tokens: map[string]Token{},
paddy@31 29 refreshTokenLookup: map[string]string{},
paddy@31 30 profileTokenLookup: map[string][]string{},
paddy@31 31 grants: map[string]Grant{},
paddy@31 32 clients: map[string]Client{},
paddy@31 33 profileClientLookup: map[string][]uuid.ID{},
paddy@38 34 profiles: map[string]Profile{},
paddy@28 35 }
paddy@28 36 }
paddy@28 37
paddy@28 38 func (m *Memstore) lookupTokenByRefresh(token string) (string, error) {
paddy@28 39 m.tokenLock.RLock()
paddy@28 40 defer m.tokenLock.RUnlock()
paddy@28 41 t, ok := m.refreshTokenLookup[token]
paddy@28 42 if !ok {
paddy@28 43 return "", ErrTokenNotFound
paddy@28 44 }
paddy@28 45 return t, nil
paddy@28 46 }
paddy@28 47
paddy@28 48 func (m *Memstore) lookupTokensByProfileID(id string) ([]string, error) {
paddy@28 49 m.tokenLock.RLock()
paddy@28 50 defer m.tokenLock.RUnlock()
paddy@28 51 return m.profileTokenLookup[id], nil
paddy@28 52 }
paddy@31 53
paddy@33 54 func (m *Memstore) lookupClientsByProfileID(id string) []uuid.ID {
paddy@31 55 m.clientLock.RLock()
paddy@31 56 defer m.clientLock.RUnlock()
paddy@33 57 c, ok := m.profileClientLookup[id]
paddy@33 58 if !ok {
paddy@33 59 return []uuid.ID{}
paddy@33 60 }
paddy@33 61 return c
paddy@31 62 }