forked from loafle/openapi-generator-original
[Go-Server] Use ParseQuery For Parsing Query Parameters (#17585)
* Uses ParseQuery to check for malform paramater value pairs. Runs ./mvnw clean package, ./bin/generate-samples.sh ./bin/configs/*.yaml, and ./bin/utils/export_docs_generators.sh. * Adds missing import * Only import url if hasQueryParams. * Adds helper function to wrap url.ParseQuery. * Fixes function return signature
This commit is contained in:
parent
6518932ccf
commit
af71460c86
@ -98,7 +98,11 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re
|
||||
{{/mux}}
|
||||
{{/routers}}
|
||||
{{#hasQueryParams}}
|
||||
query := r.URL.Query()
|
||||
query, err := parseQuery(r.URL.RawQuery)
|
||||
if err != nil {
|
||||
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
|
||||
return
|
||||
}
|
||||
{{/hasQueryParams}}
|
||||
{{#allParams}}
|
||||
{{#isPathParam}}
|
||||
|
@ -23,6 +23,7 @@ import (
|
||||
"io"
|
||||
"mime/multipart"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
@ -370,3 +371,9 @@ func parseNumericArrayParameter[T Number](param, delim string, required bool, fn
|
||||
|
||||
return values, nil
|
||||
}
|
||||
|
||||
|
||||
// parseQuery parses query paramaters and returns an error if any malformed value pairs are encountered.
|
||||
func parseQuery(rawQuery string) (url.Values, error) {
|
||||
return url.ParseQuery(rawQuery)
|
||||
}
|
@ -144,7 +144,11 @@ func (c *PetAPIController) DeletePet(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
// FindPetsByStatus - Finds Pets by status
|
||||
func (c *PetAPIController) FindPetsByStatus(w http.ResponseWriter, r *http.Request) {
|
||||
query := r.URL.Query()
|
||||
query, err := parseQuery(r.URL.RawQuery)
|
||||
if err != nil {
|
||||
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
|
||||
return
|
||||
}
|
||||
var statusParam []string
|
||||
if query.Has("status") {
|
||||
statusParam = strings.Split(query.Get("status"), ",")
|
||||
@ -162,7 +166,11 @@ func (c *PetAPIController) FindPetsByStatus(w http.ResponseWriter, r *http.Reque
|
||||
// FindPetsByTags - Finds Pets by tags
|
||||
// Deprecated
|
||||
func (c *PetAPIController) FindPetsByTags(w http.ResponseWriter, r *http.Request) {
|
||||
query := r.URL.Query()
|
||||
query, err := parseQuery(r.URL.RawQuery)
|
||||
if err != nil {
|
||||
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
|
||||
return
|
||||
}
|
||||
var tagsParam []string
|
||||
if query.Has("tags") {
|
||||
tagsParam = strings.Split(query.Get("tags"), ",")
|
||||
|
@ -172,7 +172,11 @@ func (c *UserAPIController) CreateUsersWithListInput(w http.ResponseWriter, r *h
|
||||
|
||||
// DeleteUser - Delete user
|
||||
func (c *UserAPIController) DeleteUser(w http.ResponseWriter, r *http.Request) {
|
||||
query := r.URL.Query()
|
||||
query, err := parseQuery(r.URL.RawQuery)
|
||||
if err != nil {
|
||||
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
|
||||
return
|
||||
}
|
||||
usernameParam := chi.URLParam(r, "username")
|
||||
if usernameParam == "" {
|
||||
c.errorHandler(w, r, &RequiredError{"username"}, nil)
|
||||
@ -221,7 +225,11 @@ func (c *UserAPIController) GetUserByName(w http.ResponseWriter, r *http.Request
|
||||
|
||||
// LoginUser - Logs user into the system
|
||||
func (c *UserAPIController) LoginUser(w http.ResponseWriter, r *http.Request) {
|
||||
query := r.URL.Query()
|
||||
query, err := parseQuery(r.URL.RawQuery)
|
||||
if err != nil {
|
||||
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
|
||||
return
|
||||
}
|
||||
var usernameParam string
|
||||
if query.Has("username") {
|
||||
param := query.Get("username")
|
||||
|
@ -18,6 +18,7 @@ import (
|
||||
"io"
|
||||
"mime/multipart"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
@ -337,3 +338,9 @@ func parseNumericArrayParameter[T Number](param, delim string, required bool, fn
|
||||
|
||||
return values, nil
|
||||
}
|
||||
|
||||
|
||||
// parseQuery parses query paramaters and returns an error if any malformed value pairs are encountered.
|
||||
func parseQuery(rawQuery string) (url.Values, error) {
|
||||
return url.ParseQuery(rawQuery)
|
||||
}
|
@ -177,7 +177,11 @@ func (c *PetAPIController) DeletePet(w http.ResponseWriter, r *http.Request) {
|
||||
// FilterPetsByCategory - Finds Pets
|
||||
func (c *PetAPIController) FilterPetsByCategory(w http.ResponseWriter, r *http.Request) {
|
||||
params := mux.Vars(r)
|
||||
query := r.URL.Query()
|
||||
query, err := parseQuery(r.URL.RawQuery)
|
||||
if err != nil {
|
||||
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
|
||||
return
|
||||
}
|
||||
genderParam, err := NewGenderFromValue(params["gender"])
|
||||
if err != nil {
|
||||
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
|
||||
@ -218,7 +222,11 @@ func (c *PetAPIController) FilterPetsByCategory(w http.ResponseWriter, r *http.R
|
||||
// FindPetsByStatus - Finds Pets by status
|
||||
func (c *PetAPIController) FindPetsByStatus(w http.ResponseWriter, r *http.Request) {
|
||||
params := mux.Vars(r)
|
||||
query := r.URL.Query()
|
||||
query, err := parseQuery(r.URL.RawQuery)
|
||||
if err != nil {
|
||||
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
|
||||
return
|
||||
}
|
||||
var statusParam []string
|
||||
if query.Has("status") {
|
||||
statusParam = strings.Split(query.Get("status"), ",")
|
||||
@ -248,7 +256,11 @@ func (c *PetAPIController) FindPetsByStatus(w http.ResponseWriter, r *http.Reque
|
||||
// FindPetsByTags - Finds Pets by tags
|
||||
// Deprecated
|
||||
func (c *PetAPIController) FindPetsByTags(w http.ResponseWriter, r *http.Request) {
|
||||
query := r.URL.Query()
|
||||
query, err := parseQuery(r.URL.RawQuery)
|
||||
if err != nil {
|
||||
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
|
||||
return
|
||||
}
|
||||
var tagsParam []string
|
||||
if query.Has("tags") {
|
||||
tagsParam = strings.Split(query.Get("tags"), ",")
|
||||
@ -356,7 +368,11 @@ func (c *PetAPIController) GetPetsByTime(w http.ResponseWriter, r *http.Request)
|
||||
|
||||
// GetPetsUsingBooleanQueryParameters - Get the pets by only using boolean query parameters
|
||||
func (c *PetAPIController) GetPetsUsingBooleanQueryParameters(w http.ResponseWriter, r *http.Request) {
|
||||
query := r.URL.Query()
|
||||
query, err := parseQuery(r.URL.RawQuery)
|
||||
if err != nil {
|
||||
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
|
||||
return
|
||||
}
|
||||
var exprParam bool
|
||||
if query.Has("expr") {
|
||||
param, err := parseBoolParameter(
|
||||
@ -415,7 +431,11 @@ func (c *PetAPIController) GetPetsUsingBooleanQueryParameters(w http.ResponseWri
|
||||
|
||||
// SearchPet - Search Pets by filters
|
||||
func (c *PetAPIController) SearchPet(w http.ResponseWriter, r *http.Request) {
|
||||
query := r.URL.Query()
|
||||
query, err := parseQuery(r.URL.RawQuery)
|
||||
if err != nil {
|
||||
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
|
||||
return
|
||||
}
|
||||
var ageParam *int64
|
||||
if query.Has("age") {
|
||||
param, err := parseNumericParameter[int64](
|
||||
|
@ -173,7 +173,11 @@ func (c *UserAPIController) CreateUsersWithListInput(w http.ResponseWriter, r *h
|
||||
// DeleteUser - Delete user
|
||||
func (c *UserAPIController) DeleteUser(w http.ResponseWriter, r *http.Request) {
|
||||
params := mux.Vars(r)
|
||||
query := r.URL.Query()
|
||||
query, err := parseQuery(r.URL.RawQuery)
|
||||
if err != nil {
|
||||
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
|
||||
return
|
||||
}
|
||||
usernameParam := params["username"]
|
||||
if usernameParam == "" {
|
||||
c.errorHandler(w, r, &RequiredError{"username"}, nil)
|
||||
@ -223,7 +227,11 @@ func (c *UserAPIController) GetUserByName(w http.ResponseWriter, r *http.Request
|
||||
|
||||
// LoginUser - Logs user into the system
|
||||
func (c *UserAPIController) LoginUser(w http.ResponseWriter, r *http.Request) {
|
||||
query := r.URL.Query()
|
||||
query, err := parseQuery(r.URL.RawQuery)
|
||||
if err != nil {
|
||||
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
|
||||
return
|
||||
}
|
||||
var usernameParam string
|
||||
if query.Has("username") {
|
||||
param := query.Get("username")
|
||||
|
@ -17,6 +17,7 @@ import (
|
||||
"io"
|
||||
"mime/multipart"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
@ -341,3 +342,9 @@ func parseNumericArrayParameter[T Number](param, delim string, required bool, fn
|
||||
|
||||
return values, nil
|
||||
}
|
||||
|
||||
|
||||
// parseQuery parses query paramaters and returns an error if any malformed value pairs are encountered.
|
||||
func parseQuery(rawQuery string) (url.Values, error) {
|
||||
return url.ParseQuery(rawQuery)
|
||||
}
|
@ -175,7 +175,11 @@ func (c *PetAPIController) DeletePet(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
// FilterPetsByCategory - Finds Pets
|
||||
func (c *PetAPIController) FilterPetsByCategory(w http.ResponseWriter, r *http.Request) {
|
||||
query := r.URL.Query()
|
||||
query, err := parseQuery(r.URL.RawQuery)
|
||||
if err != nil {
|
||||
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
|
||||
return
|
||||
}
|
||||
genderParam, err := NewGenderFromValue(chi.URLParam(r, "gender"))
|
||||
if err != nil {
|
||||
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
|
||||
@ -215,7 +219,11 @@ func (c *PetAPIController) FilterPetsByCategory(w http.ResponseWriter, r *http.R
|
||||
|
||||
// FindPetsByStatus - Finds Pets by status
|
||||
func (c *PetAPIController) FindPetsByStatus(w http.ResponseWriter, r *http.Request) {
|
||||
query := r.URL.Query()
|
||||
query, err := parseQuery(r.URL.RawQuery)
|
||||
if err != nil {
|
||||
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
|
||||
return
|
||||
}
|
||||
var statusParam []string
|
||||
if query.Has("status") {
|
||||
statusParam = strings.Split(query.Get("status"), ",")
|
||||
@ -245,7 +253,11 @@ func (c *PetAPIController) FindPetsByStatus(w http.ResponseWriter, r *http.Reque
|
||||
// FindPetsByTags - Finds Pets by tags
|
||||
// Deprecated
|
||||
func (c *PetAPIController) FindPetsByTags(w http.ResponseWriter, r *http.Request) {
|
||||
query := r.URL.Query()
|
||||
query, err := parseQuery(r.URL.RawQuery)
|
||||
if err != nil {
|
||||
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
|
||||
return
|
||||
}
|
||||
var tagsParam []string
|
||||
if query.Has("tags") {
|
||||
tagsParam = strings.Split(query.Get("tags"), ",")
|
||||
@ -350,7 +362,11 @@ func (c *PetAPIController) GetPetsByTime(w http.ResponseWriter, r *http.Request)
|
||||
|
||||
// GetPetsUsingBooleanQueryParameters - Get the pets by only using boolean query parameters
|
||||
func (c *PetAPIController) GetPetsUsingBooleanQueryParameters(w http.ResponseWriter, r *http.Request) {
|
||||
query := r.URL.Query()
|
||||
query, err := parseQuery(r.URL.RawQuery)
|
||||
if err != nil {
|
||||
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
|
||||
return
|
||||
}
|
||||
var exprParam bool
|
||||
if query.Has("expr") {
|
||||
param, err := parseBoolParameter(
|
||||
@ -409,7 +425,11 @@ func (c *PetAPIController) GetPetsUsingBooleanQueryParameters(w http.ResponseWri
|
||||
|
||||
// SearchPet - Search Pets by filters
|
||||
func (c *PetAPIController) SearchPet(w http.ResponseWriter, r *http.Request) {
|
||||
query := r.URL.Query()
|
||||
query, err := parseQuery(r.URL.RawQuery)
|
||||
if err != nil {
|
||||
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
|
||||
return
|
||||
}
|
||||
var ageParam *int64
|
||||
if query.Has("age") {
|
||||
param, err := parseNumericParameter[int64](
|
||||
|
@ -172,7 +172,11 @@ func (c *UserAPIController) CreateUsersWithListInput(w http.ResponseWriter, r *h
|
||||
|
||||
// DeleteUser - Delete user
|
||||
func (c *UserAPIController) DeleteUser(w http.ResponseWriter, r *http.Request) {
|
||||
query := r.URL.Query()
|
||||
query, err := parseQuery(r.URL.RawQuery)
|
||||
if err != nil {
|
||||
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
|
||||
return
|
||||
}
|
||||
usernameParam := chi.URLParam(r, "username")
|
||||
if usernameParam == "" {
|
||||
c.errorHandler(w, r, &RequiredError{"username"}, nil)
|
||||
@ -221,7 +225,11 @@ func (c *UserAPIController) GetUserByName(w http.ResponseWriter, r *http.Request
|
||||
|
||||
// LoginUser - Logs user into the system
|
||||
func (c *UserAPIController) LoginUser(w http.ResponseWriter, r *http.Request) {
|
||||
query := r.URL.Query()
|
||||
query, err := parseQuery(r.URL.RawQuery)
|
||||
if err != nil {
|
||||
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
|
||||
return
|
||||
}
|
||||
var usernameParam string
|
||||
if query.Has("username") {
|
||||
param := query.Get("username")
|
||||
|
@ -18,6 +18,7 @@ import (
|
||||
"io"
|
||||
"mime/multipart"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
@ -337,3 +338,9 @@ func parseNumericArrayParameter[T Number](param, delim string, required bool, fn
|
||||
|
||||
return values, nil
|
||||
}
|
||||
|
||||
|
||||
// parseQuery parses query paramaters and returns an error if any malformed value pairs are encountered.
|
||||
func parseQuery(rawQuery string) (url.Values, error) {
|
||||
return url.ParseQuery(rawQuery)
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user