From 05ea9081a6840cc030ba95879876cc7f16546f38 Mon Sep 17 00:00:00 2001 From: milan-deepfence Date: Tue, 7 Nov 2023 16:41:28 +0530 Subject: [PATCH 1/3] fix(1592): added priority scan --- .../apps/dashboard/api-spec.json | 11 ++- .../src/api/generated/apis/SettingsApi.ts | 76 +++++++++---------- .../models/ModelAddScheduledTaskRequest.ts | 8 ++ .../models/ModelComplianceScanTriggerReq.ts | 8 ++ .../models/ModelMalwareScanTriggerReq.ts | 8 ++ .../models/ModelSecretScanTriggerReq.ts | 8 ++ .../ModelVulnerabilityScanTriggerReq.ts | 8 ++ .../ComplianceScanConfigureForm.tsx | 21 ++++- .../MalwareScanConfigureForm.tsx | 15 +++- .../SecretScanConfigureForm.tsx | 14 +++- .../VulnerabilityScanConfigureForm.tsx | 13 +++- 11 files changed, 143 insertions(+), 47 deletions(-) diff --git a/deepfence_frontend/apps/dashboard/api-spec.json b/deepfence_frontend/apps/dashboard/api-spec.json index 5b2811956d..328875429f 100644 --- a/deepfence_frontend/apps/dashboard/api-spec.json +++ b/deepfence_frontend/apps/dashboard/api-spec.json @@ -7051,9 +7051,9 @@ "/deepfence/scheduled-task/{id}": { "delete": { "tags": ["Settings"], - "summary": "Delete Schedule task", - "description": "Delete Schedule task", - "operationId": "deleteScheduledTask", + "summary": "Delete Custom Schedule task", + "description": "Delete Custom Schedule task", + "operationId": "deleteCustomScheduledTask", "parameters": [ { "name": "id", @@ -11317,6 +11317,7 @@ "cron_expr": { "type": "string" }, "description": { "type": "string" }, "filters": { "$ref": "#/components/schemas/ModelScanFilter" }, + "is_priority": { "type": "boolean" }, "node_ids": { "type": "array", "items": { "$ref": "#/components/schemas/ModelNodeIdentifier" }, @@ -11879,6 +11880,7 @@ "nullable": true }, "filters": { "$ref": "#/components/schemas/ModelScanFilter" }, + "is_priority": { "type": "boolean" }, "node_ids": { "type": "array", "items": { "$ref": "#/components/schemas/ModelNodeIdentifier" }, @@ -12467,6 +12469,7 @@ "type": "object", "properties": { "filters": { "$ref": "#/components/schemas/ModelScanFilter" }, + "is_priority": { "type": "boolean" }, "node_ids": { "type": "array", "items": { "$ref": "#/components/schemas/ModelNodeIdentifier" }, @@ -13144,6 +13147,7 @@ "type": "object", "properties": { "filters": { "$ref": "#/components/schemas/ModelScanFilter" }, + "is_priority": { "type": "boolean" }, "node_ids": { "type": "array", "items": { "$ref": "#/components/schemas/ModelNodeIdentifier" }, @@ -13487,6 +13491,7 @@ "type": "object", "properties": { "filters": { "$ref": "#/components/schemas/ModelScanFilter" }, + "is_priority": { "type": "boolean" }, "node_ids": { "type": "array", "items": { "$ref": "#/components/schemas/ModelNodeIdentifier" }, diff --git a/deepfence_frontend/apps/dashboard/src/api/generated/apis/SettingsApi.ts b/deepfence_frontend/apps/dashboard/src/api/generated/apis/SettingsApi.ts index b59cbc3df0..018ccc89eb 100644 --- a/deepfence_frontend/apps/dashboard/src/api/generated/apis/SettingsApi.ts +++ b/deepfence_frontend/apps/dashboard/src/api/generated/apis/SettingsApi.ts @@ -66,12 +66,12 @@ export interface AddScheduledTaskRequest { modelAddScheduledTaskRequest?: ModelAddScheduledTaskRequest; } -export interface DeleteEmailConfigurationRequest { - configId: string; +export interface DeleteCustomScheduledTaskRequest { + id: number; } -export interface DeleteScheduledTaskRequest { - id: number; +export interface DeleteEmailConfigurationRequest { + configId: string; } export interface GetUserAuditLogsRequest { @@ -132,36 +132,36 @@ export interface SettingsApiInterface { addScheduledTask(requestParameters: AddScheduledTaskRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise; /** - * Delete Email Smtp / ses Configurations in system - * @summary Delete Email Configurations - * @param {string} configId + * Delete Custom Schedule task + * @summary Delete Custom Schedule task + * @param {number} id * @param {*} [options] Override http request option. * @throws {RequiredError} * @memberof SettingsApiInterface */ - deleteEmailConfigurationRaw(requestParameters: DeleteEmailConfigurationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>; + deleteCustomScheduledTaskRaw(requestParameters: DeleteCustomScheduledTaskRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>; /** - * Delete Email Smtp / ses Configurations in system - * Delete Email Configurations + * Delete Custom Schedule task + * Delete Custom Schedule task */ - deleteEmailConfiguration(requestParameters: DeleteEmailConfigurationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise; + deleteCustomScheduledTask(requestParameters: DeleteCustomScheduledTaskRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise; /** - * Delete Schedule task - * @summary Delete Schedule task - * @param {number} id + * Delete Email Smtp / ses Configurations in system + * @summary Delete Email Configurations + * @param {string} configId * @param {*} [options] Override http request option. * @throws {RequiredError} * @memberof SettingsApiInterface */ - deleteScheduledTaskRaw(requestParameters: DeleteScheduledTaskRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>; + deleteEmailConfigurationRaw(requestParameters: DeleteEmailConfigurationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>; /** - * Delete Schedule task - * Delete Schedule task + * Delete Email Smtp / ses Configurations in system + * Delete Email Configurations */ - deleteScheduledTask(requestParameters: DeleteScheduledTaskRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise; + deleteEmailConfiguration(requestParameters: DeleteEmailConfigurationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise; /** * Get Email Smtp / ses Configurations in system @@ -374,12 +374,12 @@ export class SettingsApi extends runtime.BaseAPI implements SettingsApiInterface } /** - * Delete Email Smtp / ses Configurations in system - * Delete Email Configurations + * Delete Custom Schedule task + * Delete Custom Schedule task */ - async deleteEmailConfigurationRaw(requestParameters: DeleteEmailConfigurationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters.configId === null || requestParameters.configId === undefined) { - throw new runtime.RequiredError('configId','Required parameter requestParameters.configId was null or undefined when calling deleteEmailConfiguration.'); + async deleteCustomScheduledTaskRaw(requestParameters: DeleteCustomScheduledTaskRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters.id === null || requestParameters.id === undefined) { + throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling deleteCustomScheduledTask.'); } const queryParameters: any = {}; @@ -395,7 +395,7 @@ export class SettingsApi extends runtime.BaseAPI implements SettingsApiInterface } } const response = await this.request({ - path: `/deepfence/settings/email/{config_id}`.replace(`{${"config_id"}}`, encodeURIComponent(String(requestParameters.configId))), + path: `/deepfence/scheduled-task/{id}`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))), method: 'DELETE', headers: headerParameters, query: queryParameters, @@ -405,20 +405,20 @@ export class SettingsApi extends runtime.BaseAPI implements SettingsApiInterface } /** - * Delete Email Smtp / ses Configurations in system - * Delete Email Configurations + * Delete Custom Schedule task + * Delete Custom Schedule task */ - async deleteEmailConfiguration(requestParameters: DeleteEmailConfigurationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - await this.deleteEmailConfigurationRaw(requestParameters, initOverrides); + async deleteCustomScheduledTask(requestParameters: DeleteCustomScheduledTaskRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + await this.deleteCustomScheduledTaskRaw(requestParameters, initOverrides); } /** - * Delete Schedule task - * Delete Schedule task + * Delete Email Smtp / ses Configurations in system + * Delete Email Configurations */ - async deleteScheduledTaskRaw(requestParameters: DeleteScheduledTaskRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters.id === null || requestParameters.id === undefined) { - throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling deleteScheduledTask.'); + async deleteEmailConfigurationRaw(requestParameters: DeleteEmailConfigurationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters.configId === null || requestParameters.configId === undefined) { + throw new runtime.RequiredError('configId','Required parameter requestParameters.configId was null or undefined when calling deleteEmailConfiguration.'); } const queryParameters: any = {}; @@ -434,7 +434,7 @@ export class SettingsApi extends runtime.BaseAPI implements SettingsApiInterface } } const response = await this.request({ - path: `/deepfence/scheduled-task/{id}`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))), + path: `/deepfence/settings/email/{config_id}`.replace(`{${"config_id"}}`, encodeURIComponent(String(requestParameters.configId))), method: 'DELETE', headers: headerParameters, query: queryParameters, @@ -444,11 +444,11 @@ export class SettingsApi extends runtime.BaseAPI implements SettingsApiInterface } /** - * Delete Schedule task - * Delete Schedule task + * Delete Email Smtp / ses Configurations in system + * Delete Email Configurations */ - async deleteScheduledTask(requestParameters: DeleteScheduledTaskRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - await this.deleteScheduledTaskRaw(requestParameters, initOverrides); + async deleteEmailConfiguration(requestParameters: DeleteEmailConfigurationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + await this.deleteEmailConfigurationRaw(requestParameters, initOverrides); } /** diff --git a/deepfence_frontend/apps/dashboard/src/api/generated/models/ModelAddScheduledTaskRequest.ts b/deepfence_frontend/apps/dashboard/src/api/generated/models/ModelAddScheduledTaskRequest.ts index b88bb38b66..d928263ca8 100644 --- a/deepfence_frontend/apps/dashboard/src/api/generated/models/ModelAddScheduledTaskRequest.ts +++ b/deepfence_frontend/apps/dashboard/src/api/generated/models/ModelAddScheduledTaskRequest.ts @@ -68,6 +68,12 @@ export interface ModelAddScheduledTaskRequest { * @memberof ModelAddScheduledTaskRequest */ filters: ModelScanFilter; + /** + * + * @type {boolean} + * @memberof ModelAddScheduledTaskRequest + */ + is_priority?: boolean; /** * * @type {Array} @@ -125,6 +131,7 @@ export function ModelAddScheduledTaskRequestFromJSONTyped(json: any, ignoreDiscr 'cron_expr': !exists(json, 'cron_expr') ? undefined : json['cron_expr'], 'description': !exists(json, 'description') ? undefined : json['description'], 'filters': ModelScanFilterFromJSON(json['filters']), + 'is_priority': !exists(json, 'is_priority') ? undefined : json['is_priority'], 'node_ids': (json['node_ids'] === null ? null : (json['node_ids'] as Array).map(ModelNodeIdentifierFromJSON)), 'scan_config': (json['scan_config'] === null ? null : (json['scan_config'] as Array).map(ModelVulnerabilityScanConfigLanguageFromJSON)), }; @@ -144,6 +151,7 @@ export function ModelAddScheduledTaskRequestToJSON(value?: ModelAddScheduledTask 'cron_expr': value.cron_expr, 'description': value.description, 'filters': ModelScanFilterToJSON(value.filters), + 'is_priority': value.is_priority, 'node_ids': (value.node_ids === null ? null : (value.node_ids as Array).map(ModelNodeIdentifierToJSON)), 'scan_config': (value.scan_config === null ? null : (value.scan_config as Array).map(ModelVulnerabilityScanConfigLanguageToJSON)), }; diff --git a/deepfence_frontend/apps/dashboard/src/api/generated/models/ModelComplianceScanTriggerReq.ts b/deepfence_frontend/apps/dashboard/src/api/generated/models/ModelComplianceScanTriggerReq.ts index c31fc708c1..aac32c3973 100644 --- a/deepfence_frontend/apps/dashboard/src/api/generated/models/ModelComplianceScanTriggerReq.ts +++ b/deepfence_frontend/apps/dashboard/src/api/generated/models/ModelComplianceScanTriggerReq.ts @@ -44,6 +44,12 @@ export interface ModelComplianceScanTriggerReq { * @memberof ModelComplianceScanTriggerReq */ filters: ModelScanFilter; + /** + * + * @type {boolean} + * @memberof ModelComplianceScanTriggerReq + */ + is_priority?: boolean; /** * * @type {Array} @@ -76,6 +82,7 @@ export function ModelComplianceScanTriggerReqFromJSONTyped(json: any, ignoreDisc 'benchmark_types': json['benchmark_types'], 'filters': ModelScanFilterFromJSON(json['filters']), + 'is_priority': !exists(json, 'is_priority') ? undefined : json['is_priority'], 'node_ids': (json['node_ids'] === null ? null : (json['node_ids'] as Array).map(ModelNodeIdentifierFromJSON)), }; } @@ -91,6 +98,7 @@ export function ModelComplianceScanTriggerReqToJSON(value?: ModelComplianceScanT 'benchmark_types': value.benchmark_types, 'filters': ModelScanFilterToJSON(value.filters), + 'is_priority': value.is_priority, 'node_ids': (value.node_ids === null ? null : (value.node_ids as Array).map(ModelNodeIdentifierToJSON)), }; } diff --git a/deepfence_frontend/apps/dashboard/src/api/generated/models/ModelMalwareScanTriggerReq.ts b/deepfence_frontend/apps/dashboard/src/api/generated/models/ModelMalwareScanTriggerReq.ts index a2f4ead440..5da6f6744d 100644 --- a/deepfence_frontend/apps/dashboard/src/api/generated/models/ModelMalwareScanTriggerReq.ts +++ b/deepfence_frontend/apps/dashboard/src/api/generated/models/ModelMalwareScanTriggerReq.ts @@ -38,6 +38,12 @@ export interface ModelMalwareScanTriggerReq { * @memberof ModelMalwareScanTriggerReq */ filters: ModelScanFilter; + /** + * + * @type {boolean} + * @memberof ModelMalwareScanTriggerReq + */ + is_priority?: boolean; /** * * @type {Array} @@ -68,6 +74,7 @@ export function ModelMalwareScanTriggerReqFromJSONTyped(json: any, ignoreDiscrim return { 'filters': ModelScanFilterFromJSON(json['filters']), + 'is_priority': !exists(json, 'is_priority') ? undefined : json['is_priority'], 'node_ids': (json['node_ids'] === null ? null : (json['node_ids'] as Array).map(ModelNodeIdentifierFromJSON)), }; } @@ -82,6 +89,7 @@ export function ModelMalwareScanTriggerReqToJSON(value?: ModelMalwareScanTrigger return { 'filters': ModelScanFilterToJSON(value.filters), + 'is_priority': value.is_priority, 'node_ids': (value.node_ids === null ? null : (value.node_ids as Array).map(ModelNodeIdentifierToJSON)), }; } diff --git a/deepfence_frontend/apps/dashboard/src/api/generated/models/ModelSecretScanTriggerReq.ts b/deepfence_frontend/apps/dashboard/src/api/generated/models/ModelSecretScanTriggerReq.ts index 0a29455da1..9223725401 100644 --- a/deepfence_frontend/apps/dashboard/src/api/generated/models/ModelSecretScanTriggerReq.ts +++ b/deepfence_frontend/apps/dashboard/src/api/generated/models/ModelSecretScanTriggerReq.ts @@ -38,6 +38,12 @@ export interface ModelSecretScanTriggerReq { * @memberof ModelSecretScanTriggerReq */ filters: ModelScanFilter; + /** + * + * @type {boolean} + * @memberof ModelSecretScanTriggerReq + */ + is_priority?: boolean; /** * * @type {Array} @@ -68,6 +74,7 @@ export function ModelSecretScanTriggerReqFromJSONTyped(json: any, ignoreDiscrimi return { 'filters': ModelScanFilterFromJSON(json['filters']), + 'is_priority': !exists(json, 'is_priority') ? undefined : json['is_priority'], 'node_ids': (json['node_ids'] === null ? null : (json['node_ids'] as Array).map(ModelNodeIdentifierFromJSON)), }; } @@ -82,6 +89,7 @@ export function ModelSecretScanTriggerReqToJSON(value?: ModelSecretScanTriggerRe return { 'filters': ModelScanFilterToJSON(value.filters), + 'is_priority': value.is_priority, 'node_ids': (value.node_ids === null ? null : (value.node_ids as Array).map(ModelNodeIdentifierToJSON)), }; } diff --git a/deepfence_frontend/apps/dashboard/src/api/generated/models/ModelVulnerabilityScanTriggerReq.ts b/deepfence_frontend/apps/dashboard/src/api/generated/models/ModelVulnerabilityScanTriggerReq.ts index 208337b494..d44655e2fe 100644 --- a/deepfence_frontend/apps/dashboard/src/api/generated/models/ModelVulnerabilityScanTriggerReq.ts +++ b/deepfence_frontend/apps/dashboard/src/api/generated/models/ModelVulnerabilityScanTriggerReq.ts @@ -44,6 +44,12 @@ export interface ModelVulnerabilityScanTriggerReq { * @memberof ModelVulnerabilityScanTriggerReq */ filters: ModelScanFilter; + /** + * + * @type {boolean} + * @memberof ModelVulnerabilityScanTriggerReq + */ + is_priority?: boolean; /** * * @type {Array} @@ -81,6 +87,7 @@ export function ModelVulnerabilityScanTriggerReqFromJSONTyped(json: any, ignoreD return { 'filters': ModelScanFilterFromJSON(json['filters']), + 'is_priority': !exists(json, 'is_priority') ? undefined : json['is_priority'], 'node_ids': (json['node_ids'] === null ? null : (json['node_ids'] as Array).map(ModelNodeIdentifierFromJSON)), 'scan_config': (json['scan_config'] === null ? null : (json['scan_config'] as Array).map(ModelVulnerabilityScanConfigLanguageFromJSON)), }; @@ -96,6 +103,7 @@ export function ModelVulnerabilityScanTriggerReqToJSON(value?: ModelVulnerabilit return { 'filters': ModelScanFilterToJSON(value.filters), + 'is_priority': value.is_priority, 'node_ids': (value.node_ids === null ? null : (value.node_ids as Array).map(ModelNodeIdentifierToJSON)), 'scan_config': (value.scan_config === null ? null : (value.scan_config as Array).map(ModelVulnerabilityScanConfigLanguageToJSON)), }; diff --git a/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/ComplianceScanConfigureForm.tsx b/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/ComplianceScanConfigureForm.tsx index 51dc309345..b276b22e14 100644 --- a/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/ComplianceScanConfigureForm.tsx +++ b/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/ComplianceScanConfigureForm.tsx @@ -9,7 +9,7 @@ import { } from 'react-router-dom'; import { toast } from 'sonner'; import { cn } from 'tailwind-preset'; -import { Button, TableSkeleton, Tabs } from 'ui-components'; +import { Button, Checkbox, TableSkeleton, Tabs } from 'ui-components'; import { CircleSpinner, createColumnHelper, Switch, Table } from 'ui-components'; import { getComplianceApiClient, getSettingsApiClient } from '@/api/api'; @@ -23,7 +23,7 @@ import { ScheduleScanForm } from '@/components/scan-configure-forms/ScheduleScan import { TruncatedText } from '@/components/TruncatedText'; import { ActionEnumType } from '@/features/postures/data-component/toggleControlApiAction'; import { invalidateAllQueries, queries } from '@/queries'; -import { ComplianceScanNodeTypeEnum } from '@/types/common'; +import { ComplianceScanNodeTypeEnum, isCloudNode, isCloudOrgNode } from '@/types/common'; import { get403Message } from '@/utils/403'; import { apiWrapper } from '@/utils/api'; @@ -76,6 +76,9 @@ export const CLOUDS = [ ComplianceScanNodeTypeEnum.gcp_org, ]; +const isKubernetesNode = (nodeType: ComplianceScanNodeTypeEnum) => + nodeType == ComplianceScanNodeTypeEnum.kubernetes_cluster; + export const scanPostureApiAction = async ({ request, }: ActionFunctionArgs): Promise => { @@ -86,7 +89,7 @@ export const scanPostureApiAction = async ({ const checkTypes = body._checkTypes.toString().replace('SOC2', 'soc_2'); const isCloudScan = CLOUDS.includes(nodeType as ComplianceScanNodeTypeEnum); - if (nodeType === ComplianceScanNodeTypeEnum.kubernetes_cluster) { + if (isKubernetesNode(nodeType as ComplianceScanNodeTypeEnum)) { nodeType = 'cluster'; } else if (isCloudScan) { nodeType = 'cloud_account'; @@ -97,6 +100,8 @@ export const scanPostureApiAction = async ({ const scheduleDescription = formData.get('scheduleDescription'); const scheduleCron = `0 ${formData.get('scheduleCron')}`; + const isPriorityScan = formData.get('isPriorityScan') === 'on'; + const requestBody: ModelComplianceScanTriggerReq = { benchmark_types: checkTypes.toLowerCase().split(','), filters: { @@ -106,6 +111,7 @@ export const scanPostureApiAction = async ({ host_scan_filter: { filter_in: null }, image_scan_filter: { filter_in: null }, }, + is_priority: isPriorityScan, node_ids: nodeIds.map((nodeId) => ({ node_id: nodeId, node_type: nodeType as ModelNodeIdentifierNodeTypeEnum, @@ -537,6 +543,15 @@ export const ComplianceScanConfigureForm = ({ ) : null} + {!isCloudNode(nodeType) && + !isCloudOrgNode(nodeType) && + !isKubernetesNode(nodeType) ? ( +
+
Priority scan
+ +
+ ) : null} + {showScheduleScanOptions && }
diff --git a/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/MalwareScanConfigureForm.tsx b/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/MalwareScanConfigureForm.tsx index 78a2eedeaf..6fdaf926d7 100644 --- a/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/MalwareScanConfigureForm.tsx +++ b/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/MalwareScanConfigureForm.tsx @@ -1,7 +1,7 @@ import { useEffect, useState } from 'react'; import { ActionFunctionArgs, useFetcher } from 'react-router-dom'; import { toast } from 'sonner'; -import { Button, Radio } from 'ui-components'; +import { Button, Checkbox, Radio } from 'ui-components'; import { getMalwareApiClient, getSettingsApiClient } from '@/api/api'; import { @@ -53,6 +53,9 @@ export type ScanActionReturnType = { }; }; +const shouldSetPriorityScan = (nodeType: MalwareScanNodeTypeEnum) => + nodeType !== MalwareScanNodeTypeEnum.kubernetes_cluster; + export const scanMalwareApiAction = async ({ request, }: ActionFunctionArgs): Promise => { @@ -68,6 +71,8 @@ export const scanMalwareApiAction = async ({ const scheduleDescription = formData.get('scheduleDescription'); const scheduleCron = `0 ${formData.get('scheduleCron')}`; + const isPriorityScan = formData.get('isPriorityScan') === 'on'; + const getNodeType = (nodeType: MalwareScanNodeTypeEnum | 'container_image') => { let _nodeType = nodeType as ModelNodeIdentifierNodeTypeEnum; if (nodeType === MalwareScanNodeTypeEnum.imageTag || nodeType === 'container_image') { @@ -123,6 +128,7 @@ export const scanMalwareApiAction = async ({ filter_in, }, }, + is_priority: isPriorityScan, node_ids: nodeIds.map((nodeId, index) => ({ node_id: nodeId, node_type: getNodeType( @@ -311,6 +317,13 @@ export const MalwareScanConfigureForm = ({
) : null} + {shouldSetPriorityScan(nodeType as MalwareScanNodeTypeEnum) ? ( +
+
Priority scan
+ +
+ ) : null} + {showScheduleScanOptions && } {fetcherData?.message && ( diff --git a/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/SecretScanConfigureForm.tsx b/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/SecretScanConfigureForm.tsx index 04b348ebaa..9fa2266719 100644 --- a/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/SecretScanConfigureForm.tsx +++ b/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/SecretScanConfigureForm.tsx @@ -1,7 +1,7 @@ import { useEffect, useState } from 'react'; import { ActionFunctionArgs, useFetcher } from 'react-router-dom'; import { toast } from 'sonner'; -import { Button, Radio } from 'ui-components'; +import { Button, Checkbox, Radio } from 'ui-components'; import { getSecretApiClient, getSettingsApiClient } from '@/api/api'; import { @@ -52,6 +52,8 @@ type ScanActionReturnType = { bulkScanId: string; }; }; +const shouldSetPriorityScan = (nodeType: SecretScanNodeTypeEnum) => + nodeType !== SecretScanNodeTypeEnum.kubernetes_cluster; export const scanSecretApiAction = async ({ request, @@ -68,6 +70,8 @@ export const scanSecretApiAction = async ({ const scheduleDescription = formData.get('scheduleDescription'); const scheduleCron = `0 ${formData.get('scheduleCron')}`; + const isPriorityScan = formData.get('isPriorityScan') === 'on'; + const getNodeType = (nodeType: SecretScanNodeTypeEnum | 'container_image') => { let _nodeType = nodeType as ModelNodeIdentifierNodeTypeEnum; if (nodeType === SecretScanNodeTypeEnum.imageTag || nodeType === 'container_image') { @@ -123,6 +127,7 @@ export const scanSecretApiAction = async ({ filter_in, }, }, + is_priority: isPriorityScan, node_ids: nodeIds.map((nodeId, index) => ({ node_id: nodeId, node_type: getNodeType( @@ -309,6 +314,13 @@ export const SecretScanConfigureForm = ({ ) : null} + {shouldSetPriorityScan(nodeType as SecretScanNodeTypeEnum) ? ( +
+
Priority scan
+ +
+ ) : null} + {showScheduleScanOptions && } {fetcherData?.message && ( diff --git a/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/VulnerabilityScanConfigureForm.tsx b/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/VulnerabilityScanConfigureForm.tsx index 3c404570b2..37901f1576 100644 --- a/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/VulnerabilityScanConfigureForm.tsx +++ b/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/VulnerabilityScanConfigureForm.tsx @@ -117,6 +117,8 @@ export type ScanActionReturnType = { bulkScanId: string; }; }; +const shouldSetPriorityScan = (nodeType: VulnerabilityScanNodeTypeEnum) => + nodeType !== VulnerabilityScanNodeTypeEnum.kubernetes_cluster; export const scanVulnerabilityApiAction = async ({ request, @@ -134,6 +136,8 @@ export const scanVulnerabilityApiAction = async ({ const scheduleDescription = formData.get('scheduleDescription'); const scheduleCron = `0 ${formData.get('scheduleCron')}`; + const isPriorityScan = formData.get('isPriorityScan') === 'on'; + const getNodeType = (nodeType: VulnerabilityScanNodeTypeEnum | 'container_image') => { let _nodeType = nodeType as ModelNodeIdentifierNodeTypeEnum; if ( @@ -202,6 +206,7 @@ export const scanVulnerabilityApiAction = async ({ filter_in, }, }, + is_priority: isPriorityScan, node_ids: nodeIds.map((nodeId, index) => ({ node_id: nodeId, node_type: getNodeType( @@ -387,7 +392,7 @@ export const VulnerabilityScanConfigureForm = ({ } }; - // in case of registry scan nodeType will be always be of same type + // in case of registry or kubernetes_cluster scan nodeType will be always be of same type const nodeType = data.nodes[0].nodeType; const isNodeTypeRegistryType = nodeType === 'registry' || isNodeTypeARegistryType(nodeType); @@ -476,6 +481,12 @@ export const VulnerabilityScanConfigureForm = ({ ) : null} {wantAdvanceOptions && } + {shouldSetPriorityScan(nodeType as VulnerabilityScanNodeTypeEnum) ? ( +
+
Priority scan
+ +
+ ) : null} {showScheduleScanOptions && } From 6c74c1ebf09f2bed70e3759c7ac584eb0f1b3aea Mon Sep 17 00:00:00 2001 From: milan-deepfence Date: Wed, 8 Nov 2023 17:14:24 +0530 Subject: [PATCH 2/3] rename label --- .../scan-configure-forms/ComplianceScanConfigureForm.tsx | 2 +- .../scan-configure-forms/MalwareScanConfigureForm.tsx | 2 +- .../components/scan-configure-forms/SecretScanConfigureForm.tsx | 2 +- .../scan-configure-forms/VulnerabilityScanConfigureForm.tsx | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/ComplianceScanConfigureForm.tsx b/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/ComplianceScanConfigureForm.tsx index b276b22e14..1760fa0698 100644 --- a/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/ComplianceScanConfigureForm.tsx +++ b/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/ComplianceScanConfigureForm.tsx @@ -548,7 +548,7 @@ export const ComplianceScanConfigureForm = ({ !isKubernetesNode(nodeType) ? (
Priority scan
- +
) : null} diff --git a/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/MalwareScanConfigureForm.tsx b/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/MalwareScanConfigureForm.tsx index 6fdaf926d7..732eb1d52a 100644 --- a/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/MalwareScanConfigureForm.tsx +++ b/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/MalwareScanConfigureForm.tsx @@ -320,7 +320,7 @@ export const MalwareScanConfigureForm = ({ {shouldSetPriorityScan(nodeType as MalwareScanNodeTypeEnum) ? (
Priority scan
- +
) : null} diff --git a/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/SecretScanConfigureForm.tsx b/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/SecretScanConfigureForm.tsx index 9fa2266719..eecf021dcc 100644 --- a/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/SecretScanConfigureForm.tsx +++ b/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/SecretScanConfigureForm.tsx @@ -317,7 +317,7 @@ export const SecretScanConfigureForm = ({ {shouldSetPriorityScan(nodeType as SecretScanNodeTypeEnum) ? (
Priority scan
- +
) : null} diff --git a/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/VulnerabilityScanConfigureForm.tsx b/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/VulnerabilityScanConfigureForm.tsx index 37901f1576..a75b18c1ae 100644 --- a/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/VulnerabilityScanConfigureForm.tsx +++ b/deepfence_frontend/apps/dashboard/src/components/scan-configure-forms/VulnerabilityScanConfigureForm.tsx @@ -484,7 +484,7 @@ export const VulnerabilityScanConfigureForm = ({ {shouldSetPriorityScan(nodeType as VulnerabilityScanNodeTypeEnum) ? (
Priority scan
- +
) : null} From dff2cb8aacc5f183e7d393d83780e032c46696a6 Mon Sep 17 00:00:00 2001 From: milan-deepfence Date: Wed, 8 Nov 2023 20:45:28 +0530 Subject: [PATCH 3/3] rename function name in spec --- deepfence_frontend/apps/dashboard/src/api/api.ts | 2 +- .../dashboard/src/features/settings/pages/ScheduledJobs.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/deepfence_frontend/apps/dashboard/src/api/api.ts b/deepfence_frontend/apps/dashboard/src/api/api.ts index 0efb585184..1b55ade900 100644 --- a/deepfence_frontend/apps/dashboard/src/api/api.ts +++ b/deepfence_frontend/apps/dashboard/src/api/api.ts @@ -332,7 +332,7 @@ export function getSettingsApiClient() { settingsApi.uploadVulnerabilityDatabase.bind(settingsApi), getScheduledTasks: settingsApi.getScheduledTasks.bind(settingsApi), updateScheduledTask: settingsApi.updateScheduledTask.bind(settingsApi), - deleteScheduledTask: settingsApi.deleteScheduledTask.bind(settingsApi), + deleteCustomScheduledTask: settingsApi.deleteCustomScheduledTask.bind(settingsApi), addScheduledTask: settingsApi.addScheduledTask.bind(settingsApi), }; } diff --git a/deepfence_frontend/apps/dashboard/src/features/settings/pages/ScheduledJobs.tsx b/deepfence_frontend/apps/dashboard/src/features/settings/pages/ScheduledJobs.tsx index 63c6982f5d..e19418fff3 100644 --- a/deepfence_frontend/apps/dashboard/src/features/settings/pages/ScheduledJobs.tsx +++ b/deepfence_frontend/apps/dashboard/src/features/settings/pages/ScheduledJobs.tsx @@ -71,7 +71,7 @@ export const action = async ({ } else if (body.actionType === ActionEnumType.DELETE) { const ids = (formData.getAll('ids[]') ?? []) as string[]; const deleteApi = apiWrapper({ - fn: getSettingsApiClient().deleteScheduledTask, + fn: getSettingsApiClient().deleteCustomScheduledTask, }); const deleteResponse = await deleteApi({ id: parseInt(ids[0], 10),