user.go 2.7 KB

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