Files
spyda/internal/store.go
James Mills 8495ba0319 More fixes
2021-01-30 15:26:24 +10:00

57 lines
1.3 KiB
Go

package internal
import (
"errors"
"fmt"
"git.mills.io/prologic/spyda/internal/session"
)
var (
ErrInvalidStore = errors.New("error: invalid store")
ErrUserNotFound = errors.New("error: user not found")
ErrTokenNotFound = errors.New("error: token not found")
ErrInvalidSession = errors.New("error: invalid session")
)
type Store interface {
Merge() error
Close() error
Sync() error
DelUser(username string) error
HasUser(username string) bool
GetUser(username string) (*User, error)
SetUser(username string, user *User) error
LenUsers() int64
SearchUsers(prefix string) []string
GetAllUsers() ([]*User, error)
GetSession(sid string) (*session.Session, error)
SetSession(sid string, sess *session.Session) error
HasSession(sid string) bool
DelSession(sid string) error
SyncSession(sess *session.Session) error
LenSessions() int64
GetAllSessions() ([]*session.Session, error)
GetUserTokens(user *User) ([]*Token, error)
SetToken(signature string, token *Token) error
DelToken(signature string) error
LenTokens() int64
}
func NewStore(store string) (Store, error) {
u, err := ParseURI(store)
if err != nil {
return nil, fmt.Errorf("error parsing store uri: %s", err)
}
switch u.Type {
case "bitcask":
return newBitcaskStore(u.Path)
default:
return nil, ErrInvalidStore
}
}