Skip to content

Commit

Permalink
Merge pull request swagger-api#10135 from swagger-api/beardeddragon5-…
Browse files Browse the repository at this point in the history
…go-with-formurlencoded

Beardeddragon5 go with formurlencoded
  • Loading branch information
HugoMario authored Mar 27, 2020
2 parents a35ca36 + 8859a05 commit c6d2e8d
Show file tree
Hide file tree
Showing 10 changed files with 700 additions and 55 deletions.
14 changes: 12 additions & 2 deletions modules/swagger-codegen/src/main/resources/go/client.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ func (c *APIClient) prepareRequest(
}

// add form parameters and file if available.
if len(formParams) > 0 || (len(fileBytes) > 0 && fileName != "") {
if strings.HasPrefix(headerParams["Content-Type"], "multipart/form-data") && len(formParams) > 0 || (len(fileBytes) > 0 && fileName != "") {
if body != nil {
return nil, errors.New("Cannot specify postBody and multipart form at the same time.")
}
Expand Down Expand Up @@ -224,6 +224,16 @@ func (c *APIClient) prepareRequest(
w.Close()
}

if strings.HasPrefix(headerParams["Content-Type"], "application/x-www-form-urlencoded") && len(formParams) > 0 {
if body != nil {
return nil, errors.New("Cannot specify postBody and x-www-form-urlencoded form at the same time.")
}
body = &bytes.Buffer{}
body.WriteString(formParams.Encode())
// Set Content-Length
headerParams["Content-Length"] = fmt.Sprintf("%d", body.Len())
}

// Setup path and query parameters
url, err := url.Parse(path)
if err != nil {
Expand Down Expand Up @@ -465,4 +475,4 @@ func (e GenericSwaggerError) Body() []byte {
// Model returns the unpacked model of the error
func (e GenericSwaggerError) Model() interface{} {
return e.model
}
}
1 change: 1 addition & 0 deletions samples/client/petstore-security-test/go/api/swagger.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ definitions:
description: "Model for testing reserved words */ ' \" =end -- \\r\\n \\n \\r"
xml:
name: "Return"

externalDocs:
description: "Find out more about Swagger */ ' \" =end -- \\r\\n \\n \\r"
url: "http://swagger.io"
105 changes: 105 additions & 0 deletions samples/client/petstore-security-test/go/api_fake.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
/*
* Swagger Petstore *_/ ' \" =end -- \\r\\n \\n \\r
*
* This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ *_/ ' \" =end --
*
* API version: 1.0.0 *_/ ' \" =end -- \\r\\n \\n \\r
* Contact: [email protected] *_/ ' \" =end -- \\r\\n \\n \\r
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/

package swagger

import (
"context"
"io/ioutil"
"net/http"
"net/url"
"strings"
"github.com/antihax/optional"
)

// Linger please
var (
_ context.Context
)

type FakeApiService service

/*
FakeApiService To test code injection *_/ ' \" =end -- \\r\\n \\n \\r
* @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
* @param optional nil or *TestCodeInjectEndRnNROpts - Optional Parameters:
* @param "TestCodeInjectEndRnNR" (optional.String) - To test code injection *_/ ' \" =end -- \\r\\n \\n \\r
*/

type TestCodeInjectEndRnNROpts struct {
TestCodeInjectEndRnNR optional.String
}

func (a *FakeApiService) TestCodeInjectEndRnNR(ctx context.Context, localVarOptionals *TestCodeInjectEndRnNROpts) (*http.Response, error) {
var (
localVarHttpMethod = strings.ToUpper("Put")
localVarPostBody interface{}
localVarFileName string
localVarFileBytes []byte

)

// create path and map variables
localVarPath := a.client.cfg.BasePath + "/fake"

localVarHeaderParams := make(map[string]string)
localVarQueryParams := url.Values{}
localVarFormParams := url.Values{}

// to determine the Content-Type header
localVarHttpContentTypes := []string{"application/json", "*_/ ' =end -- "}

// set Content-Type header
localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes)
if localVarHttpContentType != "" {
localVarHeaderParams["Content-Type"] = localVarHttpContentType
}

// to determine the Accept header
localVarHttpHeaderAccepts := []string{"application/json", "*_/ ' =end -- "}

// set Accept header
localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts)
if localVarHttpHeaderAccept != "" {
localVarHeaderParams["Accept"] = localVarHttpHeaderAccept
}
if localVarOptionals != nil && localVarOptionals.TestCodeInjectEndRnNR.IsSet() {
localVarFormParams.Add("test code inject */ ' " =end -- \r\n \n \r", parameterToString(localVarOptionals.TestCodeInjectEndRnNR.Value(), ""))
}
r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes)
if err != nil {
return nil, err
}

localVarHttpResponse, err := a.client.callAPI(r)
if err != nil || localVarHttpResponse == nil {
return localVarHttpResponse, err
}

localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body)
localVarHttpResponse.Body.Close()
if err != nil {
return localVarHttpResponse, err
}


if localVarHttpResponse.StatusCode >= 300 {
newErr := GenericSwaggerError{
body: localVarBody,
error: localVarHttpResponse.Status,
}

return localVarHttpResponse, newErr
}

return localVarHttpResponse, nil
}
Loading

0 comments on commit c6d2e8d

Please sign in to comment.