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

Request Body in Callbacks Produces Error #7465

Closed
jonathon-boldcommerce opened this issue Aug 17, 2021 · 3 comments
Closed

Request Body in Callbacks Produces Error #7465

jonathon-boldcommerce opened this issue Aug 17, 2021 · 3 comments

Comments

@jonathon-boldcommerce
Copy link

Q&A (please complete the following information)

  • OS: macOs
  • Browser: chrome
  • Version: 92.0.4515.131 (Official Build) (x86_64)
  • Method of installation: online
  • Swagger-UI version: 3.52.0
  • Swagger/OpenAPI version: OpenAPI 3.0.0

Content & configuration

Example Swagger/OpenAPI definition:

openapi: 3.0.0
info:
  version: 1.0.0
  title: test
  description: example with callback
paths:
  /subscribe:
    post:
      summary: Subscribe to a webhook
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                callbackUrl:
                  type: string
                  format: uri
                  example: https://myserver.com/send/callback/here
              required:
                - callbackUrl
      callbacks:
        myEvent:
          '{$request.body#/callbackUrl}':
            post:
              requestBody:
                required: true
                content:
                  application/json:
                    schema:
                      type: object
                      properties:
                        message:
                          type: string
                          example: Some event happened
                      required:
                        - message
              responses:
                '200':
                  description: Your server returns this code if it accepts the callback
      responses:
        '201':
          description: Webhook created

Describe the bug you're encountering

There are no visual problems with rendering this yaml in Swagger UI, but the error that appears in the console says "swagger-ui-es-bundle.js:2 TypeError: Cannot read property 'getIn' of undefined" and is likely causing problems in plugin themes such as swagger-ui-kong-theme.

To reproduce...

Steps to reproduce the behavior:

  1. https://editor.swagger.io/ in chrome
  2. Open the developer console
  3. Paste the yaml file into the editor
  4. Click the /subscribe request
  5. Click the Callbacks tab
  6. Click "{$request.body#/callbackUrl}"
  7. Notice "TypeError: Cannot read property 'getIn' of undefined" in the console

Expected behavior

There should not be an error in the console and this should render properly using other plugins.

Screenshots

Screen Shot 2021-08-17 at 9 12 50 AM

Additional context or thoughts

Possibly related to this open issue: #5536

@mathis-m
Copy link
Contributor

mathis-m commented Oct 3, 2021

@char0n This happens because the OperationContainer component was reused for the Callbacks component.
For this issue the oas3 selector hasUserEditedBody throws the exception at

