Skip to content

Conversation

@antsankov
Copy link

This fixes a bug with the restful service attempting to unmarshal a x-www-form-urlencoded request like it is JSON in POST/PUT requests. This fix simply prevents umarshal from tampering with the request body and returning an error so it can be encoded further down the line using something like this.

I was considering doing the decoding using gorilla/schema to the payload in this PR like I'm doing in my program, but I don't know what the policy on external libraries is.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This can be:

if r.Header.Get("Content-Type") == "application/x-www-form-urlencoded" {

@tylertreat-wf
Copy link
Contributor

I would really prefer to make payload decoding pluggable. That seems like the appropriate long-term solution. There would be a PayloadDecoder interface:

type PayloadDecoder interface {
        Decode(*http.Request) Payload
}

Then API could have a RegisterPayloadDecoder method exposed which registers a PayloadDecoder for a given Content-Type:

RegisterPayloadDecoder(contentType string, decoder PayloadDecoder)

Then when a create/update request is received, we simply lookup the PayloadDecoder for the Content-Type and pass the request to it to get the payload. If there isn't one registered, default to JSON.

@tylertreat-wf
Copy link
Contributor

@alexandercampbell-wf @aaronkavlie-wf @stevenosborne-wf

@aaronkavlie-wf
Copy link
Contributor

Build is failing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants