helpers.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package provision
  2. import (
  3. "fmt"
  4. "time"
  5. "github.com/porter-dev/porter/api/server/shared/config"
  6. "github.com/porter-dev/porter/internal/kubernetes/provisioner"
  7. "github.com/porter-dev/porter/internal/models"
  8. "github.com/porter-dev/porter/internal/random"
  9. "golang.org/x/crypto/bcrypt"
  10. )
  11. func CreateCEToken(conf *config.Config, infra *models.Infra) (*models.CredentialsExchangeToken, string, error) {
  12. // convert the form to a project model
  13. expiry := time.Now().Add(6 * time.Hour)
  14. rawToken, err := random.StringWithCharset(32, "")
  15. if err != nil {
  16. return nil, "", err
  17. }
  18. hashedToken, err := bcrypt.GenerateFromPassword([]byte(rawToken), 8)
  19. if err != nil {
  20. return nil, "", err
  21. }
  22. ceToken := &models.CredentialsExchangeToken{
  23. ProjectID: infra.ProjectID,
  24. Expiry: &expiry,
  25. Token: hashedToken,
  26. DOCredentialID: infra.DOIntegrationID,
  27. AWSCredentialID: infra.AWSIntegrationID,
  28. GCPCredentialID: infra.GCPIntegrationID,
  29. }
  30. // handle write to the database
  31. ceToken, err = conf.Repo.CredentialsExchangeToken().CreateCredentialsExchangeToken(ceToken)
  32. if err != nil {
  33. return nil, "", err
  34. }
  35. return ceToken, rawToken, nil
  36. }
  37. func GetSharedProvisionerOpts(conf *config.Config, infra *models.Infra) (*provisioner.ProvisionOpts, error) {
  38. ceToken, rawToken, err := CreateCEToken(conf, infra)
  39. if err != nil {
  40. return nil, err
  41. }
  42. return &provisioner.ProvisionOpts{
  43. DryRun: true,
  44. Infra: infra,
  45. ProvImageTag: conf.ServerConf.ProvisionerImageTag,
  46. ProvJobNamespace: conf.ServerConf.ProvisionerJobNamespace,
  47. ProvImagePullSecret: conf.ServerConf.ProvisionerImagePullSecret,
  48. TFHTTPBackendURL: conf.ServerConf.ProvisionerBackendURL,
  49. CredentialExchange: &provisioner.ProvisionCredentialExchange{
  50. CredExchangeEndpoint: fmt.Sprintf("%s/api/internal/credentials", conf.ServerConf.ProvisionerCredExchangeURL),
  51. CredExchangeToken: rawToken,
  52. CredExchangeID: ceToken.ID,
  53. },
  54. }, nil
  55. }