| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- package shared
- import (
- "fmt"
- "net/http"
- "github.com/porter-dev/porter/api/server/shared/apierrors"
- "github.com/porter-dev/porter/api/server/shared/config"
- "github.com/porter-dev/porter/api/server/shared/requestutils"
- )
- type RequestDecoderValidator interface {
- DecodeAndValidate(w http.ResponseWriter, r *http.Request, v interface{}) bool
- DecodeAndValidateNoWrite(r *http.Request, v interface{}) error
- }
- type DefaultRequestDecoderValidator struct {
- config *config.Config
- validator requestutils.Validator
- decoder requestutils.Decoder
- }
- func NewDefaultRequestDecoderValidator(
- conf *config.Config,
- ) RequestDecoderValidator {
- validator := requestutils.NewDefaultValidator()
- decoder := requestutils.NewDefaultDecoder()
- return &DefaultRequestDecoderValidator{conf, validator, decoder}
- }
- func (j *DefaultRequestDecoderValidator) DecodeAndValidate(
- w http.ResponseWriter,
- r *http.Request,
- v interface{},
- ) (ok bool) {
- var requestErr apierrors.RequestError
- // decode the request parameters (body and query)
- if requestErr = j.decoder.Decode(v, r); requestErr != nil {
- apierrors.HandleAPIError(j.config, w, r, requestErr, true)
- return false
- }
- // validate the request object
- if requestErr = j.validator.Validate(v); requestErr != nil {
- apierrors.HandleAPIError(j.config, w, r, requestErr, true)
- return false
- }
- return true
- }
- func (j *DefaultRequestDecoderValidator) DecodeAndValidateNoWrite(
- r *http.Request,
- v interface{},
- ) error {
- var requestErr apierrors.RequestError
- // decode the request parameters (body and query)
- if requestErr = j.decoder.Decode(v, r); requestErr != nil {
- return fmt.Errorf(requestErr.InternalError())
- }
- // validate the request object
- if requestErr = j.validator.Validate(v); requestErr != nil {
- return fmt.Errorf(requestErr.InternalError())
- }
- return nil
- }
|