helpers.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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. ProvisionerTest: conf.ServerConf.ProvisionerTest,
  50. CredentialExchange: &provisioner.ProvisionCredentialExchange{
  51. CredExchangeEndpoint: fmt.Sprintf("%s/api/internal/credentials", conf.ServerConf.ProvisionerCredExchangeURL),
  52. CredExchangeToken: rawToken,
  53. CredExchangeID: ceToken.ID,
  54. },
  55. }, nil
  56. }