list_aws.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package project_integration
  2. import (
  3. "fmt"
  4. "net/http"
  5. "github.com/porter-dev/porter/api/server/handlers"
  6. "github.com/porter-dev/porter/api/server/shared"
  7. "github.com/porter-dev/porter/api/server/shared/apierrors"
  8. "github.com/porter-dev/porter/api/server/shared/config"
  9. "github.com/porter-dev/porter/api/types"
  10. "github.com/porter-dev/porter/internal/models"
  11. )
  12. type ListAWSHandler struct {
  13. handlers.PorterHandlerWriter
  14. }
  15. func NewListAWSHandler(
  16. config *config.Config,
  17. writer shared.ResultWriter,
  18. ) *ListAWSHandler {
  19. return &ListAWSHandler{
  20. PorterHandlerWriter: handlers.NewDefaultPorterHandler(config, nil, writer),
  21. }
  22. }
  23. // ListAWSAssumeRoleLink summarises the responses for AWS assume role chain links.
  24. // This is only intended for CAPI projects
  25. type ListAWSAssumeRoleLink struct {
  26. // ID is the ID of the assume role chain in the db. UUID as a string
  27. ID string `json:"id"`
  28. // ARN is the target ARN in an AWS assume role chain
  29. ARN string `json:"aws_arn"`
  30. // ProjectID is the projec that this link belongs to
  31. ProjectID int `json:"project_id"`
  32. }
  33. func (p *ListAWSHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
  34. ctx := r.Context()
  35. project, _ := ctx.Value(types.ProjectScope).(*models.Project)
  36. if project.GetFeatureFlag(models.CapiProvisionerEnabled, p.Config().LaunchDarklyClient) {
  37. dblinks, err := p.Repo().AWSAssumeRoleChainer().List(ctx, project.ID)
  38. if err != nil {
  39. e := fmt.Errorf("unable to find assume role chain links: %w", err)
  40. p.HandleAPIError(w, r, apierrors.NewErrInternal(e))
  41. return
  42. }
  43. var links []ListAWSAssumeRoleLink
  44. for _, link := range dblinks {
  45. links = append(links, ListAWSAssumeRoleLink{
  46. ID: link.ID.String(),
  47. ARN: link.TargetARN,
  48. ProjectID: link.ProjectID,
  49. })
  50. }
  51. p.WriteResult(w, r, links)
  52. w.WriteHeader(http.StatusOK)
  53. return
  54. }
  55. awsInts, err := p.Repo().AWSIntegration().ListAWSIntegrationsByProjectID(project.ID)
  56. if err != nil {
  57. p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
  58. return
  59. }
  60. var res types.ListAWSResponse = make([]*types.AWSIntegration, 0)
  61. for _, awsInt := range awsInts {
  62. res = append(res, awsInt.ToAWSIntegrationType())
  63. }
  64. p.WriteResult(w, r, res)
  65. }