user.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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. Password string `json:"password,omitempty"`
  11. }
  12. func (u *AuthUser) AuthenticateUser(repo *dao.UserRepository, c *internals.Crypt) (*AuthenticatedUser, error) {
  13. var okUser AuthenticatedUser
  14. user, err := repo.GetUserByUsername(u.Username)
  15. if err != nil {
  16. return nil, err
  17. }
  18. err = c.CheckPasswordHash(u.Password, user.PasswordHash)
  19. if err != nil {
  20. return nil, err
  21. }
  22. okUser.FromUser(user)
  23. return &okUser, nil
  24. }
  25. type GetUser struct {
  26. Id string `json:"id"`
  27. Username string `json:"username"`
  28. }
  29. func (u *GetUser) GetAllUsers(repo *dao.UserRepository) ([]GetUser, error) {
  30. var res = []GetUser{}
  31. users, err := repo.GetAllUsers()
  32. if err != nil {
  33. return []GetUser{}, err
  34. }
  35. for _, u := range users {
  36. user := GetUser{Username: u.Username, Id: u.Id}
  37. res = append(res, user)
  38. }
  39. return res, nil
  40. }
  41. type CreateUser struct {
  42. Username string `json:"username"`
  43. Password string `json:"password"`
  44. }
  45. func (u *CreateUser) CreateUser(repo *dao.UserRepository, c *internals.Crypt) (string, error) {
  46. _, err := repo.GetUserByUsername(u.Username)
  47. if err == nil {
  48. return "", errors.New("user already exists")
  49. }
  50. hashed_password, err := c.HashPassword(u.Password)
  51. if err != nil {
  52. return "", err
  53. }
  54. id := repo.AddUser(u.Username, hashed_password)
  55. return id, nil
  56. }
  57. type AuthenticatedUser struct {
  58. Id string `json:"id"`
  59. Username string `json:"username"`
  60. }
  61. func (u *AuthenticatedUser) FromUser (user dao.User) {
  62. u.Id = user.Id;
  63. u.Username = user.Username
  64. }