user.go 2.2 KB

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