From 7c6bde6dfcddd7c0f4c73e032bc1b93aaf336f2b Mon Sep 17 00:00:00 2001 From: Ievgen Sorokopud Date: Thu, 27 Jun 2024 09:03:47 +0200 Subject: [PATCH] [Security Solution][Detections] Broken value lists (#186990) ## Summary While investigation one of the SDHs, I noticed that our value lists modal does not show list items anymore and shows `Failed to load list items. You can change the search query or contact your administrator` error instead. The root cause is update API which were migrated in [this PR](https://github.com/elastic/kibana/pull/185865) to OpenAPI specifications. One of the query parameters was updated to be non-empty strings when that was not required before. Since those list APIs are public, we should keep them as they were specified before, otherwise it makes breaking changes. Previously `filter` parameter was specified as a string without limitation of being non-empty: - [Find list schema](https://github.com/elastic/kibana/blob/main/packages/kbn-securitysolution-io-ts-list-types/src/request/find_list_schema/index.ts) - [Find list item schema](https://github.com/elastic/kibana/blob/main/packages/kbn-securitysolution-io-ts-list-types/src/request/find_list_item_schema/index.ts) **Current broken behaviour**: https://github.com/elastic/kibana/assets/2700761/383dfd0f-5358-4325-88fe-b4820b4e2726 **Fixed state**: https://github.com/elastic/kibana/assets/2700761/2d9adcc2-a55e-4aac-a8ff-5921222067c4 cc @maximpn --- .../api/find_list/find_list.gen.ts | 2 +- .../api/find_list/find_list.schema.yaml | 2 +- .../api/find_list_item/find_list_item.gen.ts | 2 +- .../find_list_item/find_list_item.schema.yaml | 2 +- .../items/find_list_items.ts | 22 +++++++++++++++++++ 5 files changed, 26 insertions(+), 4 deletions(-) diff --git a/packages/kbn-securitysolution-lists-common/api/find_list/find_list.gen.ts b/packages/kbn-securitysolution-lists-common/api/find_list/find_list.gen.ts index 22bd50fcf0f351..96fcaa5eefca45 100644 --- a/packages/kbn-securitysolution-lists-common/api/find_list/find_list.gen.ts +++ b/packages/kbn-securitysolution-lists-common/api/find_list/find_list.gen.ts @@ -24,7 +24,7 @@ export type FindListsCursor = z.infer; export const FindListsCursor = NonEmptyString; export type FindListsFilter = z.infer; -export const FindListsFilter = NonEmptyString; +export const FindListsFilter = z.string(); export type FindListsRequestQuery = z.infer; export const FindListsRequestQuery = z.object({ diff --git a/packages/kbn-securitysolution-lists-common/api/find_list/find_list.schema.yaml b/packages/kbn-securitysolution-lists-common/api/find_list/find_list.schema.yaml index 7fa5f1ac581ac7..236fa747599ac1 100644 --- a/packages/kbn-securitysolution-lists-common/api/find_list/find_list.schema.yaml +++ b/packages/kbn-securitysolution-lists-common/api/find_list/find_list.schema.yaml @@ -116,4 +116,4 @@ components: $ref: '../../../kbn-openapi-common/schemas/primitives.schema.yaml#/components/schemas/NonEmptyString' FindListsFilter: - $ref: '../../../kbn-openapi-common/schemas/primitives.schema.yaml#/components/schemas/NonEmptyString' + type: string diff --git a/packages/kbn-securitysolution-lists-common/api/find_list_item/find_list_item.gen.ts b/packages/kbn-securitysolution-lists-common/api/find_list_item/find_list_item.gen.ts index ef23adf7a7dcdc..6288ece0cf179b 100644 --- a/packages/kbn-securitysolution-lists-common/api/find_list_item/find_list_item.gen.ts +++ b/packages/kbn-securitysolution-lists-common/api/find_list_item/find_list_item.gen.ts @@ -25,7 +25,7 @@ export type FindListItemsCursor = z.infer; export const FindListItemsCursor = NonEmptyString; export type FindListItemsFilter = z.infer; -export const FindListItemsFilter = NonEmptyString; +export const FindListItemsFilter = z.string(); export type FindListItemsRequestQuery = z.infer; export const FindListItemsRequestQuery = z.object({ diff --git a/packages/kbn-securitysolution-lists-common/api/find_list_item/find_list_item.schema.yaml b/packages/kbn-securitysolution-lists-common/api/find_list_item/find_list_item.schema.yaml index 92dbc361b7ad2b..67df0f4e8d031b 100644 --- a/packages/kbn-securitysolution-lists-common/api/find_list_item/find_list_item.schema.yaml +++ b/packages/kbn-securitysolution-lists-common/api/find_list_item/find_list_item.schema.yaml @@ -122,4 +122,4 @@ components: $ref: '../../../kbn-openapi-common/schemas/primitives.schema.yaml#/components/schemas/NonEmptyString' FindListItemsFilter: - $ref: '../../../kbn-openapi-common/schemas/primitives.schema.yaml#/components/schemas/NonEmptyString' + type: string diff --git a/x-pack/test/security_solution_api_integration/test_suites/lists_and_exception_lists/lists_items/trial_license_complete_tier/items/find_list_items.ts b/x-pack/test/security_solution_api_integration/test_suites/lists_and_exception_lists/lists_items/trial_license_complete_tier/items/find_list_items.ts index aed7d61acf7b23..d7817ea86cd235 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/lists_and_exception_lists/lists_items/trial_license_complete_tier/items/find_list_items.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/lists_and_exception_lists/lists_items/trial_license_complete_tier/items/find_list_items.ts @@ -79,6 +79,28 @@ export default ({ getService }: FtrProviderContext): void => { }); }); + it('should accept empty string filter', async () => { + await supertest + .post(LIST_URL) + .set('kbn-xsrf', 'true') + .send(getCreateMinimalListSchemaMock()) + .expect(200); + + const { body } = await supertest + .get(`${LIST_ITEM_URL}/_find?list_id=${LIST_ID}&filter=`) + .set('kbn-xsrf', 'true') + .send() + .expect(200); + + expect(body).toEqual({ + cursor: 'WzBd', + data: [], + page: 1, + per_page: 20, + total: 0, + }); + }); + it('should return a single list item when a single list item is loaded from a find with defaults added', async () => { const listMock = getCreateMinimalListSchemaMock(); const listItemMock = getCreateMinimalListItemSchemaMock();