user.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package forms
  2. import (
  3. "gorm.io/gorm"
  4. "github.com/porter-dev/porter/internal/kubernetes"
  5. "github.com/porter-dev/porter/internal/models"
  6. "gopkg.in/yaml.v2"
  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. //
  20. // TODO -- PASSWORD HASHING HERE
  21. func (cuf *CreateUserForm) ToUser() (*models.User, error) {
  22. return &models.User{
  23. Email: cuf.Email,
  24. Password: cuf.Password,
  25. }, nil
  26. }
  27. // UpdateUserForm represents the accepted values for updating a user
  28. //
  29. // ID is a query parameter, the other two are sent in JSON body
  30. type UpdateUserForm struct {
  31. WriteUserForm
  32. ID uint `form:"required"`
  33. RawKubeConfig string `json:"rawKubeConfig" form:"required"`
  34. AllowedClusters []string `json:"allowedClusters" form:"required"`
  35. }
  36. // ToUser converts an UpdateUserForm to models.User by parsing the kubeconfig
  37. // and the allowed clusters to generate a list of ClusterConfigs.
  38. func (uuf *UpdateUserForm) ToUser() (*models.User, error) {
  39. conf := kubernetes.KubeConfig{}
  40. rawBytes := []byte(uuf.RawKubeConfig)
  41. err := yaml.Unmarshal(rawBytes, &conf)
  42. if err != nil {
  43. return nil, err
  44. }
  45. clusters := conf.ToClusterConfigs(uuf.AllowedClusters)
  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. }