user.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package model
  2. import (
  3. "errors"
  4. "github.com/andreanidouglas/auth-go/dao"
  5. "github.com/andreanidouglas/auth-go/internals"
  6. )
  7. type AuthUser struct {
  8. Id string `json:"id"`
  9. Username string `json:"username"`
  10. PasswordHash string `json:"passwordHash,omitempty"`
  11. }
  12. func (u *AuthUser) AuthenticateUser(repo *dao.UserRepository, c *internals.Crypt) (string, error) {
  13. user, err := repo.GetUserByUsername(u.Username)
  14. if err != nil {
  15. return "", err
  16. }
  17. err = c.CheckPasswordHash(u.PasswordHash, user.PasswordHash)
  18. if err != nil {
  19. return "", err
  20. }
  21. return user.Id, nil
  22. }
  23. func (u *AuthUser) CreateUser(repo *dao.UserRepository, c *internals.Crypt) (string, error) {
  24. _, err := repo.GetUserByUsername(u.Username)
  25. if err == nil {
  26. return "", errors.New("user already exists")
  27. }
  28. hashed_password, err := c.HashPassword(u.PasswordHash)
  29. if err != nil {
  30. return "", err
  31. }
  32. id := repo.AddUser(u.Username, hashed_password)
  33. return id, nil
  34. }
  35. func (u *AuthUser) GetAllUsers(repo *dao.UserRepository) ([]AuthUser, error) {
  36. var res = []AuthUser{}
  37. users, err := repo.GetAllUsers()
  38. if err != nil {
  39. return []AuthUser{}, err
  40. }
  41. for _, u := range users {
  42. user := AuthUser{Username: u.Username, Id: u.Id, PasswordHash: ""}
  43. res = append(res, user)
  44. }
  45. return res, nil
  46. }