Skip to content

[Slim] Encode path to support non-latin characters#1687

Merged
wing328 merged 4 commits intoOpenAPITools:masterfrom
ybelenko:bugfix/766
Dec 31, 2018
Merged

[Slim] Encode path to support non-latin characters#1687
wing328 merged 4 commits intoOpenAPITools:masterfrom
ybelenko:bugfix/766

Conversation

@ybelenko
Copy link
Contributor

PR checklist

  • Read the contribution guidelines.
  • Ran the shell script under ./bin/ to update Petstore sample so that CIs can verify the change. (For instance, only need to run ./bin/{LANG}-petstore.sh and ./bin/security/{LANG}-petstore.sh if updating the {LANG} (e.g. php, ruby, python, etc) code generator or {LANG} client's mustache templates). Windows batch files can be found in .\bin\windows\.
  • Filed the PR against the correct branch: master, 3.4.x, 4.0.x. Default: master.
  • Copied the technical committee to review the pull request if your PR is targeting a particular programming language.

Description of the PR

Closes: #766
This PR should be reviewed carefully, because I didn't find a way to fix it without DefaultGenerator modification.

As it turns out {{basePathWithoutHost}} construction doesn't solve issue when path contains non-latin characters. For instance, Slim router cannot find related API controller when path looks like /статьи/авторы, because escaped mustache variable output is /статьи/авторы without any difference, while HTTP clients and web browsers encodes non-latin characters by default. When I use this link in Chrome I see in server logs that url has been automatically encoded into /%D1%81%D1%82%D0%B0%D1%82%D1%8C%D0%B8/%D0%B0%D0%B2%D1%82%D0%BE%D1%80%D1%8B. The same behaviour with Insomnia app. With new method encodePath Slim router works as expected.

I've also added few tests to check encodePath method output of PhpSlimServerCodegen.

cc @jebentier @dkarlovi @mandrean @jfastnacht @ackintosh @renepardon

@ybelenko ybelenko added this to the 4.0.0 milestone Dec 16, 2018
Copy link
Member

Choose a reason for hiding this comment

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

@ybelenko why do we need to replace /$ with empty string?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Copy link
Member

Choose a reason for hiding this comment

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

Thanks for the explanation

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@wing328 Maybe I can change basePathWithoutHost somewhere else? In some post process functions in Slim generator? Or maybe we should add encodedBasepathWithoutHost property? I think that this problem with non-latin characters exists in other generators as well.

Copy link
Member

Choose a reason for hiding this comment

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

I think that this problem with non-latin characters exists in other generators as well.

I think so but I didn't have time to test and confirm.

Copy link
Member

Choose a reason for hiding this comment

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

My take is to start with your fix for Slim generator and later we port this fix to the default codegen or other generators if users report similar issues.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yeah, I agree, it's not so important now.

Important part is basePathWithoutHost value. Whether we should override it or put it in separated prop. Do you know how to override it inside PhpSlimServerCodegen codegen class?

What contextPath property stands for?

@wing328 wing328 added Issue: Bug and removed bug labels Dec 22, 2018
Both variables basePathWithoutHost and path are already urlEncoded in
codegen itself. Builtin html encoding in mustache is redundant. We can
use these raw codegen values with no fear.
@wing328 wing328 merged commit e8ac630 into OpenAPITools:master Dec 31, 2018
jimschubert added a commit to jimschubert/openapi-generator that referenced this pull request Dec 31, 2018
* master: (26 commits)
  Delete unused method (OpenAPITools#1744)
  Use JsonNullable wrapper on nullable/x-nullable fields (OpenAPITools#1762)
  Add an option to use reflection in equals, hashCode (Java client) (OpenAPITools#1767)
  [Slim] Encode path to support non-latin characters (OpenAPITools#1687)
  [elm] Add support for sending headers (OpenAPITools#1704)
  Add test case for InlineModelResolver: inline array response (OpenAPITools#1778)
  fix group parameter logic (OpenAPITools#1779)
  Add test case for InlineModelResolver: inline array request body (OpenAPITools#1777)
  Add test case for InlineModelResolver: inline array schema (OpenAPITools#1772)
  Fix type inference error (OpenAPITools#1773)
  skip default value for contaier in spring (OpenAPITools#1725)
  [Slim] Add PHP CodeSniffer config template (OpenAPITools#1764)
  Use CompareNetObject for object comparison in C# client (refactor) (OpenAPITools#1765)
  Add test case for InlineModelResolver (OpenAPITools#1771)
  Add online gen tests (OpenAPITools#1759)
  Resolve inline models before preprocess (OpenAPITools#1761)
  better handling of allOf (composition) (OpenAPITools#1757)
  Fix UUID support (OpenAPITools#1746)
  Use appInfo.version for podspec (OpenAPITools#1760)
  [Swift 4] Add `createURLRequest` method (OpenAPITools#1727)
  ...
@wing328
Copy link
Member

wing328 commented Jan 2, 2019

@ybelenko thanks for the contribution, which has been included in the 4.0.0-beta release: https://twitter.com/oas_generator/status/1079727020374806529.

Happy New Year and looking forward to more collaboration and contributions in 2019!

@ybelenko ybelenko deleted the bugfix/766 branch January 3, 2019 06:53
A-Joshi pushed a commit to ihsmarkitoss/openapi-generator that referenced this pull request Feb 27, 2019
* [Slim] Add encodePath method

* [Slim] Add tests for encodePath method

* [Slim] Use unescaped path in router

Both variables basePathWithoutHost and path are already urlEncoded in
codegen itself. Builtin html encoding in mustache is redundant. We can
use these raw codegen values with no fear.

* [Slim] Refresh samples
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Slim] Injection into host or basePath breaks server

2 participants

Comments