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}}
|
{{/mux}}
|
||||||
{{/routers}}
|
{{/routers}}
|
||||||
{{#hasQueryParams}}
|
{{#hasQueryParams}}
|
||||||
query := r.URL.Query()
|
query, err := parseQuery(r.URL.RawQuery)
|
||||||
|
if err != nil {
|
||||||
|
c.errorHandler(w, r, &ParsingError{Err: err}, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
{{/hasQueryParams}}
|
{{/hasQueryParams}}
|
||||||
{{#allParams}}
|
{{#allParams}}
|
||||||
{{#isPathParam}}
|
{{#isPathParam}}
|
||||||
|
@ -23,6 +23,7 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"mime/multipart"
|
"mime/multipart"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
@ -370,3 +371,9 @@ func parseNumericArrayParameter[T Number](param, delim string, required bool, fn
|
|||||||
|
|
||||||
return values, nil
|
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
|
// FindPetsByStatus - Finds Pets by status
|
||||||
func (c *PetAPIController) FindPetsByStatus(w http.ResponseWriter, r *http.Request) {
|
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
|
var statusParam []string
|
||||||
if query.Has("status") {
|
if query.Has("status") {
|
||||||
statusParam = strings.Split(query.Get("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
|
// FindPetsByTags - Finds Pets by tags
|
||||||
// Deprecated
|
// Deprecated
|
||||||
func (c *PetAPIController) FindPetsByTags(w http.ResponseWriter, r *http.Request) {
|
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
|
var tagsParam []string
|
||||||
if query.Has("tags") {
|
if query.Has("tags") {
|
||||||
tagsParam = strings.Split(query.Get("tags"), ",")
|
tagsParam = strings.Split(query.Get("tags"), ",")
|
||||||
|
@ -172,7 +172,11 @@ func (c *UserAPIController) CreateUsersWithListInput(w http.ResponseWriter, r *h
|
|||||||
|
|
||||||
// DeleteUser - Delete user
|
// DeleteUser - Delete user
|
||||||
func (c *UserAPIController) DeleteUser(w http.ResponseWriter, r *http.Request) {
|
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")
|
usernameParam := chi.URLParam(r, "username")
|
||||||
if usernameParam == "" {
|
if usernameParam == "" {
|
||||||
c.errorHandler(w, r, &RequiredError{"username"}, nil)
|
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
|
// LoginUser - Logs user into the system
|
||||||
func (c *UserAPIController) LoginUser(w http.ResponseWriter, r *http.Request) {
|
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
|
var usernameParam string
|
||||||
if query.Has("username") {
|
if query.Has("username") {
|
||||||
param := query.Get("username")
|
param := query.Get("username")
|
||||||
|
@ -18,6 +18,7 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"mime/multipart"
|
"mime/multipart"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
@ -337,3 +338,9 @@ func parseNumericArrayParameter[T Number](param, delim string, required bool, fn
|
|||||||
|
|
||||||
return values, nil
|
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
|
// FilterPetsByCategory - Finds Pets
|
||||||
func (c *PetAPIController) FilterPetsByCategory(w http.ResponseWriter, r *http.Request) {
|
func (c *PetAPIController) FilterPetsByCategory(w http.ResponseWriter, r *http.Request) {
|
||||||
params := mux.Vars(r)
|
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"])
|
genderParam, err := NewGenderFromValue(params["gender"])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.errorHandler(w, r, &ParsingError{Err: 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
|
// FindPetsByStatus - Finds Pets by status
|
||||||
func (c *PetAPIController) FindPetsByStatus(w http.ResponseWriter, r *http.Request) {
|
func (c *PetAPIController) FindPetsByStatus(w http.ResponseWriter, r *http.Request) {
|
||||||
params := mux.Vars(r)
|
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
|
var statusParam []string
|
||||||
if query.Has("status") {
|
if query.Has("status") {
|
||||||
statusParam = strings.Split(query.Get("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
|
// FindPetsByTags - Finds Pets by tags
|
||||||
// Deprecated
|
// Deprecated
|
||||||
func (c *PetAPIController) FindPetsByTags(w http.ResponseWriter, r *http.Request) {
|
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
|
var tagsParam []string
|
||||||
if query.Has("tags") {
|
if query.Has("tags") {
|
||||||
tagsParam = strings.Split(query.Get("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
|
// GetPetsUsingBooleanQueryParameters - Get the pets by only using boolean query parameters
|
||||||
func (c *PetAPIController) GetPetsUsingBooleanQueryParameters(w http.ResponseWriter, r *http.Request) {
|
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
|
var exprParam bool
|
||||||
if query.Has("expr") {
|
if query.Has("expr") {
|
||||||
param, err := parseBoolParameter(
|
param, err := parseBoolParameter(
|
||||||
@ -415,7 +431,11 @@ func (c *PetAPIController) GetPetsUsingBooleanQueryParameters(w http.ResponseWri
|
|||||||
|
|
||||||
// SearchPet - Search Pets by filters
|
// SearchPet - Search Pets by filters
|
||||||
func (c *PetAPIController) SearchPet(w http.ResponseWriter, r *http.Request) {
|
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
|
var ageParam *int64
|
||||||
if query.Has("age") {
|
if query.Has("age") {
|
||||||
param, err := parseNumericParameter[int64](
|
param, err := parseNumericParameter[int64](
|
||||||
|
@ -173,7 +173,11 @@ func (c *UserAPIController) CreateUsersWithListInput(w http.ResponseWriter, r *h
|
|||||||
// DeleteUser - Delete user
|
// DeleteUser - Delete user
|
||||||
func (c *UserAPIController) DeleteUser(w http.ResponseWriter, r *http.Request) {
|
func (c *UserAPIController) DeleteUser(w http.ResponseWriter, r *http.Request) {
|
||||||
params := mux.Vars(r)
|
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"]
|
usernameParam := params["username"]
|
||||||
if usernameParam == "" {
|
if usernameParam == "" {
|
||||||
c.errorHandler(w, r, &RequiredError{"username"}, nil)
|
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
|
// LoginUser - Logs user into the system
|
||||||
func (c *UserAPIController) LoginUser(w http.ResponseWriter, r *http.Request) {
|
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
|
var usernameParam string
|
||||||
if query.Has("username") {
|
if query.Has("username") {
|
||||||
param := query.Get("username")
|
param := query.Get("username")
|
||||||
|
@ -17,6 +17,7 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"mime/multipart"
|
"mime/multipart"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
@ -341,3 +342,9 @@ func parseNumericArrayParameter[T Number](param, delim string, required bool, fn
|
|||||||
|
|
||||||
return values, nil
|
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
|
// FilterPetsByCategory - Finds Pets
|
||||||
func (c *PetAPIController) FilterPetsByCategory(w http.ResponseWriter, r *http.Request) {
|
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"))
|
genderParam, err := NewGenderFromValue(chi.URLParam(r, "gender"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.errorHandler(w, r, &ParsingError{Err: 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
|
// FindPetsByStatus - Finds Pets by status
|
||||||
func (c *PetAPIController) FindPetsByStatus(w http.ResponseWriter, r *http.Request) {
|
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
|
var statusParam []string
|
||||||
if query.Has("status") {
|
if query.Has("status") {
|
||||||
statusParam = strings.Split(query.Get("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
|
// FindPetsByTags - Finds Pets by tags
|
||||||
// Deprecated
|
// Deprecated
|
||||||
func (c *PetAPIController) FindPetsByTags(w http.ResponseWriter, r *http.Request) {
|
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
|
var tagsParam []string
|
||||||
if query.Has("tags") {
|
if query.Has("tags") {
|
||||||
tagsParam = strings.Split(query.Get("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
|
// GetPetsUsingBooleanQueryParameters - Get the pets by only using boolean query parameters
|
||||||
func (c *PetAPIController) GetPetsUsingBooleanQueryParameters(w http.ResponseWriter, r *http.Request) {
|
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
|
var exprParam bool
|
||||||
if query.Has("expr") {
|
if query.Has("expr") {
|
||||||
param, err := parseBoolParameter(
|
param, err := parseBoolParameter(
|
||||||
@ -409,7 +425,11 @@ func (c *PetAPIController) GetPetsUsingBooleanQueryParameters(w http.ResponseWri
|
|||||||
|
|
||||||
// SearchPet - Search Pets by filters
|
// SearchPet - Search Pets by filters
|
||||||
func (c *PetAPIController) SearchPet(w http.ResponseWriter, r *http.Request) {
|
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
|
var ageParam *int64
|
||||||
if query.Has("age") {
|
if query.Has("age") {
|
||||||
param, err := parseNumericParameter[int64](
|
param, err := parseNumericParameter[int64](
|
||||||
|
@ -172,7 +172,11 @@ func (c *UserAPIController) CreateUsersWithListInput(w http.ResponseWriter, r *h
|
|||||||
|
|
||||||
// DeleteUser - Delete user
|
// DeleteUser - Delete user
|
||||||
func (c *UserAPIController) DeleteUser(w http.ResponseWriter, r *http.Request) {
|
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")
|
usernameParam := chi.URLParam(r, "username")
|
||||||
if usernameParam == "" {
|
if usernameParam == "" {
|
||||||
c.errorHandler(w, r, &RequiredError{"username"}, nil)
|
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
|
// LoginUser - Logs user into the system
|
||||||
func (c *UserAPIController) LoginUser(w http.ResponseWriter, r *http.Request) {
|
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
|
var usernameParam string
|
||||||
if query.Has("username") {
|
if query.Has("username") {
|
||||||
param := query.Get("username")
|
param := query.Get("username")
|
||||||
|
@ -18,6 +18,7 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"mime/multipart"
|
"mime/multipart"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
@ -337,3 +338,9 @@ func parseNumericArrayParameter[T Number](param, delim string, required bool, fn
|
|||||||
|
|
||||||
return values, nil
|
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