Files
hatchet/pkg/integrations/shared/webhookutils/decoder_validator.go
abelanger5 7c3ddfca32 feat: api server extensions (#614)
* feat: allow extending the api server

* chore: remove internal packages to pkg

* chore: update db_gen.go

* fix: expose auth

* fix: move logger to pkg

* fix: don't generate gitignore for prisma client

* fix: allow extensions to register their own api spec

* feat: expose pool on server config

* fix: nil pointer exception on empty opts

* fix: run.go file
2024-06-19 09:36:13 -04:00

98 lines
2.4 KiB
Go

package webhookutils
import (
"fmt"
"net/http"
"github.com/rs/zerolog"
"github.com/hatchet-dev/hatchet/pkg/errors"
"github.com/hatchet-dev/hatchet/pkg/validator"
)
type RequestDecoderValidator interface {
DecodeAndValidate(w http.ResponseWriter, r *http.Request, v interface{}) bool
DecodeAndValidateQueryOnly(w http.ResponseWriter, r *http.Request, v interface{}) bool
DecodeAndValidateNoWrite(r *http.Request, v interface{}) error
}
type DefaultRequestDecoderValidator struct {
logger *zerolog.Logger
alerter errors.Alerter
validator validator.Validator
decoder Decoder
}
func NewDefaultRequestDecoderValidator(
logger *zerolog.Logger,
alerter errors.Alerter,
) RequestDecoderValidator {
validator := validator.NewDefaultValidator()
decoder := NewDefaultDecoder()
return &DefaultRequestDecoderValidator{logger, alerter, validator, decoder}
}
func (j *DefaultRequestDecoderValidator) DecodeAndValidate(
w http.ResponseWriter,
r *http.Request,
v interface{},
) (ok bool) {
var requestErr error
// decode the request parameters (body and query)
if requestErr = j.decoder.Decode(v, r); requestErr != nil {
HandleAPIError(j.logger, j.alerter, w, r, requestErr, true)
return false
}
// validate the request object
if requestErr = j.validator.Validate(v); requestErr != nil {
HandleAPIError(j.logger, j.alerter, w, r, requestErr, true)
return false
}
return true
}
func (j *DefaultRequestDecoderValidator) DecodeAndValidateQueryOnly(
w http.ResponseWriter,
r *http.Request,
v interface{},
) (ok bool) {
var requestErr error
// decode the request parameters (body and query)
if requestErr = j.decoder.DecodeQueryOnly(v, r); requestErr != nil {
HandleAPIError(j.logger, j.alerter, w, r, requestErr, true)
return false
}
// validate the request object
if requestErr = j.validator.Validate(v); requestErr != nil {
HandleAPIError(j.logger, j.alerter, w, r, requestErr, true)
return false
}
return true
}
func (j *DefaultRequestDecoderValidator) DecodeAndValidateNoWrite(
r *http.Request,
v interface{},
) error {
var requestErr error
// decode the request parameters (body and query)
if requestErr = j.decoder.Decode(v, r); requestErr != nil {
return fmt.Errorf(requestErr.Error())
}
// validate the request object
if requestErr = j.validator.Validate(v); requestErr != nil {
return fmt.Errorf(requestErr.Error())
}
return nil
}