From 6828938792c8b8525faf1982f16d08d45510a0a3 Mon Sep 17 00:00:00 2001 From: Artur Fedorov Date: Fri, 21 Jul 2023 16:51:20 +0200 Subject: [PATCH 1/3] This MR adds ability to add branch exceptions Security result policy can have branch exceptions option configured via UI Changelog: changed EE: true --- .../components/branch_exception_selector.vue | 82 +++++++++++++++++++ .../components/constants.js | 13 +++ .../components/policy_editor/constants.js | 1 + .../scan_result_policy/lib/from_yaml.js | 1 + .../license_scan_rule_builder.vue | 22 ++++- .../security_scan_rule_builder.vue | 22 ++++- .../branch_exception_selector_spec.js | 72 ++++++++++++++++ .../license_scan_rule_builder_spec.js | 61 +++++++++++++- .../security_scan_rule_builder_spec.js | 50 +++++++++++ locale/gitlab.pot | 19 ++++- 10 files changed, 338 insertions(+), 5 deletions(-) create mode 100644 ee/app/assets/javascripts/security_orchestration/components/branch_exception_selector.vue create mode 100644 ee/spec/frontend/security_orchestration/components/branch_exception_selector_spec.js diff --git a/ee/app/assets/javascripts/security_orchestration/components/branch_exception_selector.vue b/ee/app/assets/javascripts/security_orchestration/components/branch_exception_selector.vue new file mode 100644 index 00000000000000..f08cb98547219d --- /dev/null +++ b/ee/app/assets/javascripts/security_orchestration/components/branch_exception_selector.vue @@ -0,0 +1,82 @@ + + + diff --git a/ee/app/assets/javascripts/security_orchestration/components/constants.js b/ee/app/assets/javascripts/security_orchestration/components/constants.js index 86d42ac3c055e6..48d7a58bfa77b3 100644 --- a/ee/app/assets/javascripts/security_orchestration/components/constants.js +++ b/ee/app/assets/javascripts/security_orchestration/components/constants.js @@ -20,3 +20,16 @@ export const POLICY_TYPE_COMPONENT_OPTIONS = { }; export const POLICIES_LIST_CONTAINER_CLASS = '.js-security-policies-container-wrapper'; + +export const EXCEPTION_KEY = 'exception'; +export const NO_EXCEPTION_KEY = 'no_exception'; +export const EXCEPTION_TYPE_ITEMS = [ + { + value: EXCEPTION_KEY, + text: s__('SecurityOrchestration|Exceptions'), + }, + { + value: NO_EXCEPTION_KEY, + text: s__('SecurityOrchestration|No exceptions'), + }, +]; diff --git a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/constants.js b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/constants.js index 64b3aac3218013..c30f731832c318 100644 --- a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/constants.js +++ b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/constants.js @@ -157,6 +157,7 @@ export const VALID_SCAN_RESULT_BRANCH_TYPE_OPTIONS = [ export const BRANCHES_KEY = 'branches'; export const BRANCH_TYPE_KEY = 'branch_type'; +export const BRANCH_EXCEPTIONS_KEY = 'branch_exceptions'; export const HUMANIZED_BRANCH_TYPE_TEXT_DICT = { [ALL_BRANCHES.value]: s__('SecurityOrchestration|any branch'), diff --git a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result_policy/lib/from_yaml.js b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result_policy/lib/from_yaml.js index 7baf940d379cbd..57fffb4bc59d43 100644 --- a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result_policy/lib/from_yaml.js +++ b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result_policy/lib/from_yaml.js @@ -19,6 +19,7 @@ export const fromYaml = ({ manifest, validateRuleMode = false }) => { 'type', 'branches', 'branch_type', + 'branch_exceptions', 'license_states', 'license_types', 'match_on_inclusion', diff --git a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result_policy/license_scan_rule_builder.vue b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result_policy/license_scan_rule_builder.vue index ccafe61cc4c1d0..81b94c2d867e51 100644 --- a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result_policy/license_scan_rule_builder.vue +++ b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result_policy/license_scan_rule_builder.vue @@ -1,8 +1,10 @@ @@ -94,6 +106,14 @@ export default { @set-branch-type="setBranchType" /> + + diff --git a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result_policy/security_scan_rule_builder.vue b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result_policy/security_scan_rule_builder.vue index a7644c6b077596..6c4542ba804034 100644 --- a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result_policy/security_scan_rule_builder.vue +++ b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result_policy/security_scan_rule_builder.vue @@ -2,6 +2,8 @@ import { GlSprintf } from '@gitlab/ui'; import { s__ } from '~/locale'; import { REPORT_TYPES_DEFAULT, SEVERITY_LEVELS } from 'ee/security_dashboard/store/constants'; +import { NAMESPACE_TYPES } from 'ee/security_orchestration/constants'; +import BranchExceptionSelector from 'ee/security_orchestration/components/branch_exception_selector.vue'; import PolicyRuleMultiSelect from '../../policy_rule_multi_select.vue'; import { ANY_OPERATOR, @@ -38,10 +40,11 @@ export default { NEWLY_DETECTED, PREVIOUSLY_EXISTING, scanResultRuleCopy: s__( - 'ScanResultPolicy|When %{scanType} %{scanners} runs against the %{branches} and find(s) %{vulnerabilitiesNumber} %{boldDescription} of the following criteria:', + 'ScanResultPolicy|When %{scanType} %{scanners} runs against the %{branches} %{branchExceptions} and find(s) %{vulnerabilitiesNumber} %{boldDescription} of the following criteria:', ), components: { BaseLayoutComponent, + BranchExceptionSelector, GlSprintf, PolicyRuleBranchSelection, PolicyRuleMultiSelect, @@ -78,6 +81,9 @@ export default { }; }, computed: { + projectNamespace() { + return this.namespaceType === NAMESPACE_TYPES.PROJECT; + }, severityLevelsToAdd: { get() { return this.initRule.severity_levels; @@ -89,6 +95,9 @@ export default { branchTypes() { return SCAN_RESULT_BRANCH_TYPE_OPTIONS(this.namespaceType); }, + branchExceptions() { + return this.initRule.branch_exceptions; + }, scannersToAdd: { get() { return this.initRule.scanners.length === 0 @@ -154,6 +163,9 @@ export default { setBranchType(value) { this.$emit('changed', value); }, + setBranchException(value) { + this.triggerChanged(value); + }, isFilterSelected(filter) { return Boolean(this.filters[filter]); }, @@ -289,6 +301,14 @@ export default { /> + +