Make request parser handle form-encoded content
This fixes a new signin bug
This commit is contained in:
parent
0ce3420792
commit
baaa3bff5b
2 changed files with 18 additions and 6 deletions
|
|
@ -342,12 +342,24 @@ func handlerFormPost[RequestType any, ResponseType any](f handlerFunctionPostFor
|
|||
}
|
||||
}
|
||||
func parseRequest[RequestType any](r *http.Request) (*RequestType, *nhttp.ErrorWithStatus) {
|
||||
var err error
|
||||
var req RequestType
|
||||
body, err := io.ReadAll(r.Body)
|
||||
if err != nil {
|
||||
return nil, nhttp.NewError("Failed to read body: %w", err)
|
||||
content_type := r.Header.Get("Content-Type")
|
||||
if content_type == "application/json" {
|
||||
body, e := io.ReadAll(r.Body)
|
||||
if e != nil {
|
||||
return nil, nhttp.NewError("Failed to read body: %w", err)
|
||||
}
|
||||
err = json.Unmarshal(body, &req)
|
||||
} else if content_type == "application/x-www-form-urlencoded" {
|
||||
e := r.ParseForm()
|
||||
if err != nil {
|
||||
return nil, nhttp.NewBadRequest("parsing form: %w", e)
|
||||
}
|
||||
err = decoder.Decode(&req, r.PostForm)
|
||||
} else {
|
||||
return nil, nhttp.NewBadRequest("unrecognized content type '%s'", content_type)
|
||||
}
|
||||
err = json.Unmarshal(body, &req)
|
||||
if err != nil {
|
||||
return nil, nhttp.NewErrorStatus(http.StatusBadRequest, "Failed to decode request: %w", err)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ import (
|
|||
)
|
||||
|
||||
type reqSignin struct {
|
||||
Password string `json:"password"`
|
||||
Username string `json:"username"`
|
||||
Password string `schema:"password"`
|
||||
Username string `schema:"username"`
|
||||
}
|
||||
|
||||
func postSignin(ctx context.Context, r *http.Request, req reqSignin) (string, *nhttp.ErrorWithStatus) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue