Skip to content

Commit 317d354

Browse files
Merge pull request #39 from alitheg/defectdojo-integration-point
Defectdojo integration point
2 parents 86dece5 + bb913e3 commit 317d354

File tree

4 files changed

+105
-2
lines changed

4 files changed

+105
-2
lines changed

src/i18n/locales/en.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,7 @@
269269
"templates": "Templates",
270270
"integrations": "Integrations",
271271
"fortify_ssc": "Fortify SSC",
272+
"defectdojo": "DefectDojo",
272273
"kenna_security": "Kenna Security",
273274
"threadfix": "ThreadFix",
274275
"access_management": "Access Management",
@@ -318,6 +319,7 @@
318319
"url": "URL",
319320
"enabled": "Enabled",
320321
"integration_fortify_ssc_enable": "Enable Fortify SSC integration",
322+
"integration_defectdojo_enable": "Enable DefectDojo integration",
321323
"synchronization_cadence_minutes": "Synchronization cadence (in minutes)",
322324
"synchronization_cadence_restart_required": "Restarting Dependency-Track is required for cadence changes to take effect",
323325
"integration_kenna_enable": "Enable Kenna Security integration",

src/views/administration/AdminMenu.vue

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,11 @@
157157
name: this.$t('admin.fortify_ssc'),
158158
href: "#integrationsFortifySscTab"
159159
},
160+
{
161+
component: "DefectDojo",
162+
name: this.$t('admin.defectdojo'),
163+
href: "#integrationsDefectDojoTab"
164+
},
160165
{
161166
component: "KennaSecurity",
162167
name: this.$t('admin.kenna_security'),

src/views/administration/Administration.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import Templates from "./notifications/Templates";
4242
// Integration plugins
4343
import FortifySsc from "./integrations/FortifySsc";
44+
import DefectDojo from "./integrations/DefectDojo";
4445
import KennaSecurity from "./integrations/KennaSecurity";
4546
// Access Management plugins
4647
import LdapUsers from "./accessmanagement/LdapUsers";
@@ -58,7 +59,7 @@
5859
InternalAnalyzer, NpmAuditAnalyzer, OssIndexAnalyzer, VulnDbAnalyzer,
5960
Composer, Gem, Hex, Maven, Npm, Nuget, Python,
6061
Alerts, Templates,
61-
FortifySsc, KennaSecurity,
62+
FortifySsc, DefectDojo, KennaSecurity,
6263
LdapUsers, ManagedUsers, OidcUsers, OidcGroups, Teams, Permissions
6364
},
6465
created() {
@@ -96,4 +97,3 @@
9697
}
9798
}
9899
</style>
99-
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
<template>
2+
<b-card no-body :header="header">
3+
<b-card-body>
4+
<c-switch id="enabled" color="primary" v-model="enabled" label v-bind="labelIcon" />{{$t('admin.integration_defectdojo_enable')}}
5+
<b-validated-input-group-form-input
6+
id="defectdojo-cadence"
7+
:label="$t('admin.synchronization_cadence_minutes')"
8+
input-group-size="mb-3"
9+
rules="required"
10+
type="number"
11+
v-model="cadence"
12+
lazy="true"
13+
/>
14+
<p class="text-muted">{{ $t('admin.synchronization_cadence_restart_required') }}</p>
15+
<b-validated-input-group-form-input
16+
id="defectdojo-url"
17+
:label="$t('admin.url')"
18+
input-group-size="mb-3"
19+
rules="required"
20+
type="url"
21+
v-model="url"
22+
lazy="true"
23+
/>
24+
<b-validated-input-group-form-input
25+
id="defectdojo-apiKey"
26+
:label="$t('admin.api_token')"
27+
input-group-size="mb-3"
28+
rules="required"
29+
type="password"
30+
v-model="apiKey"
31+
lazy="true"
32+
/>
33+
</b-card-body>
34+
<b-card-footer>
35+
<b-button variant="outline-primary" class="px-4" @click="saveChanges">{{ $t('message.update') }}</b-button>
36+
</b-card-footer>
37+
</b-card>
38+
</template>
39+
40+
<script>
41+
import { Switch as cSwitch } from '@coreui/vue';
42+
import BValidatedInputGroupFormInput from '../../../forms/BValidatedInputGroupFormInput';
43+
import common from "../../../shared/common";
44+
import configPropertyMixin from "../mixins/configPropertyMixin";
45+
46+
export default {
47+
mixins: [configPropertyMixin],
48+
props: {
49+
header: String
50+
},
51+
components: {
52+
cSwitch,
53+
BValidatedInputGroupFormInput
54+
},
55+
data() {
56+
return {
57+
enabled: false,
58+
cadence: '60',
59+
url: '',
60+
apiKey: '',
61+
labelIcon: {
62+
dataOn: '\u2713',
63+
dataOff: '\u2715'
64+
},
65+
}
66+
},
67+
methods: {
68+
saveChanges: function() {
69+
this.updateConfigProperties([
70+
{groupName: 'integrations', propertyName: 'defectdojo.enabled', propertyValue: this.enabled},
71+
{groupName: 'integrations', propertyName: 'defectdojo.sync.cadence', propertyValue: this.cadence},
72+
{groupName: 'integrations', propertyName: 'defectdojo.url', propertyValue: this.url},
73+
{groupName: 'integrations', propertyName: 'defectdojo.apiKey', propertyValue: this.apiKey},
74+
]);
75+
}
76+
},
77+
created () {
78+
this.axios.get(this.configUrl).then((response) => {
79+
let configItems = response.data.filter(function (item) { return item.groupName === "integrations" });
80+
for (let i=0; i<configItems.length; i++) {
81+
let item = configItems[i];
82+
switch (item.propertyName) {
83+
case "defectdojo.enabled":
84+
this.enabled = common.toBoolean(item.propertyValue); break;
85+
case "defectdojo.sync.cadence":
86+
this.cadence = item.propertyValue; break;
87+
case "defectdojo.url":
88+
this.url = item.propertyValue; break;
89+
case "defectdojo.apiKey":
90+
this.apiKey = item.propertyValue; break;
91+
}
92+
}
93+
});
94+
}
95+
}
96+
</script>

0 commit comments

Comments
 (0)