fastify / aws-lambda-fastify

Insipired by aws-serverless-express to work with Fastify with inject functionality.
MIT License
506 stars 32 forks source link

spaces in Form Submit Query Parameters are not decoded properly #221

Open jaecktec opened 3 months ago

jaecktec commented 3 months ago

Prerequisites

Fastify version

4.25.2

Plugin version

3.5.0

Node.js version

20

Operating system

macOS

Operating system version (i.e. 20.04, 11.3, 10)

-

Description

When a form-submit with action 'GET' sends a query the query will be encoded as URLSearchParams, meaning spaces = + (not %20)

so adjusting this test will fail:

Link to code that reproduces the bug


test('GET with encoded query values', async (t) => {
  t.plan(2)

  const app = fastify()
  app.get('/test', async (request, reply) => {
    reply.send(request.query)
  })
  const proxy = awsLambdaFastify(app)

  const ret = await proxy({
    requestContext: { elb: { targetGroupArn: 'xxx' } },
    httpMethod: 'GET',
    path: '/test',
    queryStringParameters: {
      'q%24': 'foo+%3Fbar'
    }
  })
  t.equal(ret.statusCode, 200)
  t.equal(ret.body, '{"q$":"foo ?bar"}')
})

Expected Behavior

The query parameters should be parsed using 'querystring' to mimic the behaviour of the 'normal' fastify runtime

adrai commented 3 months ago

Can you check how the original aws lambda event looks like and then open a new PR by creating a dedicated test for this and providing the appropriate fix?

jaecktec commented 3 months ago

looks the same, I've checked (this is how I've noticed) a + will not be transformed to a space. I'll create a PR :)