export const getDefaultRequestBodyValue = (requestBody, mediaType, activeExamplesKey) => {
const mediaTypeValue = requestBody.getIn(["content", mediaType])

because the requestBody was not resolved for the callback level, insted it tries to resolve it for paths.{path}.{method}, which is valid for requestBody but not for callback request bodies.

specSelectors.specResolvedSubtree(["paths", path, method, "requestBody"]),

This behavior was introduced by me with PR #6837

To fix this the selector hasUserEditedBody needs to be adjusted to recieve the full path.
In addition oas3 requestContentType and requestBodyValue selectors need to be adjusted to also take in the full path, else if the callback url is named the same like a normal path it will corrupt the state.

In addition I think that there are many pitfalls we will run into, because many oas3 reducers are build up on path and method. So if it comes to the above stated case I think it will have some weird behavior.

Do you have any architectural recomendation on how to solve this issue in a clean way?

@char0n
Copy link
Member

char0n commented Mar 23, 2023

This is has been addressed for v5 in #8509

To fix this the selector hasUserEditedBody needs to be adjusted to recieve the full path.
In addition oas3 requestContentType and requestBodyValue selectors need to be adjusted to also take in the full path,

The only request body that can currently be edited is for Path Items that are direct values of OpenAPI.paths. Path Item contained within the Callback Object or OpenAPI.webhooks (OpenAPI 3.1.0) have Try it out disabled and thus body cannot be edited.

Having said that, we're able to fix this issue without big refactors.

@char0n
Copy link
Member

char0n commented Mar 23, 2023

Addressed for v4 in #8510

@char0n char0n closed this as completed Mar 23, 2023
ksibisamir added a commit to SaTT-Wallet/Backend that referenced this issue May 31, 2023
<h3>Snyk has created this PR to upgrade swagger-ui-dist from 4.14.3 to
4.18.3.</h3>

:information_source: Keep your dependencies up-to-date. This makes it
easier to fix existing vulnerabilities and to more quickly identify and
fix newly disclosed vulnerabilities when they affect your project.
<hr/>

- The recommended version is **13 versions** ahead of your current
version.
- The recommended version was released **24 days ago**, on 2023-04-26.


<details>
<summary><b>Release notes</b></summary>
<br/>
  <details>
    <summary>Package name: <b>swagger-ui-dist</b></summary>
    <ul>
      <li>
<b>4.18.3</b> - <a
href="https://snyk.io/redirect/github/swagger-api/swagger-ui/releases/tag/v4.18.3">2023-04-26</a></br><h2><a
href="https://snyk.io/redirect/github/swagger-api/swagger-ui/compare/v4.18.2...v4.18.3">4.18.3</a>
(2023-04-26)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>response-body:</strong> remove download button when content
is empty (<a
href="https://snyk.io/redirect/github/swagger-api/swagger-ui/issues/8579"
data-hovercard-type="pull_request"
data-hovercard-url="/swagger-api/swagger-ui/pull/8579/hovercard">#8579</a>)
(<a
href="https://snyk.io/redirect/github/swagger-api/swagger-ui/commit/cdfc4de43e486f592b9e471968c7a172d8d8072c">cdfc4de</a>)</li>
</ul>
      </li>
      <li>
<b>4.18.2</b> - <a
href="https://snyk.io/redirect/github/swagger-api/swagger-ui/releases/tag/v4.18.2">2023-03-30</a></br><h2><a
href="https://snyk.io/redirect/github/swagger-api/swagger-ui/compare/v4.18.1...v4.18.2">4.18.2</a>
(2023-03-30)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>decode model schema name on model component (<a
href="https://snyk.io/redirect/github/swagger-api/swagger-ui/issues/8400"
data-hovercard-type="pull_request"
data-hovercard-url="/swagger-api/swagger-ui/pull/8400/hovercard">#8400</a>)
(<a
href="https://snyk.io/redirect/github/swagger-api/swagger-ui/commit/44e2700c7400f872fd6b0b78d8aa2a0f73fb2807">44e2700</a>),
closes <a
href="https://snyk.io/redirect/github/swagger-api/swagger-ui/issues/5626"
data-hovercard-type="issue"
data-hovercard-url="/swagger-api/swagger-ui/issues/5626/hovercard">#5626</a></li>
<li><strong>oas3:</strong> expand Callback operation without browser
error (<a
href="https://snyk.io/redirect/github/swagger-api/swagger-ui/issues/8510"
data-hovercard-type="pull_request"
data-hovercard-url="/swagger-api/swagger-ui/pull/8510/hovercard">#8510</a>)
(<a
href="https://snyk.io/redirect/github/swagger-api/swagger-ui/commit/cb15dbb6e5544aa69a5ab04358f5fed46e253183">cb15dbb</a>),
closes <a
href="https://snyk.io/redirect/github/swagger-api/swagger-ui/issues/7465"
data-hovercard-type="issue"
data-hovercard-url="/swagger-api/swagger-ui/issues/7465/hovercard">#7465</a></li>
</ul>
      </li>
      <li>
        <b>4.18.1</b> - 2023-03-10
      </li>
      <li>
        <b>4.18.0</b> - 2023-03-08
      </li>
      <li>
        <b>4.17.1</b> - 2023-03-06
      </li>
      <li>
        <b>4.17.0</b> - 2023-03-01
      </li>
      <li>
        <b>4.16.1</b> - 2023-02-25
      </li>
      <li>
        <b>4.16.0</b> - 2023-02-24
      </li>
      <li>
        <b>4.15.5</b> - 2022-11-09
      </li>
      <li>
        <b>4.15.3</b> - 2022-11-08
      </li>
      <li>
        <b>4.15.2</b> - 2022-10-26
      </li>
      <li>
        <b>4.15.1</b> - 2022-10-25
      </li>
      <li>
        <b>4.15.0</b> - 2022-10-20
      </li>
      <li>
        <b>4.14.3</b> - 2022-10-11
      </li>
    </ul>
from <a
href="https://snyk.io/redirect/github/swagger-api/swagger-ui/releases">swagger-ui-dist
GitHub release notes</a>
  </details>
</details>
<hr/>

**Note:** *You are seeing this because you or someone else with access
to this repository has authorized Snyk to open upgrade PRs.*

For more information: <img
src="https://api.segment.io/v1/pixel/track?data=eyJ3cml0ZUtleSI6InJyWmxZcEdHY2RyTHZsb0lYd0dUcVg4WkFRTnNCOUEwIiwiYW5vbnltb3VzSWQiOiI4MTkwMDhiMS0xNjhkLTQzZDItOGIxYS0zNzk0ODBlOTg0ODYiLCJldmVudCI6IlBSIHZpZXdlZCIsInByb3BlcnRpZXMiOnsicHJJZCI6IjgxOTAwOGIxLTE2OGQtNDNkMi04YjFhLTM3OTQ4MGU5ODQ4NiJ9fQ=="
width="0" height="0"/>

🧐 [View latest project
report](https://app.snyk.io/org/satt/project/b89486be-ad07-4d6c-a51a-2fa8a25baa00?utm_source&#x3D;github&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)

🛠 [Adjust upgrade PR
settings](https://app.snyk.io/org/satt/project/b89486be-ad07-4d6c-a51a-2fa8a25baa00/settings/integration?utm_source&#x3D;github&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)

🔕 [Ignore this dependency or unsubscribe from future upgrade
PRs](https://app.snyk.io/org/satt/project/b89486be-ad07-4d6c-a51a-2fa8a25baa00/settings/integration?pkg&#x3D;swagger-ui-dist&amp;utm_source&#x3D;github&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr#auto-dep-upgrades)

<!---
(snyk:metadata:{"prId":"819008b1-168d-43d2-8b1a-379480e98486","prPublicId":"819008b1-168d-43d2-8b1a-379480e98486","dependencies":[{"name":"swagger-ui-dist","from":"4.14.3","to":"4.18.3"}],"packageManager":"npm","type":"auto","projectUrl":"https://app.snyk.io/org/satt/project/b89486be-ad07-4d6c-a51a-2fa8a25baa00?utm_source=github&utm_medium=referral&page=upgrade-pr","projectPublicId":"b89486be-ad07-4d6c-a51a-2fa8a25baa00","env":"prod","prType":"upgrade","vulns":[],"issuesToFix":[],"upgrade":[],"upgradeInfo":{"versionsDiff":13,"publishedDate":"2023-04-26T13:12:06.316Z"},"templateVariants":[],"hasFixes":false,"isMajorUpgrade":false,"isBreakingChange":false,"priorityScoreList":[]})
--->
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

3 participants