user.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package forms
  2. import (
  3. "github.com/porter-dev/porter/internal/kubernetes"
  4. "github.com/porter-dev/porter/internal/models"
  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() (*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() (*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() (*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. // UpdateUserForm represents the accepted values for updating a user
  48. //
  49. // ID is a query parameter, the other two are sent in JSON body
  50. type UpdateUserForm struct {
  51. WriteUserForm
  52. ID uint `form:"required"`
  53. RawKubeConfig string `json:"rawKubeConfig" form:"required"`
  54. AllowedClusters []string `json:"allowedClusters,omitempty"`
  55. }
  56. // ToUser converts an UpdateUserForm to models.User by parsing the kubeconfig
  57. // and the allowed clusters to generate a list of ClusterConfigs.
  58. func (uuf *UpdateUserForm) ToUser() (*models.User, error) {
  59. rawBytes := []byte(uuf.RawKubeConfig)
  60. clusters, err := kubernetes.GetAllowedClusterConfigsFromBytes(rawBytes, uuf.AllowedClusters)
  61. if err != nil {
  62. return nil, err
  63. }
  64. return &models.User{
  65. Model: gorm.Model{
  66. ID: uuf.ID,
  67. },
  68. Clusters: clusters,
  69. RawKubeConfig: rawBytes,
  70. }, nil
  71. }
  72. // DeleteUserForm represents the accepted values for deleting a user
  73. type DeleteUserForm struct {
  74. WriteUserForm
  75. ID uint `form:"required"`
  76. Password string `json:"password" form:"required,max=255"`
  77. }
  78. // ToUser converts a DeleteUserForm to models.User using the user ID
  79. func (uuf *DeleteUserForm) ToUser() (*models.User, error) {
  80. return &models.User{
  81. Model: gorm.Model{
  82. ID: uuf.ID,
  83. },
  84. }, nil
  85. }