65 lines
1.5 KiB
Go
65 lines
1.5 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")
|
|
ErrURLNotFound = errors.New("error: url 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)
|
|
|
|
DelURL(hash string) error
|
|
HasURL(hash string) bool
|
|
GetURL(hash string) (*URL, error)
|
|
SetURL(hash string, url *URL) error
|
|
URLCount() int64
|
|
ForEachURL(f func(*URL) error) 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
|
|
}
|
|
}
|