user.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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. "gopkg.in/yaml.v2"
  7. "gorm.io/gorm"
  8. )
  9. // WriteUserForm is a generic form for write operations to the User model
  10. type WriteUserForm interface {
  11. ToUser() (*models.User, error)
  12. }
  13. // CreateUserForm represents the accepted values for creating a user
  14. type CreateUserForm struct {
  15. WriteUserForm
  16. Email string `json:"email" form:"required,max=255,email"`
  17. Password string `json:"password" form:"required,max=255"`
  18. }
  19. // ToUser converts a CreateUserForm to models.User
  20. func (cuf *CreateUserForm) ToUser() (*models.User, error) {
  21. hashed, err := bcrypt.GenerateFromPassword([]byte(cuf.Password), 8)
  22. if err != nil {
  23. return nil, err
  24. }
  25. return &models.User{
  26. Email: cuf.Email,
  27. Password: string(hashed),
  28. }, nil
  29. }
  30. // UpdateUserForm represents the accepted values for updating a user
  31. //
  32. // ID is a query parameter, the other two are sent in JSON body
  33. type UpdateUserForm struct {
  34. WriteUserForm
  35. ID uint `form:"required"`
  36. RawKubeConfig string `json:"rawKubeConfig" form:"required"`
  37. AllowedClusters []string `json:"allowedClusters" form:"required"`
  38. }
  39. // ToUser converts an UpdateUserForm to models.User by parsing the kubeconfig
  40. // and the allowed clusters to generate a list of ClusterConfigs.
  41. func (uuf *UpdateUserForm) ToUser() (*models.User, error) {
  42. conf := kubernetes.KubeConfig{}
  43. rawBytes := []byte(uuf.RawKubeConfig)
  44. err := yaml.Unmarshal(rawBytes, &conf)
  45. if err != nil {
  46. return nil, err
  47. }
  48. clusters := conf.ToClusterConfigs(uuf.AllowedClusters)
  49. return &models.User{
  50. Model: gorm.Model{
  51. ID: uuf.ID,
  52. },
  53. Clusters: clusters,
  54. RawKubeConfig: rawBytes,
  55. }, nil
  56. }
  57. // DeleteUserForm represents the accepted values for deleting a user
  58. type DeleteUserForm struct {
  59. WriteUserForm
  60. ID uint `form:"required"`
  61. Password string `json:"password" form:"required,max=255"`
  62. }
  63. // ToUser converts a DeleteUserForm to models.User using the user ID
  64. func (uuf *DeleteUserForm) ToUser() (*models.User, error) {
  65. return &models.User{
  66. Model: gorm.Model{
  67. ID: uuf.ID,
  68. },
  69. }, nil
  70. }