
Product
Reachability for Ruby Now in Beta
Reachability analysis for Ruby is now in beta, helping teams identify which vulnerabilities are truly exploitable in their applications.
github.com/iamolegga/gorilla-validator
Advanced tools
HTTP request validation middleware for Gorilla Mux.
It simplifies the process of validating and extracting data from various HTTP request sources, including URL parameters, query strings, form data, JSON, and XML.
go get github.com/iamolegga/gorilla-validator
Here are examples showing how to use gorilla-validator with different data sources:
// URL parameters validation example
// Define the schema for URL parameters
type Params struct {
ID int `schema:"id" validate:"required,gt=0"`
}
router.HandleFunc("/users/{id}", func(w http.ResponseWriter, r *http.Request) {
// Get validated URL parameters
params := gv.Validated[*Params](r, gv.Params)
}).Methods("GET").Use(gv.Validate(Params{}, gv.Params))
// Query parameters validation example
// Define the schema for query parameters
type Query struct {
Page int `schema:"page" validate:"omitempty,gte=1"`
Limit int `schema:"limit" validate:"omitempty,gte=1,lte=100"`
Sort string `schema:"sort" validate:"omitempty,oneof=name email date"`
}
router.HandleFunc("/users", func(w http.ResponseWriter, r *http.Request) {
// Get validated query parameters
query := gv.Validated[*Query](r, gv.Query)
}).Methods("GET").Use(gv.Validate(Query{}, gv.Query))
// JSON body validation example
// Define the schema for JSON body
// NOTE: You must set `json` tags for all fields you want to decode from JSON.
// The standard library does NOT use `schema` tags for JSON or XML decoding.
type BodyJSON struct {
Name string `json:"name" schema:"name" validate:"required,min=2"`
Email string `json:"email" schema:"email" validate:"required,email"`
Password string `json:"password" schema:"password" validate:"required,min=8"`
}
router.HandleFunc("/users", func(w http.ResponseWriter, r *http.Request) {
// Get validated JSON body
data := gv.Validated[*BodyJSON](r, gv.JSON)
}).Methods("POST").Use(gv.Validate(BodyJSON{}, gv.JSON))
// Form data validation example
// Define the schema for form data
// NOTE: For form/query/params, only the `schema` tag is needed.
type BodyForm struct {
Email string `schema:"email" validate:"required,email"`
Password string `schema:"password" validate:"required"`
Remember bool `schema:"remember"`
}
router.HandleFunc("/login", func(w http.ResponseWriter, r *http.Request) {
// Get validated form data
loginData := gv.Validated[*BodyForm](r, gv.Form)
}).Methods("POST").Use(gv.Validate(BodyForm{}, gv.Form))
// Multiple validators example
// Define schemas for URL parameters and JSON body
// NOTE: Always specify `json` or `xml` tags for JSON/XML, and `schema` for form/query/params.
type MultiParams struct {
ID int `schema:"id" validate:"required,gt=0"`
}
type MultiBody struct {
Name *string `json:"name" schema:"name" validate:"omitempty,min=2"`
Email *string `json:"email" schema:"email" validate:"omitempty,email"`
}
router.HandleFunc("/users/{id}", func(w http.ResponseWriter, r *http.Request) {
// Get validated URL parameters and JSON body
params := gv.Validated[*MultiParams](r, gv.Params)
updateData := gv.Validated[*MultiBody](r, gv.JSON)
}).Methods("PATCH").
Use(gv.Validate(MultiParams{}, gv.Params)).
Use(gv.Validate(MultiBody{}, gv.JSON))
Important:
encoding/json, encoding/xml) do not use the schema tag.json and/or xml tags for fields you want to decode from JSON or XML.schema tag is only used for form, query, and params sources.Validation rules are defined using struct tags with the go-playground/validator syntax. For a complete list of available validation rules, see: https://github.com/go-playground/validator
The library supports the following sources for validation:
gv.Params: URL parameters from Gorilla Muxgv.Query: Query string parametersgv.Form: Form data from POST requestsgv.JSON: JSON request bodygv.XML: XML request bodyBy default, the middleware will automatically respond with HTTP 400 (Bad Request)
when validation fails. This behavior can be customized by using the gv.ErrorHandler function:
gv.ErrorHandler(func(err error) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
http.Error(w, "Invalid request: "+err.Error(), http.StatusBadRequest)
}
})
FAQs
Unknown package
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Reachability analysis for Ruby is now in beta, helping teams identify which vulnerabilities are truly exploitable in their applications.

Research
/Security News
Malicious npm packages use Adspect cloaking and fake CAPTCHAs to fingerprint visitors and redirect victims to crypto-themed scam sites.

Security News
Recent coverage mislabels the latest TEA protocol spam as a worm. Here’s what’s actually happening.