user.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package forms
  2. import (
  3. "github.com/porter-dev/porter/internal/kubernetes"
  4. "github.com/porter-dev/porter/internal/models"
  5. "gorm.io/gorm"
  6. )
  7. // WriteUserForm is a generic form for write operations to the User model
  8. type WriteUserForm interface {
  9. ToUser() (*models.User, error)
  10. }
  11. // CreateUserForm represents the accepted values for creating a user
  12. type CreateUserForm struct {
  13. WriteUserForm
  14. Email string `json:"email" form:"required,max=255,email"`
  15. Password string `json:"password" form:"required,max=255"`
  16. }
  17. // ToUser converts a CreateUserForm to models.User
  18. //
  19. // TODO -- PASSWORD HASHING HERE
  20. func (cuf *CreateUserForm) ToUser() (*models.User, error) {
  21. return &models.User{
  22. Email: cuf.Email,
  23. Password: cuf.Password,
  24. }, nil
  25. }
  26. // UpdateUserForm represents the accepted values for updating a user
  27. //
  28. // ID is a query parameter, the other two are sent in JSON body
  29. type UpdateUserForm struct {
  30. WriteUserForm
  31. ID uint `form:"required"`
  32. RawKubeConfig string `json:"rawKubeConfig" form:"required"`
  33. AllowedClusters []string `json:"allowedClusters" form:"required"`
  34. }
  35. // ToUser converts an UpdateUserForm to models.User by parsing the kubeconfig
  36. // and the allowed clusters to generate a list of ClusterConfigs.
  37. func (uuf *UpdateUserForm) ToUser() (*models.User, error) {
  38. rawBytes := []byte(uuf.RawKubeConfig)
  39. clusters, err := kubernetes.GetAllowedClusterConfigsFromBytes(rawBytes, uuf.AllowedClusters)
  40. if err != nil {
  41. return nil, err
  42. }
  43. return &models.User{
  44. Model: gorm.Model{
  45. ID: uuf.ID,
  46. },
  47. Clusters: clusters,
  48. RawKubeConfig: rawBytes,
  49. }, nil
  50. }
  51. // DeleteUserForm represents the accepted values for deleting a user
  52. type DeleteUserForm struct {
  53. WriteUserForm
  54. ID uint `form:"required"`
  55. Password string `json:"password" form:"required,max=255"`
  56. }
  57. // ToUser converts a DeleteUserForm to models.User using the user ID
  58. func (uuf *DeleteUserForm) ToUser() (*models.User, error) {
  59. return &models.User{
  60. Model: gorm.Model{
  61. ID: uuf.ID,
  62. },
  63. }, nil
  64. }