user.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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. // UpdateUserForm represents the accepted values for updating a user
  30. //
  31. // ID is a query parameter, the other two are sent in JSON body
  32. type UpdateUserForm struct {
  33. WriteUserForm
  34. ID uint `form:"required"`
  35. RawKubeConfig string `json:"rawKubeConfig" form:"required"`
  36. AllowedClusters []string `json:"allowedClusters" form:"required"`
  37. }
  38. // ToUser converts an UpdateUserForm to models.User by parsing the kubeconfig
  39. // and the allowed clusters to generate a list of ClusterConfigs.
  40. func (uuf *UpdateUserForm) ToUser() (*models.User, error) {
  41. rawBytes := []byte(uuf.RawKubeConfig)
  42. clusters, err := kubernetes.GetAllowedClusterConfigsFromBytes(rawBytes, uuf.AllowedClusters)
  43. if err != nil {
  44. return nil, err
  45. }
  46. return &models.User{
  47. Model: gorm.Model{
  48. ID: uuf.ID,
  49. },
  50. Clusters: clusters,
  51. RawKubeConfig: rawBytes,
  52. }, nil
  53. }
  54. // DeleteUserForm represents the accepted values for deleting a user
  55. type DeleteUserForm struct {
  56. WriteUserForm
  57. ID uint `form:"required"`
  58. Password string `json:"password" form:"required,max=255"`
  59. }
  60. // ToUser converts a DeleteUserForm to models.User using the user ID
  61. func (uuf *DeleteUserForm) ToUser() (*models.User, error) {
  62. return &models.User{
  63. Model: gorm.Model{
  64. ID: uuf.ID,
  65. },
  66. }, nil
  67. }