Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG][Javascript] paramToString does not handle non-primitives #7171

Closed
tray2100 opened this issue Aug 9, 2020 · 0 comments
Closed

[BUG][Javascript] paramToString does not handle non-primitives #7171

tray2100 opened this issue Aug 9, 2020 · 0 comments

Comments

@tray2100
Copy link
Contributor

tray2100 commented Aug 9, 2020

Description

It looks like the when an API call is being constructed, the params are passed through a generic paramToString function defined here that looks like this:

exports.prototype.paramToString = function (param) {
    if (param == undefined || param == null) {
      return '';
    }
    if (param instanceof Date) {
      return param.toJSON();
    }
    return param.toString();
  };

This breaks if any of your parameters are not primitives because param.toString() will transform it into [object Object].

openapi-generator version

4.3.1 ... doesn't look to be a regression. Just missing handling

OpenAPI declaration file content or url
  /someOperation:
    post:
      requestBody:
        description: "POST request that uploads a file and takes in a metadata object"
        content:
          multipart/form-data:
            schema:
              type: "object"
              properties:
                metadata:
                  $ref: "#/components/schemas/SomeType"
                file:
                  format: "binary"
                  type: "string"
            encoding:
              metadata:
                contentType: "application/json"
Steps to reproduce

Invoke any POST operation where one parameter is a complex type (Object) using this client and the service will receive [object Object] as a value for the parameter.

Related issues/PRs

Similar issues:

Suggest a fix

I believe the fix should be to, as a last step, see if the parameter can be JSON-ified. If it can be, we should run JSON.stringify() on it and use that result instead of the output of param.toString(). I think a simple method like this would suffice:

exports.prototype.canBeJsonified = function(str) {
    if (typeof str !== 'string' && typeof str !== 'object') return false;
    try {
      const type = str.toString();
      return type === '[object Object]'
          || type === '[object Array]';
    } catch (err) {
      return false;
    }
  };

and we update the paramToString method to be

exports.prototype.paramToString = function(param) {
    if (param == undefined || param == null) {
      return '';
    }
    if (param instanceof Date) {
      return param.toJSON();
    }
    if (this.canBeJsonified(param)) {
      return JSON.stringify(param);
    }
    return param.toString();
  };

cc @CodeNinjai @frol @cliffano @wing328

tray2100 added a commit to tray2100/openapi-generator that referenced this issue Aug 10, 2020
@wing328 wing328 closed this as completed Aug 10, 2020
jimschubert added a commit that referenced this issue Aug 12, 2020
* master: (27 commits)
  [WIP][python-exp] Force camelization of imports (#7186)
  Fixes #6942: Added ability to prepend a basePath to typescript-redux-query generators (#6943)
  [Typescript] Import path is invalid in windows. (#7175)
  Fix JaxRS Spec generator additional model types (#7180)
  [python{,-experimental}] Obey floating point timeouts provided to RESTClientObject.request(...) (#7154)
  [C#] Switch the spec to OAS v3 from v2 (#7176)
  [Javascript] Fixing the handling of non primitive types in paramToString (#7171) (#7172)
  [typescript-node] Fix invalid type when using node@10 and ES5 (#7133)
  Minor fix to github workflow badge
  [gradle] Enabling up-to-date checks and gradle caching for openapigenerator tasks (#6716)
  feat(csharp-netcore): Adding response headers to the ApiException (#7169)
  [ci] Verify supported JDK versions on master push (#7085)
  Issue #6830: Java server - Add getter to ApiException templates (#7150)
  update kotlin samples
  [Kotlin] Make ApiClient in jvm-retrofit2 be able to use own OkHttpClient (#6999)
  Sttp - wrap query params (#6884)
  Add a link to https://medium.com/@everisBrasil blog post (#7160)
  [C#][netcore] fix regular expression when it contains double quotes (#7147)
  remove duplicated cancellationToken in comment (#7148)
  update samples
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants