handler.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package handlers
  2. import (
  3. "net/http"
  4. "github.com/porter-dev/porter/api/server/shared"
  5. "github.com/porter-dev/porter/api/server/shared/apierrors"
  6. "github.com/porter-dev/porter/internal/repository"
  7. )
  8. type PorterHandler interface {
  9. Config() *shared.Config
  10. Repo() repository.Repository
  11. HandleAPIError(w http.ResponseWriter, err apierrors.RequestError)
  12. }
  13. type PorterHandlerWriter interface {
  14. PorterHandler
  15. WriteResult(w http.ResponseWriter, v interface{})
  16. }
  17. type PorterHandlerReader interface {
  18. PorterHandler
  19. DecodeAndValidate(w http.ResponseWriter, r *http.Request, v interface{}) bool
  20. DecodeAndValidateNoWrite(r *http.Request, v interface{}) error
  21. }
  22. type PorterHandlerReadWriter interface {
  23. PorterHandlerWriter
  24. PorterHandlerReader
  25. }
  26. type DefaultPorterHandler struct {
  27. config *shared.Config
  28. decoderValidator shared.RequestDecoderValidator
  29. writer shared.ResultWriter
  30. }
  31. func NewDefaultPorterHandler(
  32. config *shared.Config,
  33. decoderValidator shared.RequestDecoderValidator,
  34. writer shared.ResultWriter,
  35. ) PorterHandlerReadWriter {
  36. return &DefaultPorterHandler{config, decoderValidator, writer}
  37. }
  38. func (d *DefaultPorterHandler) Config() *shared.Config {
  39. return d.config
  40. }
  41. func (d *DefaultPorterHandler) Repo() repository.Repository {
  42. return d.config.Repo
  43. }
  44. func (d *DefaultPorterHandler) HandleAPIError(w http.ResponseWriter, err apierrors.RequestError) {
  45. apierrors.HandleAPIError(w, d.Config().Logger, err)
  46. }
  47. func (d *DefaultPorterHandler) WriteResult(w http.ResponseWriter, v interface{}) {
  48. d.writer.WriteResult(w, v)
  49. }
  50. func (d *DefaultPorterHandler) DecodeAndValidate(w http.ResponseWriter, r *http.Request, v interface{}) bool {
  51. return d.decoderValidator.DecodeAndValidate(w, r, v)
  52. }
  53. func (d *DefaultPorterHandler) DecodeAndValidateNoWrite(r *http.Request, v interface{}) error {
  54. return d.decoderValidator.DecodeAndValidateNoWrite(r, v)
  55. }
  56. func IgnoreAPIError(w http.ResponseWriter, err apierrors.RequestError) {
  57. return
  58. }