You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.0 KiB
60 lines
1.0 KiB
package main
|
|
|
|
import (
|
|
"errors"
|
|
"time"
|
|
)
|
|
|
|
type Token struct {
|
|
UserID int64
|
|
Token string
|
|
Expires *time.Time
|
|
}
|
|
|
|
type TokenDB interface {
|
|
FindByUserID(id int64) (*Token, error)
|
|
FindByToken(token string) (*Token, error)
|
|
Save(token *Token) error
|
|
}
|
|
|
|
type inMemoryTokenDB struct {
|
|
tokens []*Token
|
|
}
|
|
|
|
func newInMemoryTokenDB() *inMemoryTokenDB {
|
|
return &inMemoryTokenDB{
|
|
tokens: make([]*Token, 0),
|
|
}
|
|
}
|
|
|
|
func (m *inMemoryTokenDB) FindByUserID(id int64) (*Token, error) {
|
|
for _, t := range m.tokens {
|
|
if t.UserID == id {
|
|
return t, nil
|
|
}
|
|
}
|
|
|
|
return nil, errors.New("Token not found.")
|
|
}
|
|
|
|
func (m *inMemoryTokenDB) FindByToken(token string) (*Token, error) {
|
|
for _, t := range m.tokens {
|
|
if t.Token == token {
|
|
return t, nil
|
|
}
|
|
}
|
|
|
|
return nil, errors.New("Token not found.")
|
|
}
|
|
|
|
func (m *inMemoryTokenDB) Save(token *Token) error {
|
|
for i, t := range m.tokens {
|
|
if t.UserID == token.UserID || t.Token == token.Token {
|
|
m.tokens[i] = token
|
|
return nil
|
|
}
|
|
}
|
|
|
|
m.tokens = append(m.tokens, token)
|
|
return nil
|
|
}
|