From c887ed421e12e95d4f68f46d7065212f94a01878 Mon Sep 17 00:00:00 2001 From: Milan <111341101+milan-deepfence@users.noreply.github.com> Date: Fri, 5 Jul 2024 12:35:40 +0530 Subject: [PATCH] Integration to send scan summary (#2236) * add send scan summary option * rename variable name * remove from filters and replace by checkbox * corrected typo --- .../apps/dashboard/api-spec.json | 6 +++-- .../models/ModelIntegrationAddReq.ts | 8 ++++++ .../models/ModelIntegrationUpdateReq.ts | 8 ++++++ .../NotificationTypeField.tsx | 26 ++++++++++++++++++- .../components/integration-form/utils.ts | 10 +++++++ .../components/report-form/AdvanceFilter.tsx | 1 - .../integrations/pages/IntegrationAdd.tsx | 2 ++ 7 files changed, 57 insertions(+), 4 deletions(-) diff --git a/deepfence_frontend/apps/dashboard/api-spec.json b/deepfence_frontend/apps/dashboard/api-spec.json index 503677fd85..59f83056a1 100644 --- a/deepfence_frontend/apps/dashboard/api-spec.json +++ b/deepfence_frontend/apps/dashboard/api-spec.json @@ -14587,7 +14587,8 @@ "config": { "type": "object", "additionalProperties": {}, "nullable": true }, "filters": { "$ref": "#/components/schemas/ModelIntegrationFilters" }, "integration_type": { "type": "string" }, - "notification_type": { "type": "string" } + "notification_type": { "type": "string" }, + "send_summary": { "type": "boolean" } } }, "ModelIntegrationFilters": { @@ -14625,7 +14626,8 @@ "filters": { "$ref": "#/components/schemas/ModelIntegrationFilters" }, "id": { "type": "integer" }, "integration_type": { "type": "string" }, - "notification_type": { "type": "string" } + "notification_type": { "type": "string" }, + "send_summary": { "type": "boolean" } } }, "ModelInviteUserRequest": { diff --git a/deepfence_frontend/apps/dashboard/src/api/generated/models/ModelIntegrationAddReq.ts b/deepfence_frontend/apps/dashboard/src/api/generated/models/ModelIntegrationAddReq.ts index f5211dd456..7a68b9abfa 100644 --- a/deepfence_frontend/apps/dashboard/src/api/generated/models/ModelIntegrationAddReq.ts +++ b/deepfence_frontend/apps/dashboard/src/api/generated/models/ModelIntegrationAddReq.ts @@ -50,6 +50,12 @@ export interface ModelIntegrationAddReq { * @memberof ModelIntegrationAddReq */ notification_type: string; + /** + * + * @type {boolean} + * @memberof ModelIntegrationAddReq + */ + send_summary?: boolean; } /** @@ -77,6 +83,7 @@ export function ModelIntegrationAddReqFromJSONTyped(json: any, ignoreDiscriminat 'filters': !exists(json, 'filters') ? undefined : ModelIntegrationFiltersFromJSON(json['filters']), 'integration_type': json['integration_type'], 'notification_type': json['notification_type'], + 'send_summary': !exists(json, 'send_summary') ? undefined : json['send_summary'], }; } @@ -93,6 +100,7 @@ export function ModelIntegrationAddReqToJSON(value?: ModelIntegrationAddReq | nu 'filters': ModelIntegrationFiltersToJSON(value.filters), 'integration_type': value.integration_type, 'notification_type': value.notification_type, + 'send_summary': value.send_summary, }; } diff --git a/deepfence_frontend/apps/dashboard/src/api/generated/models/ModelIntegrationUpdateReq.ts b/deepfence_frontend/apps/dashboard/src/api/generated/models/ModelIntegrationUpdateReq.ts index d6406f84a5..c000619da9 100644 --- a/deepfence_frontend/apps/dashboard/src/api/generated/models/ModelIntegrationUpdateReq.ts +++ b/deepfence_frontend/apps/dashboard/src/api/generated/models/ModelIntegrationUpdateReq.ts @@ -56,6 +56,12 @@ export interface ModelIntegrationUpdateReq { * @memberof ModelIntegrationUpdateReq */ notification_type?: string; + /** + * + * @type {boolean} + * @memberof ModelIntegrationUpdateReq + */ + send_summary?: boolean; } /** @@ -82,6 +88,7 @@ export function ModelIntegrationUpdateReqFromJSONTyped(json: any, ignoreDiscrimi 'id': !exists(json, 'id') ? undefined : json['id'], 'integration_type': !exists(json, 'integration_type') ? undefined : json['integration_type'], 'notification_type': !exists(json, 'notification_type') ? undefined : json['notification_type'], + 'send_summary': !exists(json, 'send_summary') ? undefined : json['send_summary'], }; } @@ -99,6 +106,7 @@ export function ModelIntegrationUpdateReqToJSON(value?: ModelIntegrationUpdateRe 'id': value.id, 'integration_type': value.integration_type, 'notification_type': value.notification_type, + 'send_summary': value.send_summary, }; } diff --git a/deepfence_frontend/apps/dashboard/src/features/integrations/components/integration-form/NotificationTypeField.tsx b/deepfence_frontend/apps/dashboard/src/features/integrations/components/integration-form/NotificationTypeField.tsx index 620ebb733d..0be331d329 100644 --- a/deepfence_frontend/apps/dashboard/src/features/integrations/components/integration-form/NotificationTypeField.tsx +++ b/deepfence_frontend/apps/dashboard/src/features/integrations/components/integration-form/NotificationTypeField.tsx @@ -1,14 +1,16 @@ import { useState } from 'react'; import { useParams } from 'react-router-dom'; -import { Listbox, ListboxOption } from 'ui-components'; +import { Checkbox, Listbox, ListboxOption, Tooltip } from 'ui-components'; import { ModelIntegrationListResp } from '@/api/generated'; +import { InfoStandardIcon } from '@/components/icons/common/InfoStandard'; import { ScanTypeEnum } from '@/types/common'; import { AdvancedFilters } from './AdvancedFilter'; import { FieldSelection } from './FieldSelection'; import { TextInputType } from './TextInputType'; import { + canSendScanSummary, getDisplayNotification, IntegrationType, isCloudComplianceNotification, @@ -18,6 +20,24 @@ import { isVulnerabilityNotification, } from './utils'; +const SendScanSummaryCheckbox = ({ sendSummaryOnly }: { sendSummaryOnly: boolean }) => { + const [checked, setChecked] = useState(sendSummaryOnly); + return ( +
+ setChecked(check)} + /> + +
+ +
+
+
+ ); +}; export const NotificationTypeField = ({ fieldErrors, defaultNotificationType, @@ -80,6 +100,10 @@ export const NotificationTypeField = ({ ) : null} */} + {canSendScanSummary(notificationType, integrationType) ? ( + + ) : null} + {isCloudComplianceNotification(notificationType) && integrationType !== IntegrationType.s3 && ( { } return notificationType; }; + +export const canSendScanSummary = (notificationType: string, integrationType: string) => { + return ( + ((integrationType === IntegrationType.slack || + integrationType === IntegrationType.microsoftTeams) && + scanTypes.includes(notificationType)) || + isComplianceNotification(notificationType) || + isCloudComplianceNotification(notificationType) + ); +}; diff --git a/deepfence_frontend/apps/dashboard/src/features/integrations/components/report-form/AdvanceFilter.tsx b/deepfence_frontend/apps/dashboard/src/features/integrations/components/report-form/AdvanceFilter.tsx index 7639d34bce..7887d4ab84 100644 --- a/deepfence_frontend/apps/dashboard/src/features/integrations/components/report-form/AdvanceFilter.tsx +++ b/deepfence_frontend/apps/dashboard/src/features/integrations/components/report-form/AdvanceFilter.tsx @@ -1,4 +1,3 @@ -import { upperCase } from 'lodash-es'; import { useMemo, useState } from 'react'; import { Listbox, ListboxOption } from 'ui-components'; diff --git a/deepfence_frontend/apps/dashboard/src/features/integrations/pages/IntegrationAdd.tsx b/deepfence_frontend/apps/dashboard/src/features/integrations/pages/IntegrationAdd.tsx index cc8a1ad082..439f2eabd5 100644 --- a/deepfence_frontend/apps/dashboard/src/features/integrations/pages/IntegrationAdd.tsx +++ b/deepfence_frontend/apps/dashboard/src/features/integrations/pages/IntegrationAdd.tsx @@ -318,6 +318,7 @@ const action = async ({ request, params }: ActionFunctionArgs): Promise