user.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. type GetUser struct {
  24. Id string `json:"id"`
  25. Username string `json:"username"`
  26. }
  27. func (u *GetUser) GetAllUsers(repo *dao.UserRepository) ([]GetUser, error) {
  28. var res = []GetUser{}
  29. users, err := repo.GetAllUsers()
  30. if err != nil {
  31. return []GetUser{}, err
  32. }
  33. for _, u := range users {
  34. user := GetUser{Username: u.Username, Id: u.Id}
  35. res = append(res, user)
  36. }
  37. return res, nil
  38. }
  39. type CreateUser struct {
  40. Username string `json:"username"`
  41. Password string `json:"password"`
  42. }
  43. func (u *CreateUser) CreateUser(repo *dao.UserRepository, c *internals.Crypt) (string, error) {
  44. _, err := repo.GetUserByUsername(u.Username)
  45. if err == nil {
  46. return "", errors.New("user already exists")
  47. }
  48. hashed_password, err := c.HashPassword(u.Password)
  49. if err != nil {
  50. return "", err
  51. }
  52. id := repo.AddUser(u.Username, hashed_password)
  53. return id, nil
  54. }