github.com/dhax/go-base@v0.0.0-20231004214136-8be7e5c1972b/database/authStore.go (about) 1 package database 2 3 import ( 4 "time" 5 6 "github.com/dhax/go-base/auth/jwt" 7 "github.com/dhax/go-base/auth/pwdless" 8 "github.com/go-pg/pg" 9 ) 10 11 // AuthStore implements database operations for account pwdlessentication. 12 type AuthStore struct { 13 db *pg.DB 14 } 15 16 // NewAuthStore return an AuthStore. 17 func NewAuthStore(db *pg.DB) *AuthStore { 18 return &AuthStore{ 19 db: db, 20 } 21 } 22 23 // GetAccount returns an account by ID. 24 func (s *AuthStore) GetAccount(id int) (*pwdless.Account, error) { 25 a := pwdless.Account{ID: id} 26 err := s.db.Model(&a). 27 Column("account.*"). 28 Where("id = ?id"). 29 First() 30 return &a, err 31 } 32 33 // GetAccountByEmail returns an account by email. 34 func (s *AuthStore) GetAccountByEmail(e string) (*pwdless.Account, error) { 35 a := pwdless.Account{Email: e} 36 err := s.db.Model(&a). 37 Column("id", "active", "email", "name"). 38 Where("email = ?email"). 39 First() 40 return &a, err 41 } 42 43 // UpdateAccount upates account data related to pwdlessentication. 44 func (s *AuthStore) UpdateAccount(a *pwdless.Account) error { 45 _, err := s.db.Model(a). 46 Column("last_login"). 47 WherePK(). 48 Update() 49 return err 50 } 51 52 // GetToken returns refresh token by token identifier. 53 func (s *AuthStore) GetToken(t string) (*jwt.Token, error) { 54 token := jwt.Token{Token: t} 55 err := s.db.Model(&token). 56 Where("token = ?token"). 57 First() 58 59 return &token, err 60 } 61 62 // CreateOrUpdateToken creates or updates an existing refresh token. 63 func (s *AuthStore) CreateOrUpdateToken(t *jwt.Token) error { 64 var err error 65 if t.ID == 0 { 66 err = s.db.Insert(t) 67 } else { 68 err = s.db.Update(t) 69 } 70 return err 71 } 72 73 // DeleteToken deletes a refresh token. 74 func (s *AuthStore) DeleteToken(t *jwt.Token) error { 75 err := s.db.Delete(t) 76 return err 77 } 78 79 // PurgeExpiredToken deletes expired refresh token. 80 func (s *AuthStore) PurgeExpiredToken() error { 81 _, err := s.db.Model(&jwt.Token{}). 82 Where("expiry < ?", time.Now()). 83 Delete() 84 85 return err 86 }