auth

Paddy 2014-10-15 Parent:3a6a65ed380c Child:e45bfa2abc00

49:73a9f7a6af54 Go to Latest

auth/memstore.go

Update error strings, add ErrNo*Store errors. Update error strings to consistently begin with a lowercase letter and end without punctuation, as per the Go style guide. See https://code.google.com/p/go-wiki/wiki/CodeReviewComments#Error_Strings For each type of Store, add an ErrNo*Store error (e.g., ErrNoTokenStore) variable, to prepare for our Context type, which will throw these errors when a Store is used without being set.

History
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 }