storage: Add OfflineSession object to backend storage.
This commit is contained in:
@@ -13,12 +13,13 @@ import (
|
||||
// New returns an in memory storage.
|
||||
func New(logger logrus.FieldLogger) storage.Storage {
|
||||
return &memStorage{
|
||||
clients: make(map[string]storage.Client),
|
||||
authCodes: make(map[string]storage.AuthCode),
|
||||
refreshTokens: make(map[string]storage.RefreshToken),
|
||||
authReqs: make(map[string]storage.AuthRequest),
|
||||
passwords: make(map[string]storage.Password),
|
||||
logger: logger,
|
||||
clients: make(map[string]storage.Client),
|
||||
authCodes: make(map[string]storage.AuthCode),
|
||||
refreshTokens: make(map[string]storage.RefreshToken),
|
||||
authReqs: make(map[string]storage.AuthRequest),
|
||||
passwords: make(map[string]storage.Password),
|
||||
offlineSessions: make(map[offlineSessionID]storage.OfflineSessions),
|
||||
logger: logger,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,17 +38,23 @@ func (c *Config) Open(logger logrus.FieldLogger) (storage.Storage, error) {
|
||||
type memStorage struct {
|
||||
mu sync.Mutex
|
||||
|
||||
clients map[string]storage.Client
|
||||
authCodes map[string]storage.AuthCode
|
||||
refreshTokens map[string]storage.RefreshToken
|
||||
authReqs map[string]storage.AuthRequest
|
||||
passwords map[string]storage.Password
|
||||
clients map[string]storage.Client
|
||||
authCodes map[string]storage.AuthCode
|
||||
refreshTokens map[string]storage.RefreshToken
|
||||
authReqs map[string]storage.AuthRequest
|
||||
passwords map[string]storage.Password
|
||||
offlineSessions map[offlineSessionID]storage.OfflineSessions
|
||||
|
||||
keys storage.Keys
|
||||
|
||||
logger logrus.FieldLogger
|
||||
}
|
||||
|
||||
type offlineSessionID struct {
|
||||
userID string
|
||||
connID string
|
||||
}
|
||||
|
||||
func (s *memStorage) tx(f func()) {
|
||||
s.mu.Lock()
|
||||
defer s.mu.Unlock()
|
||||
@@ -130,6 +137,32 @@ func (s *memStorage) CreatePassword(p storage.Password) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func (s *memStorage) CreateOfflineSessions(o storage.OfflineSessions) (err error) {
|
||||
id := offlineSessionID{
|
||||
userID: o.UserID,
|
||||
connID: o.ConnID,
|
||||
}
|
||||
s.tx(func() {
|
||||
if _, ok := s.offlineSessions[id]; ok {
|
||||
err = storage.ErrAlreadyExists
|
||||
} else {
|
||||
s.offlineSessions[id] = o
|
||||
}
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
func (s *memStorage) GetAuthCode(id string) (c storage.AuthCode, err error) {
|
||||
s.tx(func() {
|
||||
var ok bool
|
||||
if c, ok = s.authCodes[id]; !ok {
|
||||
err = storage.ErrNotFound
|
||||
return
|
||||
}
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
func (s *memStorage) GetPassword(email string) (p storage.Password, err error) {
|
||||
email = strings.ToLower(email)
|
||||
s.tx(func() {
|
||||
@@ -156,10 +189,10 @@ func (s *memStorage) GetKeys() (keys storage.Keys, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func (s *memStorage) GetRefresh(token string) (tok storage.RefreshToken, err error) {
|
||||
func (s *memStorage) GetRefresh(id string) (tok storage.RefreshToken, err error) {
|
||||
s.tx(func() {
|
||||
var ok bool
|
||||
if tok, ok = s.refreshTokens[token]; !ok {
|
||||
if tok, ok = s.refreshTokens[id]; !ok {
|
||||
err = storage.ErrNotFound
|
||||
return
|
||||
}
|
||||
@@ -178,6 +211,21 @@ func (s *memStorage) GetAuthRequest(id string) (req storage.AuthRequest, err err
|
||||
return
|
||||
}
|
||||
|
||||
func (s *memStorage) GetOfflineSessions(userID string, connID string) (o storage.OfflineSessions, err error) {
|
||||
id := offlineSessionID{
|
||||
userID: userID,
|
||||
connID: connID,
|
||||
}
|
||||
s.tx(func() {
|
||||
var ok bool
|
||||
if o, ok = s.offlineSessions[id]; !ok {
|
||||
err = storage.ErrNotFound
|
||||
return
|
||||
}
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
func (s *memStorage) ListClients() (clients []storage.Client, err error) {
|
||||
s.tx(func() {
|
||||
for _, client := range s.clients {
|
||||
@@ -228,13 +276,13 @@ func (s *memStorage) DeleteClient(id string) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func (s *memStorage) DeleteRefresh(token string) (err error) {
|
||||
func (s *memStorage) DeleteRefresh(id string) (err error) {
|
||||
s.tx(func() {
|
||||
if _, ok := s.refreshTokens[token]; !ok {
|
||||
if _, ok := s.refreshTokens[id]; !ok {
|
||||
err = storage.ErrNotFound
|
||||
return
|
||||
}
|
||||
delete(s.refreshTokens, token)
|
||||
delete(s.refreshTokens, id)
|
||||
})
|
||||
return
|
||||
}
|
||||
@@ -261,13 +309,17 @@ func (s *memStorage) DeleteAuthRequest(id string) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func (s *memStorage) GetAuthCode(id string) (c storage.AuthCode, err error) {
|
||||
func (s *memStorage) DeleteOfflineSessions(userID string, connID string) (err error) {
|
||||
id := offlineSessionID{
|
||||
userID: userID,
|
||||
connID: connID,
|
||||
}
|
||||
s.tx(func() {
|
||||
var ok bool
|
||||
if c, ok = s.authCodes[id]; !ok {
|
||||
if _, ok := s.offlineSessions[id]; !ok {
|
||||
err = storage.ErrNotFound
|
||||
return
|
||||
}
|
||||
delete(s.offlineSessions, id)
|
||||
})
|
||||
return
|
||||
}
|
||||
@@ -338,3 +390,21 @@ func (s *memStorage) UpdateRefreshToken(id string, updater func(p storage.Refres
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
func (s *memStorage) UpdateOfflineSessions(userID string, connID string, updater func(o storage.OfflineSessions) (storage.OfflineSessions, error)) (err error) {
|
||||
id := offlineSessionID{
|
||||
userID: userID,
|
||||
connID: connID,
|
||||
}
|
||||
s.tx(func() {
|
||||
r, ok := s.offlineSessions[id]
|
||||
if !ok {
|
||||
err = storage.ErrNotFound
|
||||
return
|
||||
}
|
||||
if r, err = updater(r); err == nil {
|
||||
s.offlineSessions[id] = r
|
||||
}
|
||||
})
|
||||
return
|
||||
}
|
||||
|
Reference in New Issue
Block a user