From 58528fb833b48448a9f8bd35e44bc967d0d841e2 Mon Sep 17 00:00:00 2001 From: Pedro Nastasi Date: Wed, 28 Sep 2022 11:15:05 -0300 Subject: [PATCH 1/3] Be less restrictive with unknown keys on query endpoint Signed-off-by: Pedro Nastasi --- .../search-backend/src/service/router.test.ts | 23 ++++++++++++++++++- plugins/search-backend/src/service/router.ts | 2 +- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/plugins/search-backend/src/service/router.test.ts b/plugins/search-backend/src/service/router.test.ts index 1437e65b84..100dee9117 100644 --- a/plugins/search-backend/src/service/router.test.ts +++ b/plugins/search-backend/src/service/router.test.ts @@ -18,7 +18,9 @@ import { getVoidLogger } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; import { PermissionEvaluator } from '@backstage/plugin-permission-common'; import { IndexBuilder } from '@backstage/plugin-search-backend-node'; -import { SearchEngine } from '@backstage/plugin-search-common'; +import { + SearchEngine, +} from '@backstage/plugin-search-common'; import express from 'express'; import request from 'supertest'; @@ -148,6 +150,25 @@ describe('createRouter', () => { }); }); + it('is less restrictive with unknown keys on query endpoint', async () => { + const queryString = + 'term=test&%5BdocType%5D%5B0%5D=Service&filters%5BdocType%5D%5B0%5D=filter1&unknownKey1%5B2%5D=unknownValue1&unknownKey1%5B3%5D=unknownValue2&unknownKey2=unknownValue1&pageCursor'; + const response = await request(app).get(`/query?${queryString}`); + const firstArg: Object = { + docType: ['Service'], + filters: { docType: ['filter1'] }, + pageCursor: '', + term: 'test', + unknownKey1: ['unknownValue1', 'unknownValue2'], + unknownKey2: 'unknownValue1', + }; + const secondArg = { + token: undefined, + }; + expect(response.status).toEqual(200); + expect(mockSearchEngine.query).toHaveBeenCalledWith(firstArg, secondArg); + }); + describe('search result filtering', () => { beforeAll(async () => { const logger = getVoidLogger(); diff --git a/plugins/search-backend/src/service/router.ts b/plugins/search-backend/src/service/router.ts index cf9abff675..87da80d8f5 100644 --- a/plugins/search-backend/src/service/router.ts +++ b/plugins/search-backend/src/service/router.ts @@ -133,7 +133,7 @@ export async function createRouter( req: express.Request, res: express.Response, ) => { - const parseResult = requestSchema.safeParse(req.query); + const parseResult = requestSchema.passthrough().safeParse(req.query); if (!parseResult.success) { throw new InputError(`Invalid query string: ${parseResult.error}`); From 16c853a6ed4092ccb628090daf0987385a3b478c Mon Sep 17 00:00:00 2001 From: Pedro Nastasi Date: Wed, 28 Sep 2022 11:16:41 -0300 Subject: [PATCH 2/3] changeset Signed-off-by: Pedro Nastasi --- .changeset/mean-spiders-design.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/mean-spiders-design.md diff --git a/.changeset/mean-spiders-design.md b/.changeset/mean-spiders-design.md new file mode 100644 index 0000000000..3704c9fca9 --- /dev/null +++ b/.changeset/mean-spiders-design.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-search-backend': minor +--- + +Be less restrictive with unknown keys on query endpoint From 65c8a72b5481c2f49a000be5c3cbb2625f996358 Mon Sep 17 00:00:00 2001 From: Pedro Nastasi Date: Wed, 28 Sep 2022 11:43:39 -0300 Subject: [PATCH 3/3] bugfix: prettier Signed-off-by: Pedro Nastasi --- plugins/search-backend/src/service/router.test.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/plugins/search-backend/src/service/router.test.ts b/plugins/search-backend/src/service/router.test.ts index 100dee9117..f26f191ecd 100644 --- a/plugins/search-backend/src/service/router.test.ts +++ b/plugins/search-backend/src/service/router.test.ts @@ -18,9 +18,7 @@ import { getVoidLogger } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; import { PermissionEvaluator } from '@backstage/plugin-permission-common'; import { IndexBuilder } from '@backstage/plugin-search-backend-node'; -import { - SearchEngine, -} from '@backstage/plugin-search-common'; +import { SearchEngine } from '@backstage/plugin-search-common'; import express from 'express'; import request from 'supertest';