58 lines
1.3 KiB
Go
58 lines
1.3 KiB
Go
package store
|
|
|
|
import (
|
|
"time"
|
|
|
|
"git.bronku.xyz/bronku/cake-order-tracker/models"
|
|
)
|
|
|
|
func (s *Store) AddSession(token, userName string, expiration time.Time) error {
|
|
query := "insert into session (token, user, expiration) values(?, ?, ?)"
|
|
_, err := s.db.Exec(query, token, userName, expiration.Format("2006-01-02 15:04"))
|
|
return err
|
|
}
|
|
|
|
func (s *Store) RevokeSession(token string) error {
|
|
query := "delete from session where token = ?;"
|
|
_, err := s.db.Exec(query, token)
|
|
return err
|
|
}
|
|
|
|
func (s *Store) CleanSessions() error {
|
|
now := time.Now().Format("2006-01-02 15:04")
|
|
query := "delete from session where expiration < ?;"
|
|
_, err := s.db.Exec(query, now)
|
|
return err
|
|
}
|
|
|
|
func (s *Store) GetSessions() (map[string]models.Token, error) {
|
|
out := make(map[string]models.Token)
|
|
err := s.CleanSessions()
|
|
if err != nil {
|
|
return out, err
|
|
}
|
|
query := "select token, user, expiration from session;"
|
|
rows, err := s.db.Query(query)
|
|
if err != nil {
|
|
return out, err
|
|
}
|
|
defer rows.Close()
|
|
for rows.Next() {
|
|
var current models.Token
|
|
var token string
|
|
var expiration string
|
|
err = rows.Scan(&token, ¤t.User, &expiration)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
current.Expiration, err = time.Parse("2006-01-02 15:04", expiration)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
if token == "" {
|
|
continue
|
|
}
|
|
out[token] = current
|
|
}
|
|
return out, nil
|
|
}
|