Sha256: 6fa0044613204192306e52d8e8ce88676f4770d76e96cc3e8309ac504ed54e82
Contents?: true
Size: 1.34 KB
Versions: 3
Compression:
Stored size: 1.34 KB
Contents
package handlers import ( "encoding/json" "io/ioutil" "net/http" "reflect" log "github.com/Sirupsen/logrus" "github.com/asaskevich/govalidator" "github.com/gorilla/context" ) const kRequestValidationTag = "RequestValidation" type validationRequestKey struct{} type requestValidationDependencies struct { logger *log.Logger } type requestValidationHandler struct { deps requestValidationDependencies t reflect.Type next http.Handler } func (rv *requestValidationHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { rv.deps.logger.WithField(kRequestValidationTag, r.Method+" Called") request := reflect.New(rv.t).Interface() defer r.Body.Close() data, _ := ioutil.ReadAll(r.Body) err := json.Unmarshal(data, &request) if err != nil { rv.deps.logger.WithField(kRequestValidationTag, "Bad request") http.Error(w, "Invalid Request", http.StatusBadRequest) return } _, err = govalidator.ValidateStruct(request) if err != nil { rv.deps.logger.WithField(kRequestValidationTag, "Validation error") http.Error(w, "Invalid Request", http.StatusBadRequest) return } context.Set(r, "request", request) rv.next.ServeHTTP(w, r) } func newRequestValidationHandler(deps requestValidationDependencies, t reflect.Type, next http.Handler) http.Handler { return &requestValidationHandler{ deps: deps, t: t, next: next, } }
Version data entries
3 entries across 3 versions & 1 rubygems