Christopher James Hayward
1 year ago
9 changed files with 150 additions and 178 deletions
-
27cmd/server/main.go
-
9go.mod
-
29go.sum
-
7server/models/password_token.go
-
10server/models/session.go
-
10server/models/user.go
-
110server/server.go
-
60server/token_db.go
-
62server/user_db.go
@ -0,0 +1,7 @@ |
|||
package models |
|||
|
|||
type PasswordToken struct { |
|||
Token string |
|||
Expires int64 |
|||
UserID uint |
|||
} |
@ -0,0 +1,10 @@ |
|||
package models |
|||
|
|||
import "gorm.io/gorm" |
|||
|
|||
type Session struct { |
|||
gorm.Model |
|||
Token string |
|||
Expires int64 |
|||
UserID uint |
|||
} |
@ -0,0 +1,10 @@ |
|||
package models |
|||
|
|||
import "gorm.io/gorm" |
|||
|
|||
type User struct { |
|||
gorm.Model |
|||
Email string |
|||
Password string |
|||
Sessions []Session |
|||
} |
@ -1,60 +0,0 @@ |
|||
package server |
|||
|
|||
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 |
|||
} |
@ -1,62 +0,0 @@ |
|||
package server |
|||
|
|||
import "errors" |
|||
|
|||
type User struct { |
|||
ID int64 |
|||
Email string |
|||
Password string |
|||
} |
|||
|
|||
type UserDB interface { |
|||
FindByID(id int64) (*User, error) |
|||
FindByEmail(email string) (*User, error) |
|||
Save(*User) error |
|||
} |
|||
|
|||
type inMemoryUserDB struct { |
|||
UserDB |
|||
nextID int64 |
|||
users []*User |
|||
} |
|||
|
|||
func newInMemoryUserDB() *inMemoryUserDB { |
|||
return &inMemoryUserDB{ |
|||
nextID: 1, |
|||
users: make([]*User, 0), |
|||
} |
|||
} |
|||
|
|||
func (m *inMemoryUserDB) FindByID(id int64) (*User, error) { |
|||
for _, u := range m.users { |
|||
if u.ID == id { |
|||
return u, nil |
|||
} |
|||
} |
|||
|
|||
return nil, errors.New("User not found.") |
|||
} |
|||
|
|||
func (m *inMemoryUserDB) FindByEmail(email string) (*User, error) { |
|||
for _, u := range m.users { |
|||
if u.Email == email { |
|||
return u, nil |
|||
} |
|||
} |
|||
|
|||
return nil, errors.New("User not found.") |
|||
} |
|||
|
|||
func (m *inMemoryUserDB) Save(user *User) error { |
|||
for i, u := range m.users { |
|||
if u.ID == user.ID || u.Email == user.Email { |
|||
m.users[i] = user |
|||
return nil |
|||
} |
|||
} |
|||
|
|||
user.ID = m.nextID |
|||
m.users = append(m.users, user) |
|||
m.nextID++ |
|||
return nil |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue