feat: add request.routeOptions object#4397
feat: add request.routeOptions object#4397mcollina merged 20 commits intofastify:mainfrom debadutta98:feature@request-bodylimit
Conversation
There was a problem hiding this comment.
I do not block if it landed.
Still, I think mapping the options to property one by one is not a good idea.
Details on #4375 (comment)
|
Hi @Eomm @climba03003 , I just changed |
jsumners
left a comment
There was a problem hiding this comment.
This does not fully consider, nor implement, the ideas presented in the issue discussion.
|
Hi guys, Just validate my solution to match your expectations
Thank you! |
|
Can we modify the test in request-error.js to this please? test('request.routeOptions should be immutable', t => {
t.plan(14)
const fastify = Fastify()
const handler = function (req, res) {
t.equal('POST', req.routeOptions.method)
t.equal('/', req.routeOptions.url)
t.throws(() => { req.routeOptions = null }, new TypeError('Cannot set property routeOptions of #<Request> which has only a getter'))
t.throws(() => { req.routeOptions.method = 'INVALID' }, new TypeError('Cannot assign to read only property \'method\' of object \'#<Object>\''))
t.throws(() => { req.routeOptions.url = '//' }, new TypeError('Cannot assign to read only property \'url\' of object \'#<Object>\''))
t.throws(() => { req.routeOptions.bodyLimit = 0xDEADBEEF }, new TypeError('Cannot assign to read only property \'bodyLimit\' of object \'#<Object>\''))
t.throws(() => { req.routeOptions.attachValidation = true }, new TypeError('Cannot assign to read only property \'attachValidation\' of object \'#<Object>\''))
t.throws(() => { req.routeOptions.logLevel = 'invalid' }, new TypeError('Cannot assign to read only property \'logLevel\' of object \'#<Object>\''))
t.throws(() => { req.routeOptions.version = '95.0.1' }, new TypeError('Cannot assign to read only property \'version\' of object \'#<Object>\''))
t.throws(() => { req.routeOptions.prefixTrailingSlash = true }, new TypeError('Cannot assign to read only property \'prefixTrailingSlash\' of object \'#<Object>\''))
t.throws(() => { req.routeOptions.newAttribute = {} }, new TypeError('Cannot add property newAttribute, object is not extensible'))
for (const key of Object.keys(req.routeOptions)) {
if (typeof req.routeOptions[key] === 'object' && req.routeOptions[key] !== null) {
t.fail('Object.freeze must run recursively on nested structures to ensure that routeOptions is immutable.')
}
}
res.send({ })
}
fastify.post('/', {
bodyLimit: 1000,
handler
})
fastify.listen({ port: 0 }, function (err) {
t.error(err)
t.teardown(() => { fastify.close() })
sget({
method: 'POST',
url: 'http://localhost:' + fastify.server.address().port,
headers: { 'Content-Type': 'application/json' },
body: [],
json: true
}, (err, response, body) => {
t.error(err)
t.equal(response.statusCode, 200)
})
})
}) |
Thank you!! Your solution has been implemented |
Probably the one would be |
[](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [fastify](https://www.fastify.io/) ([source](https://togithub.com/fastify/fastify)) | [`4.9.2` -> `4.10.2`](https://renovatebot.com/diffs/npm/fastify/4.9.2/4.10.2) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | ### GitHub Vulnerability Alerts #### [CVE-2022-41919](https://togithub.com/fastify/fastify/security/advisories/GHSA-3fjj-p79j-c9hh) ### Impact The attacker can use the incorrect `Content-Type` to bypass the `Pre-Flight` checking of `fetch`. `fetch()` requests with Content-Type’s [essence](https://mimesniff.spec.whatwg.org/#mime-type-essence) as "application/x-www-form-urlencoded", "multipart/form-data", or "text/plain", could potentially be used to invoke routes that only accepts `application/json` content type, thus bypassing any [CORS protection](https://fetch.spec.whatwg.org/#simple-header), and therefore they could lead to a Cross-Site Request Forgery attack. ### Patches For `4.x` users, please update to at least `4.10.2` For `3.x` users, please update to at least `3.29.4` ### Workarounds Implement Cross-Site Request Forgery protection using [`@fastify/csrf`](https://www.npmjs.com/package/@​fastify/csrf). ### References Check out the HackerOne report: https://hackerone.com/reports/1763832. ### For more information [Fastify security policy](https://togithub.com/fastify/fastify/security/policy) --- ### Release Notes <details> <summary>fastify/fastify</summary> ### [`v4.10.2`](https://togithub.com/fastify/fastify/releases/tag/v4.10.2) [Compare Source](https://togithub.com/fastify/fastify/compare/v4.10.1...v4.10.2) ####⚠️ Security Release⚠️ - Fix for ["Incorrect Content-Type parsing can lead to CSRF attack"](https://togithub.com/fastify/fastify/security/advisories/GHSA-3fjj-p79j-c9hh) and CVE-2022-41919 **Full Changelog**: fastify/fastify@v4.10.1...v4.10.2 ### [`v4.10.1`](https://togithub.com/fastify/fastify/releases/tag/v4.10.1) [Compare Source](https://togithub.com/fastify/fastify/compare/v4.10.0...v4.10.1) #### What's Changed - fix node 19.1.0 port validation test by [@​Uzlopak](https://togithub.com/Uzlopak) in [https://github.com/fastify/fastify/pull/4427](https://togithub.com/fastify/fastify/pull/4427) - Add fastify-constraints to community plugins by [@​Ceres6](https://togithub.com/Ceres6) in [https://github.com/fastify/fastify/pull/4428](https://togithub.com/fastify/fastify/pull/4428) - build(deps-dev): bump [@​sinonjs/fake-timers](https://togithub.com/sinonjs/fake-timers) from 9.1.2 to 10.0.0 by [@​dependabot](https://togithub.com/dependabot) in [https://github.com/fastify/fastify/pull/4421](https://togithub.com/fastify/fastify/pull/4421) - add silent option to LogLevel by [@​Uzlopak](https://togithub.com/Uzlopak) in [https://github.com/fastify/fastify/pull/4432](https://togithub.com/fastify/fastify/pull/4432) #### New Contributors - [@​Ceres6](https://togithub.com/Ceres6) made their first contribution in [https://github.com/fastify/fastify/pull/4428](https://togithub.com/fastify/fastify/pull/4428) **Full Changelog**: fastify/fastify@v4.10.0...v4.10.1 ### [`v4.10.0`](https://togithub.com/fastify/fastify/releases/tag/v4.10.0) [Compare Source](https://togithub.com/fastify/fastify/compare/v4.9.2...v4.10.0) #### What's Changed - docs(reference/reply): spelling fixes by [@​Fdawgs](https://togithub.com/Fdawgs) in [https://github.com/fastify/fastify/pull/4358](https://togithub.com/fastify/fastify/pull/4358) - Support different content-type typed reply with TypeProvider by [@​rain714](https://togithub.com/rain714) in [https://github.com/fastify/fastify/pull/4360](https://togithub.com/fastify/fastify/pull/4360) - chore: remove leading empty lines by [@​LinusU](https://togithub.com/LinusU) in [https://github.com/fastify/fastify/pull/4364](https://togithub.com/fastify/fastify/pull/4364) - fix types after pino 8.7.0 change by [@​mcollina](https://togithub.com/mcollina) in [https://github.com/fastify/fastify/pull/4365](https://togithub.com/fastify/fastify/pull/4365) - Node.js V19 support by [@​mcollina](https://togithub.com/mcollina) in [https://github.com/fastify/fastify/pull/4366](https://togithub.com/fastify/fastify/pull/4366) - fix: no check on `null` or `undefined` values passed as fn by [@​metcoder95](https://togithub.com/metcoder95) in [https://github.com/fastify/fastify/pull/4367](https://togithub.com/fastify/fastify/pull/4367) - docs(server): config is lost when reply.call not found() is called by [@​cesarvspr](https://togithub.com/cesarvspr) in [https://github.com/fastify/fastify/pull/4368](https://togithub.com/fastify/fastify/pull/4368) - Fix typo - 'sever' to 'server' by [@​utsav91](https://togithub.com/utsav91) in [https://github.com/fastify/fastify/pull/4372](https://togithub.com/fastify/fastify/pull/4372) - Add platformatic to the Acknowledgements by [@​mcollina](https://togithub.com/mcollina) in [https://github.com/fastify/fastify/pull/4378](https://togithub.com/fastify/fastify/pull/4378) - docs: add Simone Busoli to plugin maintainers by [@​simoneb](https://togithub.com/simoneb) in [https://github.com/fastify/fastify/pull/4379](https://togithub.com/fastify/fastify/pull/4379) - add missing 'validationContext' field to FastifyError type by [@​jakubburzynski](https://togithub.com/jakubburzynski) in [https://github.com/fastify/fastify/pull/4363](https://togithub.com/fastify/fastify/pull/4363) - fix(type-providers): assignability of instance with enabled type provider by [@​driimus](https://togithub.com/driimus) in [https://github.com/fastify/fastify/pull/4371](https://togithub.com/fastify/fastify/pull/4371) - feat: support async trailer by [@​climba03003](https://togithub.com/climba03003) in [https://github.com/fastify/fastify/pull/4380](https://togithub.com/fastify/fastify/pull/4380) - fix: trailers async race condition by [@​climba03003](https://togithub.com/climba03003) in [https://github.com/fastify/fastify/pull/4383](https://togithub.com/fastify/fastify/pull/4383) - docs(ecosystem): Add fastify-list-routes by [@​chuongtrh](https://togithub.com/chuongtrh) in [https://github.com/fastify/fastify/pull/4385](https://togithub.com/fastify/fastify/pull/4385) - build(deps-dev): bump [@​sinclair/typebox](https://togithub.com/sinclair/typebox) from 0.24.51 to 0.25.2 by [@​dependabot](https://togithub.com/dependabot) in [https://github.com/fastify/fastify/pull/4388](https://togithub.com/fastify/fastify/pull/4388) - \[ Fix ] Improve error message for hooks check by [@​debadutta98](https://togithub.com/debadutta98) in [https://github.com/fastify/fastify/pull/4387](https://togithub.com/fastify/fastify/pull/4387) - fix: tiny-lru usage by [@​climba03003](https://togithub.com/climba03003) in [https://github.com/fastify/fastify/pull/4391](https://togithub.com/fastify/fastify/pull/4391) - Removes old note about named imports in ESM by [@​fox1t](https://togithub.com/fox1t) in [https://github.com/fastify/fastify/pull/4392](https://togithub.com/fastify/fastify/pull/4392) - docs: Add section about capacity planning by [@​kibertoad](https://togithub.com/kibertoad) in [https://github.com/fastify/fastify/pull/4386](https://togithub.com/fastify/fastify/pull/4386) - docs(recommendations): grammar fixes by [@​Fdawgs](https://togithub.com/Fdawgs) in [https://github.com/fastify/fastify/pull/4396](https://togithub.com/fastify/fastify/pull/4396) - chore(doc): duplicated menu item by [@​Eomm](https://togithub.com/Eomm) in [https://github.com/fastify/fastify/pull/4398](https://togithub.com/fastify/fastify/pull/4398) - feat: add request.routeOptions object by [@​debadutta98](https://togithub.com/debadutta98) in [https://github.com/fastify/fastify/pull/4397](https://togithub.com/fastify/fastify/pull/4397) - docs: Document multiple app approach by [@​kibertoad](https://togithub.com/kibertoad) in [https://github.com/fastify/fastify/pull/4393](https://togithub.com/fastify/fastify/pull/4393) - fix example using db decorator on fastify instance by [@​mmarti](https://togithub.com/mmarti) in [https://github.com/fastify/fastify/pull/4406](https://togithub.com/fastify/fastify/pull/4406) - docs: fix removeAdditional refer by [@​shunyue1320](https://togithub.com/shunyue1320) in [https://github.com/fastify/fastify/pull/4410](https://togithub.com/fastify/fastify/pull/4410) #### New Contributors - [@​rain714](https://togithub.com/rain714) made their first contribution in [https://github.com/fastify/fastify/pull/4360](https://togithub.com/fastify/fastify/pull/4360) - [@​LinusU](https://togithub.com/LinusU) made their first contribution in [https://github.com/fastify/fastify/pull/4364](https://togithub.com/fastify/fastify/pull/4364) - [@​cesarvspr](https://togithub.com/cesarvspr) made their first contribution in [https://github.com/fastify/fastify/pull/4368](https://togithub.com/fastify/fastify/pull/4368) - [@​utsav91](https://togithub.com/utsav91) made their first contribution in [https://github.com/fastify/fastify/pull/4372](https://togithub.com/fastify/fastify/pull/4372) - [@​jakubburzynski](https://togithub.com/jakubburzynski) made their first contribution in [https://github.com/fastify/fastify/pull/4363](https://togithub.com/fastify/fastify/pull/4363) - [@​driimus](https://togithub.com/driimus) made their first contribution in [https://github.com/fastify/fastify/pull/4371](https://togithub.com/fastify/fastify/pull/4371) - [@​chuongtrh](https://togithub.com/chuongtrh) made their first contribution in [https://github.com/fastify/fastify/pull/4385](https://togithub.com/fastify/fastify/pull/4385) - [@​debadutta98](https://togithub.com/debadutta98) made their first contribution in [https://github.com/fastify/fastify/pull/4387](https://togithub.com/fastify/fastify/pull/4387) - [@​mmarti](https://togithub.com/mmarti) made their first contribution in [https://github.com/fastify/fastify/pull/4406](https://togithub.com/fastify/fastify/pull/4406) - [@​shunyue1320](https://togithub.com/shunyue1320) made their first contribution in [https://github.com/fastify/fastify/pull/4410](https://togithub.com/fastify/fastify/pull/4410) **Full Changelog**: fastify/fastify@v4.9.2...v4.10.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - "" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/quirrel-dev/quirrel). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4xNC4yIiwidXBkYXRlZEluVmVyIjoiMzUuMTMxLjAiLCJ0YXJnZXRCcmFuY2giOiJtYWluIn0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
|
This pull request has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs. |
Hi,
This PR Closes #4375
Work
request.routeOptions.bodyLimitto request (updaterequest.js)bodyLimit.test.jsrequest.d.tsChecklist
npm run testandnpm run benchmarkand the Code of conduct