user.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package forms
  2. import (
  3. "github.com/porter-dev/porter/internal/models"
  4. "github.com/porter-dev/porter/internal/repository"
  5. "golang.org/x/crypto/bcrypt"
  6. "gorm.io/gorm"
  7. )
  8. // WriteUserForm is a generic form for write operations to the User model
  9. type WriteUserForm interface {
  10. ToUser(repo repository.UserRepository) (*models.User, error)
  11. }
  12. // CreateUserForm represents the accepted values for creating a user
  13. type CreateUserForm struct {
  14. WriteUserForm
  15. Email string `json:"email" form:"required,max=255,email"`
  16. Password string `json:"password" form:"required,max=255"`
  17. }
  18. // ToUser converts a CreateUserForm to models.User
  19. func (cuf *CreateUserForm) ToUser(_ repository.UserRepository) (*models.User, error) {
  20. hashed, err := bcrypt.GenerateFromPassword([]byte(cuf.Password), 8)
  21. if err != nil {
  22. return nil, err
  23. }
  24. return &models.User{
  25. Email: cuf.Email,
  26. Password: string(hashed),
  27. }, nil
  28. }
  29. // LoginUserForm represents the accepted values for logging a user in
  30. type LoginUserForm struct {
  31. WriteUserForm
  32. ID uint `form:"required"`
  33. Email string `json:"email" form:"required,max=255,email"`
  34. Password string `json:"password" form:"required,max=255"`
  35. }
  36. // ToUser converts a LoginUserForm to models.User
  37. func (luf *LoginUserForm) ToUser(_ repository.UserRepository) (*models.User, error) {
  38. hashed, err := bcrypt.GenerateFromPassword([]byte(luf.Password), 8)
  39. if err != nil {
  40. return nil, err
  41. }
  42. return &models.User{
  43. Email: luf.Email,
  44. Password: string(hashed),
  45. }, nil
  46. }
  47. // DeleteUserForm represents the accepted values for deleting a user
  48. type DeleteUserForm struct {
  49. WriteUserForm
  50. ID uint `form:"required"`
  51. Password string `json:"password" form:"required,max=255"`
  52. }
  53. // ToUser converts a DeleteUserForm to models.User using the user ID
  54. func (uuf *DeleteUserForm) ToUser(_ repository.UserRepository) (*models.User, error) {
  55. return &models.User{
  56. Model: gorm.Model{
  57. ID: uuf.ID,
  58. },
  59. }, nil
  60. }