create.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package registry
  2. import (
  3. "net/http"
  4. "github.com/porter-dev/porter/api/server/handlers"
  5. "github.com/porter-dev/porter/api/server/shared"
  6. "github.com/porter-dev/porter/api/server/shared/apierrors"
  7. "github.com/porter-dev/porter/api/server/shared/config"
  8. "github.com/porter-dev/porter/api/types"
  9. "github.com/porter-dev/porter/internal/models"
  10. "github.com/porter-dev/porter/internal/registry"
  11. )
  12. type RegistryCreateHandler struct {
  13. handlers.PorterHandlerReadWriter
  14. }
  15. func NewRegistryCreateHandler(
  16. config *config.Config,
  17. decoderValidator shared.RequestDecoderValidator,
  18. writer shared.ResultWriter,
  19. ) *RegistryCreateHandler {
  20. return &RegistryCreateHandler{
  21. PorterHandlerReadWriter: handlers.NewDefaultPorterHandler(config, decoderValidator, writer),
  22. }
  23. }
  24. func (p *RegistryCreateHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
  25. proj, _ := r.Context().Value(types.ProjectScope).(*models.Project)
  26. request := &types.CreateRegistryRequest{}
  27. ok := p.DecodeAndValidate(w, r, request)
  28. if !ok {
  29. return
  30. }
  31. // create a registry model
  32. regModel := &models.Registry{
  33. Name: request.Name,
  34. ProjectID: proj.ID,
  35. URL: request.URL,
  36. GCPIntegrationID: request.GCPIntegrationID,
  37. AWSIntegrationID: request.AWSIntegrationID,
  38. DOIntegrationID: request.DOIntegrationID,
  39. BasicIntegrationID: request.BasicIntegrationID,
  40. }
  41. if regModel.URL == "" && regModel.AWSIntegrationID != 0 {
  42. url, err := registry.GetECRRegistryURL(p.Repo().AWSIntegration(), regModel.ProjectID, regModel.AWSIntegrationID)
  43. if err != nil {
  44. p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
  45. return
  46. }
  47. regModel.URL = url
  48. }
  49. // handle write to the database
  50. regModel, err := p.Repo().Registry().CreateRegistry(regModel)
  51. if err != nil {
  52. p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
  53. return
  54. }
  55. p.WriteResult(w, r, regModel.ToRegistryType())
  56. }