Skip to content

[FEAT]: Escape slash in request parameters to -- #535

@HarrierPigeon

Description

@HarrierPigeon

What happened?

I'm using octokit core inside of a Github Action- and need to pass a string with a slash in it to a request. However, when I do, I get an error like this:

Error
RequestError [HttpError]: Not Found
    at /home/runner/work/_actions/texas-mcallen-mission/actions-secret-modifier/v1.0.24/dist/index.js:2655:21
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async boostrap (/home/runner/work/_actions/texas-mcallen-mission/actions-secret-modifier/v1.0.24/dist/index.js:11488:22) {
  status: 404,
  response: {
    url: 'https://api.github.com/repos/texas-mcallen-mission%2Fdeploy-tester/actions/secrets/TESTING_CLASPRC_JSON',
    status: 404,
...and so on

My code looks something like this:

return this.octokit.request('PUT /:base/:repo/actions/secrets/:name', {
    base: 'repos',
    repo: 'org-name/repository',
    name,
    data
})

this should result in a request that looks like so: /repos/org-name/repository/secrets/chicken_nugget but instead results in a request that looks like this: repos/org-name%2Frepository/secrets/chicken_nugget

Putting in a hard-coded request works, but in the context of a reusable workflow is not an adequate solution.

Here's a not-very-good attempt at a runkit demo:
https://runkit.com/harrierpigeon/63a23af06795d60008aa45c8

References:
https://docs.github.com/en/rest/actions/secrets?apiVersion=2022-11-28#create-or-update-a-repository-secret

Versions

octokit-core.js/4.1.0 Node.js/16.13.0

Relevant log output

Error: Not Found
RequestError [HttpError]: Not Found
    at /home/runner/work/_actions/texas-mcallen-mission/actions-secret-modifier/v1.0.24/dist/index.js:2655:21
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async boostrap (/home/runner/work/_actions/texas-mcallen-mission/actions-secret-modifier/v1.0.24/dist/index.js:11488:22) {
  status: 404,
  response: {
    url: 'https://api.github.com/repos/texas-mcallen-mission%2Fdeploy-tester/actions/secrets/TESTING_CLASPRC_JSON',
    status: 404,
    headers: {
      'access-control-allow-origin': '*',
      'access-control-expose-headers': 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset',
      connection: 'close',
      'content-encoding': 'gzip',
      'content-security-policy': "default-src 'none'",
      'content-type': 'application/json; charset=utf-8',
      date: 'Tue, 20 Dec 2022 22:30:18 GMT',
      'github-authentication-token-expiration': '2023-01-15 17:25:01 -0600',
      'referrer-policy': 'origin-when-cross-origin, strict-origin-when-cross-origin',
      server: 'GitHub.com',
      'strict-transport-security': 'max-age=31536000; includeSubdomains; preload',
      'transfer-encoding': 'chunked',
      vary: 'Accept-Encoding, Accept, X-Requested-With',
      'x-content-type-options': 'nosniff',
      'x-frame-options': 'deny',
      'x-github-api-version-selected': '2022-11-28',
      'x-github-media-type': 'github.v3; format=json',
      'x-github-request-id': '13C3:4EA3:536BEA:A9DD7B:63A2377A',
      'x-ratelimit-limit': '5000',
      'x-ratelimit-remaining': '4959',
      'x-ratelimit-reset': '1671578539',
      'x-ratelimit-resource': 'core',
      'x-ratelimit-used': '41',
      'x-xss-protection': '0'
    ***
    data: {
      message: 'Not Found',
      documentation_url: 'https://docs.github.com/rest'
    }
  ***
  request: {
    method: 'PUT',
    url: 'https://api.github.com/repos/texas-mcallen-mission%2Fdeploy-tester/actions/secrets/TESTING_CLASPRC_JSON',
    headers: {
      accept: 'application/vnd.github.v3+json',
      'user-agent': 'octokit-core.js/4.1.0 Node.js/16.13.0 (linux; x64)',
      authorization: 'token [REDACTED]',
      'content-type': 'application/json; charset=utf-8'
    ***
    body: '{"encrypted_value":"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","key_id":"568250167242549743"}',
    request: { hook: [Function: bound bound register] }
  }
}

Code of Conduct

  • I agree to follow this project's Code of Conduct

Metadata

Metadata

Assignees

No one assigned

    Labels

    Status: Up for grabsIssues that are ready to be worked on by anyoneType: FeatureNew feature or requesthacktoberfestIssues for participation in Hacktoberfest

    Type

    No type

    Projects

    Status

    🔥 Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions