From 9abdd90b1256937cdf87e06faedf8c1bdfbda4cd Mon Sep 17 00:00:00 2001 From: Tomasz Ciecierski Date: Wed, 17 May 2023 15:02:58 +0200 Subject: [PATCH] [Defend workflows] Replace differenceWith with xorWith and remove the helper (#157966) --- .../rule_management/utils/utils.ts | 15 --------------- .../rule_management/utils/validate.ts | 11 +++++++---- 2 files changed, 7 insertions(+), 19 deletions(-) diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/utils/utils.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/utils/utils.ts index ef93a79091937..0e8d52e4ce84e 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/utils/utils.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/utils/utils.ts @@ -6,7 +6,6 @@ */ import { partition } from 'lodash/fp'; -import { differenceWith, isEqual } from 'lodash'; import pMap from 'p-map'; import { v4 as uuidv4 } from 'uuid'; @@ -385,17 +384,3 @@ export const convertAlertSuppressionToSnake = ( missing_fields_strategy: input.missingFieldsStrategy, } : undefined; - -export const findDifferenceInArrays = ( - arr1: T1[] = [], - arr2: T2[] = [] -): Array => { - if (arr1.length === 0) { - return arr2; - } - - if (arr2.length === 0) { - return arr1; - } - return differenceWith(arr1, arr2, isEqual); -}; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/utils/validate.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/utils/validate.ts index 0cd91fe050da2..4544a735c960f 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/utils/validate.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/utils/validate.ts @@ -9,6 +9,7 @@ import { validateNonExact } from '@kbn/securitysolution-io-ts-utils'; import type { PartialRule } from '@kbn/alerting-plugin/server'; import type { Rule } from '@kbn/alerting-plugin/common'; +import { isEqual, xorWith } from 'lodash'; import { RESPONSE_ACTION_API_COMMANDS_TO_CONSOLE_COMMAND_MAP, RESPONSE_CONSOLE_ACTION_COMMANDS_TO_REQUIRED_AUTHZ, @@ -26,7 +27,7 @@ import type { RuleParams, RuleAlertType, UnifiedQueryRuleParams } from '../../ru import { isAlertType } from '../../rule_schema'; import type { BulkError } from '../../routes/utils'; import { createBulkErrorObject } from '../../routes/utils'; -import { findDifferenceInArrays, transform } from './utils'; +import { transform } from './utils'; import { internalRuleToAPIResponse } from '../normalization/rule_converters'; import type { ResponseAction, @@ -95,12 +96,14 @@ export const validateResponseActionsPermissions = async ( const endpointAuthz = await securitySolution.getEndpointAuthz(); - const differences = findDifferenceInArrays( + // finds elements that are not included in both arrays + const symmetricDifference = xorWith( ruleUpdate.response_actions, - existingRule?.params?.responseActions + existingRule?.params?.responseActions, + isEqual ); - differences.forEach((action) => { + symmetricDifference.forEach((action) => { if (!('command' in action?.params)) { return; }