From 2a6f680c08a482efe1d4e062a9decbfa54260886 Mon Sep 17 00:00:00 2001 From: Ephraim Mensah Date: Tue, 11 Feb 2025 17:58:15 +0000 Subject: [PATCH 01/53] added gitlab integration & routing Signed-off-by: Ephraim Mensah --- src/i18n/locales/en.json | 2 + src/router/index.js | 19 +++++ src/views/administration/AdminMenu.vue | 5 ++ .../administration/integrations/Gitlab.vue | 78 +++++++++++++++++++ 4 files changed, 104 insertions(+) create mode 100644 src/views/administration/integrations/Gitlab.vue diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index 5143ced0..50c69692 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -114,6 +114,8 @@ "general_template_configuration": "General template configuration", "github": "GitHub", "github_advisories": "GitHub Advisories", + "gitlab_integration": "GitLab", + "integration_gitlab_enable": "Enable GitLab Integration", "go_modules": "Go Modules", "group": "Group", "hackage": "Hackage", diff --git a/src/router/index.js b/src/router/index.js index 10f3eb65..0554557f 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -989,6 +989,25 @@ function configRoutes() { ], }, }, + { + path: 'integrations/gitlab', + name: 'Gitlab', + component: () => + import('@/views/administration/integrations/Gitlab'), + meta: { + title: i18n.t('message.administration'), + i18n: 'message.administration', + sectionPath: '/admin', + sectionName: 'Admin', + permissions: [ + 'SYSTEM_CONFIGURATION', + 'SYSTEM_CONFIGURATION_CREATE', + 'SYSTEM_CONFIGURATION_READ', + 'SYSTEM_CONFIGURATION_UPDATE', + 'SYSTEM_CONFIGURATION_DELETE', + ], + }, + }, { path: 'integrations/kennaSecurity', component: KennaSecurity, diff --git a/src/views/administration/AdminMenu.vue b/src/views/administration/AdminMenu.vue index 599fb567..22e2c028 100644 --- a/src/views/administration/AdminMenu.vue +++ b/src/views/administration/AdminMenu.vue @@ -329,6 +329,11 @@ export default { name: this.$t('admin.defectdojo'), route: 'integrations/defectDojo', }, + { + component: 'GitlabIntegration', + name: this.$t('admin.gitlab_integration'), + route: 'integrations/gitlab', + }, { component: 'FortifySsc', name: this.$t('admin.fortify_ssc'), diff --git a/src/views/administration/integrations/Gitlab.vue b/src/views/administration/integrations/Gitlab.vue new file mode 100644 index 00000000..33f91fcd --- /dev/null +++ b/src/views/administration/integrations/Gitlab.vue @@ -0,0 +1,78 @@ + + + From a5fa97e0cdeb32ddf291f44140417859b8ff7274 Mon Sep 17 00:00:00 2001 From: Ephraim Mensah Date: Tue, 11 Feb 2025 18:56:13 +0000 Subject: [PATCH 02/53] fix the error on gitlab enabled not found Signed-off-by: Ephraim Mensah --- .../administration/integrations/Gitlab.vue | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/views/administration/integrations/Gitlab.vue b/src/views/administration/integrations/Gitlab.vue index 33f91fcd..9414d6dc 100644 --- a/src/views/administration/integrations/Gitlab.vue +++ b/src/views/administration/integrations/Gitlab.vue @@ -9,11 +9,6 @@ v-bind="labelIcon" />{{ $t('admin.integration_gitlab_enable') }} - - {{ - $t('message.update') - }} - @@ -24,6 +19,11 @@ import axios from 'axios'; // Import axios import common from '../../../shared/common'; import configPropertyMixin from '../mixins/configPropertyMixin'; +const GITLAB_ENABLED = { + getGroupName: () => 'integrations', + getPropertyName: () => 'gitlab.enabled', +}; + export default { mixins: [configPropertyMixin], props: { @@ -60,9 +60,7 @@ export default { .then((response) => { const configItems = response.data.filter((item) => { return ( - // eslint-disable-next-line no-undef item.groupName === GITLAB_ENABLED.getGroupName() && - // eslint-disable-next-line no-undef item.propertyName === GITLAB_ENABLED.getPropertyName() ); }); @@ -72,6 +70,13 @@ export default { }) .catch((error) => { console.error('Error fetching configuration data:', error); + if (error.response) { + console.error('Error response:', error.response); + } else if (error.request) { + console.error('Error request:', error.request); + } else { + console.error('Error message:', error.message); + } }); }, }; From 8d951847ef00c319388d2163a72573f336ae4348 Mon Sep 17 00:00:00 2001 From: Ephraim Mensah Date: Wed, 12 Feb 2025 21:43:50 +0000 Subject: [PATCH 03/53] clean up the code Signed-off-by: Ephraim Mensah --- .../administration/integrations/Gitlab.vue | 50 +++++++------------ 1 file changed, 18 insertions(+), 32 deletions(-) diff --git a/src/views/administration/integrations/Gitlab.vue b/src/views/administration/integrations/Gitlab.vue index 9414d6dc..1c945e74 100644 --- a/src/views/administration/integrations/Gitlab.vue +++ b/src/views/administration/integrations/Gitlab.vue @@ -9,6 +9,11 @@ v-bind="labelIcon" />{{ $t('admin.integration_gitlab_enable') }} + + {{ + $t('message.update') + }} + @@ -19,11 +24,6 @@ import axios from 'axios'; // Import axios import common from '../../../shared/common'; import configPropertyMixin from '../mixins/configPropertyMixin'; -const GITLAB_ENABLED = { - getGroupName: () => 'integrations', - getPropertyName: () => 'gitlab.enabled', -}; - export default { mixins: [configPropertyMixin], props: { @@ -42,11 +42,9 @@ export default { try { this.updateConfigProperties([ { - // eslint-disable-next-line no-undef - groupName: GITLAB_ENABLED.getGroupName(), - // eslint-disable-next-line no-undef - propertyName: GITLAB_ENABLED.getPropertyName(), - propertyValue: String.valueOf(this.enabled), + groupName: 'integrations', + propertyName: 'gitlab.enabled', + propertyValue: this.enabled, }, ]); } catch (error) { @@ -55,29 +53,17 @@ export default { }, }, created() { - this.axios - .get(this.configUrl) - .then((response) => { - const configItems = response.data.filter((item) => { - return ( - item.groupName === GITLAB_ENABLED.getGroupName() && - item.propertyName === GITLAB_ENABLED.getPropertyName() - ); - }); - if (configItems.length > 0) { - this.enabled = common.toBoolean(configItems[0].propertyValue); - } - }) - .catch((error) => { - console.error('Error fetching configuration data:', error); - if (error.response) { - console.error('Error response:', error.response); - } else if (error.request) { - console.error('Error request:', error.request); - } else { - console.error('Error message:', error.message); - } + this.axios.get(this.configUrl).then((response) => { + const configItems = response.data.filter((item) => { + return ( + item.groupName === 'integrations' && + item.propertyName === 'gitlab.enabled' + ); }); + if (configItems.length > 0) { + this.enabled = common.toBoolean(configItems[0].propertyValue); + } + }); }, }; From 680b4ea2fffb5bff7afc54375a42911f5c107734 Mon Sep 17 00:00:00 2001 From: Allen Shearin Date: Tue, 25 Feb 2025 14:29:04 -0700 Subject: [PATCH 04/53] add role and routing Signed-off-by: Allen Shearin --- src/i18n/locales/en.json | 2 + src/router/index.js | 18 + src/views/administration/AdminMenu.vue | 5 + .../accessmanagement/CreateRoleModal.vue | 70 +++ .../administration/accessmanagement/Roles.vue | 493 ++++++++++++++++++ 5 files changed, 588 insertions(+) create mode 100644 src/views/administration/accessmanagement/CreateRoleModal.vue create mode 100644 src/views/administration/accessmanagement/Roles.vue diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index fc165610..1ad5f4de 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -799,6 +799,8 @@ "response_tooltip": "A response to the vulnerability by the manufacturer, supplier, or project responsible for the affected component or service", "risk_score": "Risk Score", "risk_type": "Risk Type", + "role": "Role", + "roles": "Roles", "rollback": "Rollback", "score": "Score", "search": "Search", diff --git a/src/router/index.js b/src/router/index.js index 10f3eb65..20bf9e76 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -94,6 +94,7 @@ const OidcUsers = () => import('@/views/administration/accessmanagement/OidcUsers'); const OidcGroups = () => import('@/views/administration/accessmanagement/OidcGroups'); +const Roles = () => import('@/views/administration/accessmanagement/Roles'); const Teams = () => import('@/views/administration/accessmanagement/Teams'); const Permissions = () => import('@/views/administration/accessmanagement/Permissions'); @@ -1075,6 +1076,23 @@ function configRoutes() { ], }, }, + { + path: 'accessManagement/roles', + component: Roles, + meta: { + title: i18n.t('message.administration'), + i18n: 'message.administration', + sectionPath: '/admin', + sectionName: 'Admin', + permissions: [ + 'ACCESS_MANAGEMENT', + 'ACCESS_MANAGEMENT_CREATE', + 'ACCESS_MANAGEMENT_READ', + 'ACCESS_MANAGEMENT_UPDATE', + 'ACCESS_MANAGEMENT_DELETE', + ], + }, + }, { path: 'accessManagement/teams', component: Teams, diff --git a/src/views/administration/AdminMenu.vue b/src/views/administration/AdminMenu.vue index 599fb567..cc65b1e5 100644 --- a/src/views/administration/AdminMenu.vue +++ b/src/views/administration/AdminMenu.vue @@ -377,6 +377,11 @@ export default { name: this.$t('admin.oidc_groups'), route: 'accessManagement/oidcGroups', }, + { + component: 'Roles', + name: this.$t('admin.roles'), + route: 'accessManagement/roles', + }, { component: 'Teams', name: this.$t('admin.teams'), diff --git a/src/views/administration/accessmanagement/CreateRoleModal.vue b/src/views/administration/accessmanagement/CreateRoleModal.vue new file mode 100644 index 00000000..9919525c --- /dev/null +++ b/src/views/administration/accessmanagement/CreateRoleModal.vue @@ -0,0 +1,70 @@ + + + diff --git a/src/views/administration/accessmanagement/Roles.vue b/src/views/administration/accessmanagement/Roles.vue new file mode 100644 index 00000000..2bd683c7 --- /dev/null +++ b/src/views/administration/accessmanagement/Roles.vue @@ -0,0 +1,493 @@ + + + From 396735abbe5d4ca34d4553d7dd51cebb9fc9f6a5 Mon Sep 17 00:00:00 2001 From: Allen Shearin Date: Tue, 25 Feb 2025 15:44:02 -0700 Subject: [PATCH 05/53] update english locale file, add role to Administration file, typo correction Signed-off-by: Allen Shearin --- src/i18n/locales/en.json | 10 ++++++++-- src/views/administration/Administration.vue | 2 ++ .../accessmanagement/CreateRoleModal.vue | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index 1ad5f4de..c364f057 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -64,6 +64,7 @@ "create_oidc_group": "Create Group", "create_oidc_user": "Create OpenID Connect User", "create_repository": "Create Repository", + "create_role": "Create Role", "create_team": "Create Team", "create_template": "Create Template", "create_user": "Create User", @@ -218,6 +219,7 @@ "required_fullname": "Fullname is required", "required_oidc_group_name": "Name is required", "required_password": "Password is required", + "required_role_name": "Role name is required", "required_team_name": "Team name is required", "required_username": "Username is required", "restore_default_template": "Restore default templates", @@ -230,6 +232,12 @@ "risk_score_weight_medium": "Medium (default: 3)", "risk_score_weight_unassigned": "Unassigned (default: 5)", "risk_score_weighting_description": "You can customize the weighting of each severity to customize the risk score.", + "role_created": "Role Created", + "role_deleted": "Role Deleted", + "role_description": "Role Description", + "role_name": "Role Name", + "role_permissions": "Role Permissions", + "roles": "Roles", "scope": "Scope", "select_ecosystem": "Select Ecosystems", "select_ldap_group": "Select LDAP Group", @@ -799,8 +807,6 @@ "response_tooltip": "A response to the vulnerability by the manufacturer, supplier, or project responsible for the affected component or service", "risk_score": "Risk Score", "risk_type": "Risk Type", - "role": "Role", - "roles": "Roles", "rollback": "Rollback", "score": "Score", "search": "Search", diff --git a/src/views/administration/Administration.vue b/src/views/administration/Administration.vue index 04a6231f..879ac822 100644 --- a/src/views/administration/Administration.vue +++ b/src/views/administration/Administration.vue @@ -76,6 +76,7 @@ import OidcGroups from './accessmanagement/OidcGroups'; import OidcUsers from './accessmanagement/OidcUsers'; import Permissions from './accessmanagement/Permissions'; import PortfolioAccessControl from './accessmanagement/PortfolioAccessControl'; +import Roles from './accessmanagement/Roles'; import Teams from './accessmanagement/Teams'; export default { @@ -122,6 +123,7 @@ export default { ManagedUsers, OidcUsers, OidcGroups, + Roles, Teams, Permissions, PortfolioAccessControl, diff --git a/src/views/administration/accessmanagement/CreateRoleModal.vue b/src/views/administration/accessmanagement/CreateRoleModal.vue index 9919525c..caa87297 100644 --- a/src/views/administration/accessmanagement/CreateRoleModal.vue +++ b/src/views/administration/accessmanagement/CreateRoleModal.vue @@ -47,7 +47,7 @@ export default { }, methods: { createUser: function () { - let url = `${this.$api.BASE_URL}/${this.$api.URL_role}`; + let url = `${this.$api.BASE_URL}/${this.$api.URL_ROLE}`; this.axios .put(url, { name: this.name, From 59305b0a1b3d6e6f8540373fd459f1030be0d528 Mon Sep 17 00:00:00 2001 From: Allen Shearin Date: Wed, 26 Feb 2025 17:37:49 -0700 Subject: [PATCH 06/53] refine role tab, add role api entry Signed-off-by: Allen Shearin --- src/shared/api.json | 1 + .../accessmanagement/CreateRoleModal.vue | 5 +- .../administration/accessmanagement/Roles.vue | 340 ++---------------- 3 files changed, 42 insertions(+), 304 deletions(-) diff --git a/src/shared/api.json b/src/shared/api.json index a38230cb..83a82aff 100644 --- a/src/shared/api.json +++ b/src/shared/api.json @@ -42,6 +42,7 @@ "URL_POLICY_VIOLATION_ANALYSIS": "api/v1/violation/analysis", "URL_PROJECT": "api/v1/project", "URL_REPOSITORY": "api/v1/repository", + "URL_ROLE": "api/v1/role", "URL_SEARCH": "api/v1/search", "URL_SERVICE": "api/v1/service", "URL_TAG": "api/v1/tag", diff --git a/src/views/administration/accessmanagement/CreateRoleModal.vue b/src/views/administration/accessmanagement/CreateRoleModal.vue index caa87297..0847b0ed 100644 --- a/src/views/administration/accessmanagement/CreateRoleModal.vue +++ b/src/views/administration/accessmanagement/CreateRoleModal.vue @@ -1,6 +1,6 @@ @@ -22,44 +22,39 @@ import xssFilters from 'xss-filters'; import common from '../../../shared/common'; import i18n from '../../../i18n'; -import CreateTeamModal from './CreateTeamModal'; +import CreateRoleModal from './CreateRoleModal'; import bootstrapTableMixin from '../../../mixins/bootstrapTableMixin'; import EventBus from '../../../shared/eventbus'; import ActionableListGroupItem from '../../components/ActionableListGroupItem'; -import ApiKeyListGroupItem from './ApiKeyListGroupItem.vue'; -import SelectLdapGroupModal from './SelectLdapGroupModal'; -import SelectOidcGroupModal from './SelectOidcGroupModal'; -import SelectPermissionModal from './SelectPermissionModal'; import permissionsMixin from '../../../mixins/permissionsMixin'; import { Switch as cSwitch } from '@coreui/vue'; import BInputGroupFormInput from '../../../forms/BInputGroupFormInput'; - export default { props: { header: String, }, mixins: [bootstrapTableMixin], components: { - CreateTeamModal, + CreateRoleModal, }, mounted() { - EventBus.$on('admin:teams:rowUpdate', (index, row) => { + EventBus.$on('admin:roles:rowUpdate', (index, row) => { this.$refs.table.updateRow({ index: index, row: row }); this.$refs.table.expandRow(index); }); - EventBus.$on('admin:teams:rowDeleted', (index, row) => { + EventBus.$on('admin:roles:rowDeleted', (index, row) => { this.refreshTable(); }); }, beforeDestroy() { - EventBus.$off('admin:teams:rowUpdate'); - EventBus.$off('admin:teams:rowDeleted'); + EventBus.$off('admin:roles:rowUpdate'); + EventBus.$off('admin:roles:rowDeleted'); }, data() { return { columns: [ { - title: this.$t('admin.team_name'), + title: this.$t('admin.role_name'), field: 'name', sortable: false, formatter(value, row, index) { @@ -67,33 +62,11 @@ export default { }, }, { - title: this.$t('admin.api_keys'), - field: 'apiKeys', - sortable: false, - formatter(value, row, index) { - return value - ? xssFilters.inHTMLData( - common.valueWithDefault(value.length, '0'), - ) - : 0; - }, - }, - { - title: this.$t('admin.members'), - field: 'members', + title: this.$t('admin.permissions'), + field: 'permissions', sortable: false, formatter(value, row, index) { - let count = 0; - if (row.managedUsers) { - count += row.managedUsers.length; - } - if (row.ldapUsers) { - count += row.ldapUsers.length; - } - if (row.oidcUsers) { - count += row.oidcUsers.length; - } - return count; + return value ? row.permissions.length : 0; }, }, ], @@ -120,17 +93,12 @@ export default { template: ` - - -
- - - - -
-
+ v-debounce:750ms="updateRole" :debounce-events="'keyup'" /> +
@@ -139,75 +107,26 @@ export default {
- -
- - - - -
-
- -
- - - - -
-
- -
- - - -
-
- -
- - - -
-
- -
- - - -
-
- {{ $t('admin.delete_team') }} + {{ $t('admin.delete_role') }}
- - -
`, mixins: [permissionsMixin], components: { cSwitch, ActionableListGroupItem, - ApiKeyListGroupItem, - SelectLdapGroupModal, - SelectOidcGroupModal, - SelectPermissionModal, BInputGroupFormInput, }, data() { return { - team: row, + role: row, name: row.name, - apiKeys: row.apiKeys, + description: row.description, permissions: row.permissions, - ldapGroups: row.mappedLdapGroups, - mappedOidcGroups: row.mappedOidcGroups, - managedUsers: row.managedUsers, - ldapUsers: row.ldapUsers, - oidcUsers: row.oidcUsers, labelIcon: { dataOn: '\u2713', dataOff: '\u2715', @@ -215,169 +134,33 @@ export default { }; }, methods: { - updateTeam: function () { - let url = `${this.$api.BASE_URL}/${this.$api.URL_TEAM}`; + updateRole: function () { + let url = `${this.$api.BASE_URL}/${this.$api.URL_ROLE}`; this.axios .post(url, { - uuid: this.team.uuid, + uuid: this.role.uuid, name: this.name, }) .then((response) => { - this.team = response.data; - EventBus.$emit('admin:teams:rowUpdate', index, this.team); + this.role = response.data; + EventBus.$emit('admin:roles:rowUpdate', index, this.role); this.$toastr.s(this.$t('message.updated')); }) .catch((error) => { this.$toastr.w(this.$t('condition.unsuccessful_action')); }); }, - deleteTeam: function () { - let url = `${this.$api.BASE_URL}/${this.$api.URL_TEAM}`; + deleteRole: function () { + let url = `${this.$api.BASE_URL}/${this.$api.URL_ROLE}`; this.axios .delete(url, { data: { - uuid: this.team.uuid, + uuid: this.role.uuid, }, }) .then((response) => { - EventBus.$emit('admin:teams:rowDeleted', index); - this.$toastr.s(this.$t('admin.team_deleted')); - }) - .catch((error) => { - this.$toastr.w(this.$t('condition.unsuccessful_action')); - }); - }, - createApiKey() { - let url = `${this.$api.BASE_URL}/${this.$api.URL_TEAM}/${this.team.uuid}/key`; - this.axios - .put(url) - .then((response) => { - if (this.apiKeys) { - this.apiKeys.push(response.data); - } else { - this.apiKeys = [response.data]; - } - this.$toastr.s(this.$t('message.updated')); - }) - .catch((error) => { - this.$toastr.w(this.$t('condition.unsuccessful_action')); - }); - }, - removeApiKey: function (apiKey) { - let url = `${this.$api.BASE_URL}/${this.$api.URL_TEAM}/key/${apiKey.key}`; - this.axios - .delete(url) - .then((response) => { - let k = []; - for (let i = 0; i < this.apiKeys.length; i++) { - if (this.apiKeys[i].key !== apiKey.key) { - k.push(this.apiKeys[i]); - } - } - this.apiKeys = k; - this.$toastr.s(this.$t('message.updated')); - }) - .catch((error) => { - this.$toastr.w(this.$t('condition.unsuccessful_action')); - }); - }, - updateLdapGroupSelection: function (selections) { - this.$root.$emit('bv::hide::modal', 'selectLdapGroupModal'); - for (let i = 0; i < selections.length; i++) { - let selection = selections[i]; - let url = `${this.$api.BASE_URL}/${this.$api.URL_LDAP_MAPPING}`; - this.axios - .put(url, { - team: this.team.uuid, - dn: selection.dn, - }) - .then((response) => { - if ( - this.ldapGroups === undefined || - this.ldapGroups === null - ) { - this.ldapGroups = []; - } - this.ldapGroups.push(response.data); - this.ldapGroups.sort(); - this.$toastr.s(this.$t('message.updated')); - }) - .catch((error) => { - if (error.response.status === 304) { - //this.$toastr.w(this.$t('condition.unsuccessful_action')); - } else { - this.$toastr.w( - this.$t('condition.unsuccessful_action'), - ); - } - }); - } - }, - removeLdapGroupMapping: function (mappingUuid) { - let url = `${this.$api.BASE_URL}/${this.$api.URL_LDAP_MAPPING}/${mappingUuid}`; - this.axios - .delete(url) - .then((response) => { - let k = []; - for (let i = 0; i < this.ldapGroups.length; i++) { - if (this.ldapGroups[i].uuid !== mappingUuid) { - k.push(this.ldapGroups[i]); - } - } - this.ldapGroups = k; - this.team.mappedLdapGroups = this.ldapGroups; - this.$toastr.s(this.$t('message.updated')); - }) - .catch((error) => { - this.$toastr.w(this.$t('condition.unsuccessful_action')); - }); - }, - updateOidcGroupSelection: function (selections) { - this.$root.$emit('bv::hide::modal', 'selectOidcGroupModal'); - for (let i = 0; i < selections.length; i++) { - let selection = selections[i]; - let url = `${this.$api.BASE_URL}/${this.$api.URL_OIDC_MAPPING}`; - this.axios - .put(url, { - team: this.team.uuid, - group: selection.uuid, - }) - .then((response) => { - if ( - this.mappedOidcGroups === undefined || - this.mappedOidcGroups === null - ) { - this.mappedOidcGroups = []; - } - this.mappedOidcGroups.push(response.data); - this.mappedOidcGroups.sort(); - this.$toastr.s(this.$t('message.updated')); - }) - .catch((error) => { - if (error.response.status === 304) { - //this.$toastr.w(this.$t('condition.unsuccessful_action')); - } else { - this.$toastr.w( - this.$t('condition.unsuccessful_action'), - ); - } - }); - } - }, - removeOidcGroupMapping: function (mappingUuid) { - let url = `${this.$api.BASE_URL}/${this.$api.URL_OIDC_MAPPING}/${mappingUuid}`; - this.axios - .delete(url) - .then((response) => { - let k = []; - for (let i = 0; i < this.mappedOidcGroups.length; i++) { - if (this.mappedOidcGroups[i].uuid !== mappingUuid) { - k.push(this.mappedOidcGroups[i]); - } - } - this.mappedOidcGroups = k; - this.team.mappedOidcGroups = this.mappedOidcGroups; - this.$toastr.s(this.$t('message.updated')); + EventBus.$emit('admin:roles:rowDeleted', index); + this.$toastr.s(this.$t('admin.role_deleted')); }) .catch((error) => { this.$toastr.w(this.$t('condition.unsuccessful_action')); @@ -387,7 +170,7 @@ export default { this.$root.$emit('bv::hide::modal', 'selectPermissionModal'); for (let i = 0; i < selections.length; i++) { let selection = selections[i]; - let url = `${this.$api.BASE_URL}/${this.$api.URL_PERMISSION}/${selection.name}/team/${this.team.uuid}`; + let url = `${this.$api.BASE_URL}/${this.$api.URL_PERMISSION}/${selection.name}/role/${this.role.uuid}`; this.axios .post(url) .then((response) => { @@ -406,7 +189,7 @@ export default { } }, removePermission: function (permission) { - let url = `${this.$api.BASE_URL}/${this.$api.URL_PERMISSION}/${permission.name}/team/${this.team.uuid}`; + let url = `${this.$api.BASE_URL}/${this.$api.URL_PERMISSION}/${permission.name}/role/${this.role.uuid}`; this.axios .delete(url) .then((response) => { @@ -417,57 +200,12 @@ export default { this.$toastr.w(this.$t('condition.unsuccessful_action')); }); }, - removeUser: function (user) { - let url = `${this.$api.BASE_URL}/${this.$api.URL_USER}/${user.username}/membership`; - this.axios - .delete(url, { - data: { - uuid: this.team.uuid, - }, - }) - .then((response) => { - if (this.managedUsers) { - let k = []; - for (let i = 0; i < this.managedUsers.length; i++) { - if (this.managedUsers[i].username !== user.username) { - k.push(this.managedUsers[i]); - } - } - this.managedUsers = k; - } - if (this.ldapUsers) { - let k = []; - for (let i = 0; i < this.ldapUsers.length; i++) { - if (this.ldapUsers[i].username !== user.username) { - k.push(this.ldapUsers[i]); - } - } - this.ldapUsers = k; - } - if (this.oidcUsers) { - let k = []; - for (let i = 0; i < this.oidcUsers.length; i++) { - if (this.oidcUsers[i].username !== user.username) { - k.push(this.oidcUsers[i]); - } - } - this.oidcUsers = k; - } - this.$toastr.s(this.$t('message.updated')); - }) - .catch((error) => { - this.$toastr.w(this.$t('condition.unsuccessful_action')); - }); - }, - syncVariables: function (team) { - this.team = team; - if (team.apiKeys) { - // Some API server responses don't include API keys. - // Take care to not wipe existing API keys from the UI in those cases. - this.apiKeys = team.apiKeys; + syncVariables: function (role) { + this.role = role; + if (role.description) { + this.description = role.description; } - this.permissions = team.permissions; - //this.ldapGroups = team.mappedLdapGroups; + this.permissions = role.permissions; }, }, }); @@ -478,7 +216,7 @@ export default { res.total = xhr.getResponseHeader('X-Total-Count'); return res; }, - url: `${this.$api.BASE_URL}/${this.$api.URL_TEAM}`, + url: `${this.$api.BASE_URL}/${this.$api.URL_ROLE}`, }, }; }, From d11e7b782ee96e32fadc7ea09d92329126f661f4 Mon Sep 17 00:00:00 2001 From: Allen Shearin Date: Wed, 26 Feb 2025 20:12:46 -0700 Subject: [PATCH 07/53] update language files Signed-off-by: Allen Shearin --- src/i18n/locales/de.json | 7 +++++++ src/i18n/locales/en.json | 3 ++- src/i18n/locales/es.json | 7 +++++++ src/i18n/locales/fr.json | 7 +++++++ src/i18n/locales/hi.json | 7 +++++++ src/i18n/locales/it.json | 7 +++++++ src/i18n/locales/ja.json | 7 +++++++ src/i18n/locales/pl.json | 7 +++++++ src/i18n/locales/pt-BR.json | 7 +++++++ src/i18n/locales/pt.json | 7 +++++++ src/i18n/locales/ru.json | 7 +++++++ src/i18n/locales/uk-UA.json | 7 +++++++ src/i18n/locales/zh.json | 7 +++++++ src/views/administration/accessmanagement/Roles.vue | 2 +- 14 files changed, 87 insertions(+), 2 deletions(-) diff --git a/src/i18n/locales/de.json b/src/i18n/locales/de.json index 12085b92..9fbc337b 100644 --- a/src/i18n/locales/de.json +++ b/src/i18n/locales/de.json @@ -64,6 +64,7 @@ "create_oidc_group": "Gruppe erstellen", "create_oidc_user": "OpenID Connect-Benutzer erstellen", "create_repository": "Repository erstellen", + "create_role": "Rolle erstellen", "create_team": "Team erstellen", "create_template": "Vorlage erstellen", "create_user": "Benutzer erstellen", @@ -77,6 +78,7 @@ "delete_alert": "Alarm löschen", "delete_oidc_group": "Gruppe löschen", "delete_repository": "Repository löschen", + "delete_role": "Rolle löschen", "delete_team": "Team löschen", "delete_template": "Vorlage löschen", "delete_user": "Benutzer löschen", @@ -218,6 +220,7 @@ "required_fullname": "Der vollständige Name ist erforderlich", "required_oidc_group_name": "Name ist erforderlich", "required_password": "Passwort wird benötigt", + "required_role_name": "Rollenname ist erforderlich", "required_team_name": "Teamname ist erforderlich", "required_username": "Benutzername wird benötigt", "restore_default_template": "Standardvorlagen wiederherstellen", @@ -230,6 +233,10 @@ "risk_score_weight_medium": "Mittel (Standard: 3)", "risk_score_weight_unassigned": "Nicht zugewiesen (Standard: 5)", "risk_score_weighting_description": "Sie können die Gewichtung jedes Schweregrads anpassen, um die Risikobewertung anzupassen.", + "roles": "Rollen", + "role_created": "Rolle erstellt", + "role_deleted": "Rolle gelöscht", + "role_name": "Rollenname", "scope": "Scope", "select_ecosystem": "Ökosysteme auswählen", "select_ldap_group": "LDAP-Gruppe auswählen", diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index c364f057..bae2b5ba 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -78,6 +78,7 @@ "delete_alert": "Delete Alert", "delete_oidc_group": "Delete Group", "delete_repository": "Delete Repository", + "delete_role": "Delete Role", "delete_team": "Delete Team", "delete_template": "Delete Template", "delete_user": "Delete User", @@ -232,12 +233,12 @@ "risk_score_weight_medium": "Medium (default: 3)", "risk_score_weight_unassigned": "Unassigned (default: 5)", "risk_score_weighting_description": "You can customize the weighting of each severity to customize the risk score.", + "roles": "Roles", "role_created": "Role Created", "role_deleted": "Role Deleted", "role_description": "Role Description", "role_name": "Role Name", "role_permissions": "Role Permissions", - "roles": "Roles", "scope": "Scope", "select_ecosystem": "Select Ecosystems", "select_ldap_group": "Select LDAP Group", diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json index 33c99de0..2c109ddd 100644 --- a/src/i18n/locales/es.json +++ b/src/i18n/locales/es.json @@ -64,6 +64,7 @@ "create_oidc_group": "Crea un grupo", "create_oidc_user": "Crear usuario de OpenID Connect", "create_repository": "Crear repositorio", + "create_role": "Crear rol", "create_team": "Crear equipo", "create_template": "Crear plantilla", "create_user": "Crear usuario", @@ -78,6 +79,7 @@ "delete_oidc_group": "Eliminar grupo", "delete_repository": "Eliminar repositorio", "delete_team": "Eliminar equipo", + "delete_role": "Delete Role", "delete_template": "Eliminar plantilla", "delete_user": "Borrar usuario", "destination": "Destino", @@ -218,6 +220,7 @@ "required_fullname": "Se requiere el nombre completo", "required_oidc_group_name": "Se requiere el nombre", "required_password": "se requiere contraseña", + "required_role_name": "El nombre del rol es obligatorio", "required_team_name": "El nombre del equipo es obligatorio.", "required_username": "Se requiere nombre de usuario", "restore_default_template": "Restaurar plantillas predeterminadas", @@ -230,6 +233,10 @@ "risk_score_weight_medium": "Medio (predeterminado: 3)", "risk_score_weight_unassigned": "No asignado (predeterminado: 5)", "risk_score_weighting_description": "Puede personalizar la ponderación de cada gravedad para personalizar la puntuación de riesgo.", + "roles": "Roles", + "role_created": "Rol creado", + "role_deleted": "Rol eliminado", + "role_name": "Nombre del rol", "scope": "Alcance", "select_ecosystem": "Seleccionar ecosistemas", "select_ldap_group": "Seleccione grupo LDAP", diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json index da9f48cb..421a3734 100644 --- a/src/i18n/locales/fr.json +++ b/src/i18n/locales/fr.json @@ -64,6 +64,7 @@ "create_oidc_group": "Créer un groupe", "create_oidc_user": "Créer un utilisateur OpenID Connect", "create_repository": "Créer un dépôt", + "create_role": "Créer un rôle", "create_team": "Créer une équipe", "create_template": "Créer un modèle", "create_user": "Créer un utilisateur", @@ -77,6 +78,7 @@ "delete_alert": "Supprimer l'alerte", "delete_oidc_group": "Supprimer le groupe", "delete_repository": "Supprimer le dépôt", + "delete_role":"Supprimer le rôle", "delete_team": "Supprimer l'équipe", "delete_template": "Supprimer le modèle", "delete_user": "Supprimer l'utilisateur", @@ -218,6 +220,7 @@ "required_fullname": "Le nom complet est requis", "required_oidc_group_name": "Le nom est requis", "required_password": "Mot de passe requis", + "required_role_name": "Le nom du rôle est obligatoire", "required_team_name": "Le nom de l'équipe est requis", "required_username": "Nom d'utilisateur est nécessaire", "restore_default_template": "Restaurer les modèles par défaut", @@ -230,6 +233,10 @@ "risk_score_weight_medium": "Moyen (par défaut : 3)", "risk_score_weight_unassigned": "Non attribué (par défaut : 5)", "risk_score_weighting_description": "Vous pouvez personnaliser la pondération de chaque gravité pour personnaliser le score de risque.", + "roles": "Rôles", + "role_created": "Rôle créé", + "role_deleted": "Rôle supprimé", + "role_name": "Nom du rôle", "scope": "Périmètre", "select_ecosystem": "Sélectionner les écosystèmes", "select_ldap_group": "Sélectionner un groupe LDAP", diff --git a/src/i18n/locales/hi.json b/src/i18n/locales/hi.json index a1b80210..da396348 100644 --- a/src/i18n/locales/hi.json +++ b/src/i18n/locales/hi.json @@ -64,6 +64,7 @@ "create_oidc_group": "समूह बनाना", "create_oidc_user": "OpenID कनेक्ट उपयोगकर्ता बनाएँ", "create_repository": "रिपॉजिटरी बनाएं", + "create_role": "भूमिका बनाएँ", "create_team": "टीम बनाएं", "create_template": "टेम्पलेट बनाएं", "create_user": "उपयोगकर्ता बनाइये", @@ -77,6 +78,7 @@ "delete_alert": "अलर्ट हटाएं", "delete_oidc_group": "समूह हटाएं", "delete_repository": "रिपॉजिटरी हटाएँ", + "delete_role": "भूमिका हटाएँ", "delete_team": "टीम हटाएँ", "delete_template": "टेम्पलेट हटाएं", "delete_user": "उपभोक्ता मिटायें", @@ -218,6 +220,7 @@ "required_fullname": "पूरा नाम आवश्यक है", "required_oidc_group_name": "नाम आवश्यक है", "required_password": "पासवर्ड की आवश्यकता है", + "required_role_name": "भूमिका का नाम आवश्यक है", "required_team_name": "टीम का नाम आवश्यक है", "required_username": "उपयोगकर्ता नाम आवश्यक है", "restore_default_template": "डिफ़ॉल्ट टेम्पलेट्स पुनर्स्थापित करें", @@ -230,6 +233,10 @@ "risk_score_weight_medium": "मध्यम (डिफ़ॉल्ट: 3)", "risk_score_weight_unassigned": "असाइन नहीं किया गया (डिफ़ॉल्ट: 5)", "risk_score_weighting_description": "आप जोखिम स्कोर को अनुकूलित करने के लिए प्रत्येक गंभीरता के भार को अनुकूलित कर सकते हैं।", + "roles": "भूमिकाएँ", + "role_created": "भूमिका बनाई गई", + "role_deleted": "भूमिका हटा दी गई", + "role_name": "भूमिका का नाम", "scope": "दायरा", "select_ecosystem": "पारिस्थितिकी तंत्र का चयन करें", "select_ldap_group": "LDAP समूह चुनें", diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json index e2bbe83f..625cbbdb 100644 --- a/src/i18n/locales/it.json +++ b/src/i18n/locales/it.json @@ -64,6 +64,7 @@ "create_oidc_group": "Creare un gruppo", "create_oidc_user": "Crea utente OpenID Connect", "create_repository": "Crea archivio", + "create_role": "Crea ruolo", "create_team": "Crea squadra", "create_template": "Crea modello", "create_user": "Creare un utente", @@ -77,6 +78,7 @@ "delete_alert": "Elimina avviso", "delete_oidc_group": "Elimina gruppo", "delete_repository": "Elimina archivio", + "delete_role": "Elimina ruolo", "delete_team": "Elimina squadra", "delete_template": "Elimina modello", "delete_user": "Elimina utente", @@ -218,6 +220,7 @@ "required_fullname": "Il nome completo è obbligatorio", "required_oidc_group_name": "Il nome è obbligatorio", "required_password": "E 'richiesta la password", + "required_role_name": "Il nome del ruolo è obbligatorio", "required_team_name": "Il nome della squadra è obbligatorio", "required_username": "è richiesto il nome utente", "restore_default_template": "Ripristina i modelli predefiniti", @@ -230,6 +233,10 @@ "risk_score_weight_medium": "Medio (predefinito: 3)", "risk_score_weight_unassigned": "Non assegnato (impostazione predefinita: 5)", "risk_score_weighting_description": "È possibile personalizzare la ponderazione di ciascuna gravità per personalizzare il punteggio di rischio.", + "roles": "Ruoli", + "role_created": "Ruolo creato", + "role_deleted": "Ruolo eliminato", + "role_name": "Nome del ruolo", "scope": "Scopo", "select_ecosystem": "Seleziona Ecosistemi", "select_ldap_group": "Seleziona Gruppo LDAP", diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json index 2fbb311b..d3eba095 100644 --- a/src/i18n/locales/ja.json +++ b/src/i18n/locales/ja.json @@ -64,6 +64,7 @@ "create_oidc_group": "グループを作成", "create_oidc_user": "OpenID Connect ユーザーを作成する", "create_repository": "リポジトリの作成", + "create_role": "ロールを作成", "create_team": "チームを作成", "create_template": "テンプレートを作成", "create_user": "ユーザーを作成", @@ -77,6 +78,7 @@ "delete_alert": "アラートを削除", "delete_oidc_group": "グループを削除", "delete_repository": "リポジトリの削除", + "delete_role": "ロールを削除", "delete_team": "チームを削除", "delete_template": "テンプレートを削除", "delete_user": "ユーザーを削除", @@ -218,6 +220,7 @@ "required_fullname": "フルネームは必須です", "required_oidc_group_name": "名前は必須です", "required_password": "パスワードが必要", + "required_role_name": "ロール名は必須です", "required_team_name": "チーム名は必須です", "required_username": "ユーザー名は必須です", "restore_default_template": "デフォルトのテンプレートを復元する", @@ -230,6 +233,10 @@ "risk_score_weight_medium": "中 (デフォルト: 3)", "risk_score_weight_unassigned": "未割り当て (デフォルト: 5)", "risk_score_weighting_description": "各重大度の重み付けをカスタマイズして、リスク スコアをカスタマイズできます。", + "roles": "ロール", + "role_created": "ロールを作成しました", + "role_deleted": "ロールを削除しました", + "role_name": "ロール名", "scope": "スコープ", "select_ecosystem": "エコシステムを選択", "select_ldap_group": "LDAPグループを選択", diff --git a/src/i18n/locales/pl.json b/src/i18n/locales/pl.json index 138ea652..0d095ab6 100644 --- a/src/i18n/locales/pl.json +++ b/src/i18n/locales/pl.json @@ -64,6 +64,7 @@ "create_oidc_group": "Stworzyć grupę", "create_oidc_user": "Utwórz użytkownika OpenID Connect", "create_repository": "Utwórz repozytorium", + "create_role": "Utwórz rolę", "create_team": "Utwórz zespół", "create_template": "Utwórz szablon", "create_user": "Stwórz użytkownika", @@ -77,6 +78,7 @@ "delete_alert": "Usuń alert", "delete_oidc_group": "Usuń grupę", "delete_repository": "Usuń repozytorium", + "delete_role": "Usuń rolę", "delete_team": "Usuń zespół", "delete_template": "Usuń szablon", "delete_user": "Usuń użytkownika", @@ -218,6 +220,7 @@ "required_fullname": "Imię i nazwisko jest wymagane", "required_oidc_group_name": "imie jest wymagane", "required_password": "Wymagane jest hasło", + "required_role_name": "Nazwa roli jest wymagana", "required_team_name": "Nazwa zespołu jest wymagana", "required_username": "Wymagana jest nazwa użytkownika", "restore_default_template": "Przywróć domyślne szablony", @@ -230,6 +233,10 @@ "risk_score_weight_medium": "Średni (domyślnie: 3)", "risk_score_weight_unassigned": "Nieprzypisane (domyślnie: 5)", "risk_score_weighting_description": "Możesz dostosować wagę każdej wagi, aby dostosować ocenę ryzyka.", + "roles": "Role", + "role_name": "Nazwa roli", + "role_created": "Rola utworzona", + "role_deleted": "Rola usunięta", "scope": "Zakres", "select_ecosystem": "Wybierz Ekosystemy", "select_ldap_group": "Wybierz Grupę LDAP", diff --git a/src/i18n/locales/pt-BR.json b/src/i18n/locales/pt-BR.json index 43b4e6ca..99b63bad 100644 --- a/src/i18n/locales/pt-BR.json +++ b/src/i18n/locales/pt-BR.json @@ -64,6 +64,7 @@ "create_oidc_group": "Criar grupo", "create_oidc_user": "Criar usuário OpenID Connect", "create_repository": "Criar repositório", + "create_role": "Criar função", "create_team": "Criar equipe", "create_template": "Criar modelo", "create_user": "Criar usuário", @@ -77,6 +78,7 @@ "delete_alert": "Excluir alerta", "delete_oidc_group": "Excluir grupo", "delete_repository": "Excluir repositório", + "delete_role": "Excluir função", "delete_team": "Excluir equipe", "delete_template": "Excluir modelo", "delete_user": "Deletar usuário", @@ -218,6 +220,7 @@ "required_fullname": "O nome completo é obrigatório", "required_oidc_group_name": "O nome é obrigatório", "required_password": "Senha requerida", + "required_role_name": "O nome da função é obrigatório", "required_team_name": "O nome da equipe é obrigatório", "required_username": "Nome de usuário é requerido", "restore_default_template": "Restaurar modelos padrão", @@ -230,6 +233,10 @@ "risk_score_weight_medium": "Médio (padrão: 3)", "risk_score_weight_unassigned": "Não atribuído (padrão: 5)", "risk_score_weighting_description": "Você pode personalizar a ponderação de cada gravidade para personalizar a pontuação de risco.", + "roles": "Funções", + "role_created": "Função criada", + "role_deleted": "Função excluída", + "role_name": "Nome da função", "scope": "Escopo", "select_ecosystem": "Selecione Ecossistemas", "select_ldap_group": "Selecione o grupo LDAP", diff --git a/src/i18n/locales/pt.json b/src/i18n/locales/pt.json index be5fb499..a8466104 100644 --- a/src/i18n/locales/pt.json +++ b/src/i18n/locales/pt.json @@ -64,6 +64,7 @@ "create_oidc_group": "Criar grupo", "create_oidc_user": "Criar utilizador OpenID Connect", "create_repository": "Criar repositório", + "create_role": "Criar função", "create_team": "Criar equipe", "create_template": "Criar modelo", "create_user": "Criar utilizador", @@ -77,6 +78,7 @@ "delete_alert": "Excluir alerta", "delete_oidc_group": "Excluir grupo", "delete_repository": "Excluir repositório", + "delete_role": "Excluir função", "delete_team": "Excluir equipe", "delete_template": "Excluir modelo", "delete_user": "Deletar utilizador", @@ -218,6 +220,7 @@ "required_fullname": "O nome completo é obrigatório", "required_oidc_group_name": "O nome é obrigatório", "required_password": "Palavra passe obrigatória", + "required_role_name": "O nome da função é obrigatório", "required_team_name": "O nome da equipe é obrigatório", "required_username": "Nome de utilizador é obrigatório", "restore_default_template": "Restaurar modelos padrão", @@ -230,6 +233,10 @@ "risk_score_weight_medium": "Médio (padrão: 3)", "risk_score_weight_unassigned": "Não atribuído (padrão: 5)", "risk_score_weighting_description": "Você pode personalizar a ponderação de cada gravidade para personalizar a pontuação de risco.", + "roles": "Funções", + "role_created": "Função criada", + "role_deleted": "Função excluída", + "role_name": "Nome da função", "scope": "Escopo", "select_ecosystem": "Selecione Ecossistemas", "select_ldap_group": "Selecione o grupo LDAP", diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json index 9226d139..f35ef1b8 100644 --- a/src/i18n/locales/ru.json +++ b/src/i18n/locales/ru.json @@ -64,6 +64,7 @@ "create_oidc_group": "Создать группу", "create_oidc_user": "Создать пользователя OpenID Connect", "create_repository": "Создать репозиторий", + "create_role": "Создать роль", "create_team": "Создать команду", "create_template": "Создать шаблон", "create_user": "Создать пользователя", @@ -77,6 +78,7 @@ "delete_alert": "Удалить оповещение", "delete_oidc_group": "Удалить группу", "delete_repository": "Удалить репозиторий", + "delete_role": "Удалить роль", "delete_team": "Удалить команду", "delete_template": "Удалить шаблон", "delete_user": "Удалить пользователя", @@ -218,6 +220,7 @@ "required_fullname": "Полное имя обязательно", "required_oidc_group_name": "Имя обязательно", "required_password": "Пароль обязателен", + "required_role_name": "Имя роли обязательно", "required_team_name": "Имя команды обязательно", "required_username": "Имя пользователя обязательно", "restore_default_template": "Восстановить шаблоны по умолчанию", @@ -230,6 +233,10 @@ "risk_score_weight_medium": "Средний (по умолчанию: 3)", "risk_score_weight_unassigned": "Не назначено (по умолчанию: 5)", "risk_score_weighting_description": "Вы можете настроить вес каждой серьезности, чтобы настроить оценку риска.", + "roles": "Роли", + "role_created": "Роль создана", + "role_deleted": "Роль удалена", + "role_name": "Имя роли", "scope": "Область", "select_ecosystem": "Выбрать экосистему", "select_ldap_group": "Выбрать группу LDAP", diff --git a/src/i18n/locales/uk-UA.json b/src/i18n/locales/uk-UA.json index 74f5c812..b4bfb28b 100644 --- a/src/i18n/locales/uk-UA.json +++ b/src/i18n/locales/uk-UA.json @@ -64,6 +64,7 @@ "create_oidc_group": "Створити групу", "create_oidc_user": "Створіть користувача OpenID Connect", "create_repository": "Створити репозиторій", + "create_role": "Створити роль", "create_team": "Створити команду", "create_template": "Створити шаблон", "create_user": "Створити користувача", @@ -77,6 +78,7 @@ "delete_alert": "Видалити сповіщення", "delete_oidc_group": "Видалити групу", "delete_repository": "Видалити репозиторій", + "delete_role": "Видалити роль", "delete_team": "Видалити команду", "delete_template": "Видалити шаблон", "delete_user": "Видалити користувача", @@ -218,6 +220,7 @@ "required_fullname": "Введіть повне ім'я", "required_oidc_group_name": "Необхідно вказати ім'я", "required_password": "Необхідно ввести пароль", + "required_role_name": "Необхідно вказати назву ролі", "required_team_name": "Необхідно вказати назву команди", "required_username": "Потрібно ввести ім'я користувача", "restore_default_template": "Відновити стандартні шаблони", @@ -230,6 +233,10 @@ "risk_score_weight_medium": "Середній (за замовчуванням: 3)", "risk_score_weight_unassigned": "Не призначено (за замовчуванням: 5)", "risk_score_weighting_description": "Ви можете налаштувати зважування кожного рівня серйозності, щоб налаштувати оцінку ризику.", + "roles": "Ролі", + "role_created": "Роль створено", + "role_deleted": "Роль видалено", + "role_name": "Назва ролі", "scope": "Область застосування", "select_ecosystem": "Виберіть Екосистеми", "select_ldap_group": "Виберіть групу LDAP", diff --git a/src/i18n/locales/zh.json b/src/i18n/locales/zh.json index c2bb1184..c8f8aa24 100644 --- a/src/i18n/locales/zh.json +++ b/src/i18n/locales/zh.json @@ -64,6 +64,7 @@ "create_oidc_group": "创建 OIDC 组", "create_oidc_user": "创建 OpenID Connect 用户", "create_repository": "创建存储库", + "create_role": "创建角色", "create_team": "创建团队", "create_template": "创建模板", "create_user": "创建用户", @@ -77,6 +78,7 @@ "delete_alert": "删除告警", "delete_oidc_group": "删除 OIDC 组", "delete_repository": "删除存储库", + "delete_role": "删除角色", "delete_team": "删除团队", "delete_template": "删除模板", "delete_user": "删除用户", @@ -218,6 +220,7 @@ "required_fullname": "必填:全名", "required_oidc_group_name": "必填:OIDC 组名", "required_password": "密码是必需的", + "required_role_name": "必填:角色名称", "required_team_name": "必填:团队名称", "required_username": "必填:用户名", "restore_default_template": "恢复默认模板", @@ -230,6 +233,10 @@ "risk_score_weight_medium": "中(默认值:3)", "risk_score_weight_unassigned": "未分配(默认值:5)", "risk_score_weighting_description": "您可以自定义每个严重性的权重来自定义风险评分。", + "roles": "角色", + "role_created": "角色已创建", + "role_deleted": "角色已删除", + "role_name": "角色名称", "scope": "范围", "select_ecosystem": "选择生态系统", "select_ldap_group": "选择 LDAP 组", diff --git a/src/views/administration/accessmanagement/Roles.vue b/src/views/administration/accessmanagement/Roles.vue index 3a510a69..d98f8890 100644 --- a/src/views/administration/accessmanagement/Roles.vue +++ b/src/views/administration/accessmanagement/Roles.vue @@ -96,7 +96,7 @@ export default { - From bc1bcbc77a9b242e19bbc896f0ca1695dd3906fd Mon Sep 17 00:00:00 2001 From: Allen Shearin Date: Thu, 27 Feb 2025 10:45:13 -0700 Subject: [PATCH 08/53] correct locale entries Signed-off-by: Allen Shearin --- src/i18n/locales/en.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index bae2b5ba..e82fb178 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -234,8 +234,8 @@ "risk_score_weight_unassigned": "Unassigned (default: 5)", "risk_score_weighting_description": "You can customize the weighting of each severity to customize the risk score.", "roles": "Roles", - "role_created": "Role Created", - "role_deleted": "Role Deleted", + "role_created": "Role created", + "role_deleted": "Role deleted", "role_description": "Role Description", "role_name": "Role Name", "role_permissions": "Role Permissions", From 52a7922926c3cce06f98dea952017193d4e0fff7 Mon Sep 17 00:00:00 2001 From: Allen Shearin Date: Thu, 27 Feb 2025 13:58:24 -0700 Subject: [PATCH 09/53] update description fields and methods in roles.vue, remove unused translations Signed-off-by: Allen Shearin --- src/i18n/locales/en.json | 2 -- src/views/administration/accessmanagement/Roles.vue | 3 ++- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index e82fb178..9e732527 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -236,9 +236,7 @@ "roles": "Roles", "role_created": "Role created", "role_deleted": "Role deleted", - "role_description": "Role Description", "role_name": "Role Name", - "role_permissions": "Role Permissions", "scope": "Scope", "select_ecosystem": "Select Ecosystems", "select_ldap_group": "Select LDAP Group", diff --git a/src/views/administration/accessmanagement/Roles.vue b/src/views/administration/accessmanagement/Roles.vue index d98f8890..e00e5e39 100644 --- a/src/views/administration/accessmanagement/Roles.vue +++ b/src/views/administration/accessmanagement/Roles.vue @@ -97,7 +97,7 @@ export default { required="true" type="text" v-model="name" lazy="true" autofocus="true" v-debounce:750ms="updateRole" :debounce-events="'keyup'" />
@@ -140,6 +140,7 @@ export default { .post(url, { uuid: this.role.uuid, name: this.name, + description: this.description, }) .then((response) => { this.role = response.data; From 65703dcc55acd6b05eb6af4808dc377cf90be345 Mon Sep 17 00:00:00 2001 From: Allen Shearin Date: Thu, 27 Feb 2025 14:06:56 -0700 Subject: [PATCH 10/53] fix linting issues Signed-off-by: Allen Shearin --- src/i18n/locales/de.json | 2 +- src/i18n/locales/en.json | 2 +- src/i18n/locales/es.json | 4 ++-- src/i18n/locales/fr.json | 4 ++-- src/i18n/locales/hi.json | 2 +- src/i18n/locales/it.json | 2 +- src/i18n/locales/ja.json | 2 +- src/i18n/locales/pl.json | 4 ++-- src/i18n/locales/pt-BR.json | 2 +- src/i18n/locales/pt.json | 2 +- src/i18n/locales/ru.json | 2 +- src/i18n/locales/uk-UA.json | 2 +- src/i18n/locales/zh.json | 2 +- 13 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/i18n/locales/de.json b/src/i18n/locales/de.json index 9fbc337b..726d2f5f 100644 --- a/src/i18n/locales/de.json +++ b/src/i18n/locales/de.json @@ -233,10 +233,10 @@ "risk_score_weight_medium": "Mittel (Standard: 3)", "risk_score_weight_unassigned": "Nicht zugewiesen (Standard: 5)", "risk_score_weighting_description": "Sie können die Gewichtung jedes Schweregrads anpassen, um die Risikobewertung anzupassen.", - "roles": "Rollen", "role_created": "Rolle erstellt", "role_deleted": "Rolle gelöscht", "role_name": "Rollenname", + "roles": "Rollen", "scope": "Scope", "select_ecosystem": "Ökosysteme auswählen", "select_ldap_group": "LDAP-Gruppe auswählen", diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index 9e732527..0fb32478 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -233,10 +233,10 @@ "risk_score_weight_medium": "Medium (default: 3)", "risk_score_weight_unassigned": "Unassigned (default: 5)", "risk_score_weighting_description": "You can customize the weighting of each severity to customize the risk score.", - "roles": "Roles", "role_created": "Role created", "role_deleted": "Role deleted", "role_name": "Role Name", + "roles": "Roles", "scope": "Scope", "select_ecosystem": "Select Ecosystems", "select_ldap_group": "Select LDAP Group", diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json index 2c109ddd..2283b903 100644 --- a/src/i18n/locales/es.json +++ b/src/i18n/locales/es.json @@ -78,8 +78,8 @@ "delete_alert": "Eliminar alerta", "delete_oidc_group": "Eliminar grupo", "delete_repository": "Eliminar repositorio", - "delete_team": "Eliminar equipo", "delete_role": "Delete Role", + "delete_team": "Eliminar equipo", "delete_template": "Eliminar plantilla", "delete_user": "Borrar usuario", "destination": "Destino", @@ -233,10 +233,10 @@ "risk_score_weight_medium": "Medio (predeterminado: 3)", "risk_score_weight_unassigned": "No asignado (predeterminado: 5)", "risk_score_weighting_description": "Puede personalizar la ponderación de cada gravedad para personalizar la puntuación de riesgo.", - "roles": "Roles", "role_created": "Rol creado", "role_deleted": "Rol eliminado", "role_name": "Nombre del rol", + "roles": "Roles", "scope": "Alcance", "select_ecosystem": "Seleccionar ecosistemas", "select_ldap_group": "Seleccione grupo LDAP", diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json index 421a3734..90d93bc8 100644 --- a/src/i18n/locales/fr.json +++ b/src/i18n/locales/fr.json @@ -78,7 +78,7 @@ "delete_alert": "Supprimer l'alerte", "delete_oidc_group": "Supprimer le groupe", "delete_repository": "Supprimer le dépôt", - "delete_role":"Supprimer le rôle", + "delete_role": "Supprimer le rôle", "delete_team": "Supprimer l'équipe", "delete_template": "Supprimer le modèle", "delete_user": "Supprimer l'utilisateur", @@ -233,10 +233,10 @@ "risk_score_weight_medium": "Moyen (par défaut : 3)", "risk_score_weight_unassigned": "Non attribué (par défaut : 5)", "risk_score_weighting_description": "Vous pouvez personnaliser la pondération de chaque gravité pour personnaliser le score de risque.", - "roles": "Rôles", "role_created": "Rôle créé", "role_deleted": "Rôle supprimé", "role_name": "Nom du rôle", + "roles": "Rôles", "scope": "Périmètre", "select_ecosystem": "Sélectionner les écosystèmes", "select_ldap_group": "Sélectionner un groupe LDAP", diff --git a/src/i18n/locales/hi.json b/src/i18n/locales/hi.json index da396348..e7a72a15 100644 --- a/src/i18n/locales/hi.json +++ b/src/i18n/locales/hi.json @@ -233,10 +233,10 @@ "risk_score_weight_medium": "मध्यम (डिफ़ॉल्ट: 3)", "risk_score_weight_unassigned": "असाइन नहीं किया गया (डिफ़ॉल्ट: 5)", "risk_score_weighting_description": "आप जोखिम स्कोर को अनुकूलित करने के लिए प्रत्येक गंभीरता के भार को अनुकूलित कर सकते हैं।", - "roles": "भूमिकाएँ", "role_created": "भूमिका बनाई गई", "role_deleted": "भूमिका हटा दी गई", "role_name": "भूमिका का नाम", + "roles": "भूमिकाएँ", "scope": "दायरा", "select_ecosystem": "पारिस्थितिकी तंत्र का चयन करें", "select_ldap_group": "LDAP समूह चुनें", diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json index 625cbbdb..349ea751 100644 --- a/src/i18n/locales/it.json +++ b/src/i18n/locales/it.json @@ -233,10 +233,10 @@ "risk_score_weight_medium": "Medio (predefinito: 3)", "risk_score_weight_unassigned": "Non assegnato (impostazione predefinita: 5)", "risk_score_weighting_description": "È possibile personalizzare la ponderazione di ciascuna gravità per personalizzare il punteggio di rischio.", - "roles": "Ruoli", "role_created": "Ruolo creato", "role_deleted": "Ruolo eliminato", "role_name": "Nome del ruolo", + "roles": "Ruoli", "scope": "Scopo", "select_ecosystem": "Seleziona Ecosistemi", "select_ldap_group": "Seleziona Gruppo LDAP", diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json index d3eba095..616975c0 100644 --- a/src/i18n/locales/ja.json +++ b/src/i18n/locales/ja.json @@ -233,10 +233,10 @@ "risk_score_weight_medium": "中 (デフォルト: 3)", "risk_score_weight_unassigned": "未割り当て (デフォルト: 5)", "risk_score_weighting_description": "各重大度の重み付けをカスタマイズして、リスク スコアをカスタマイズできます。", - "roles": "ロール", "role_created": "ロールを作成しました", "role_deleted": "ロールを削除しました", "role_name": "ロール名", + "roles": "ロール", "scope": "スコープ", "select_ecosystem": "エコシステムを選択", "select_ldap_group": "LDAPグループを選択", diff --git a/src/i18n/locales/pl.json b/src/i18n/locales/pl.json index 0d095ab6..4d0244ed 100644 --- a/src/i18n/locales/pl.json +++ b/src/i18n/locales/pl.json @@ -233,10 +233,10 @@ "risk_score_weight_medium": "Średni (domyślnie: 3)", "risk_score_weight_unassigned": "Nieprzypisane (domyślnie: 5)", "risk_score_weighting_description": "Możesz dostosować wagę każdej wagi, aby dostosować ocenę ryzyka.", - "roles": "Role", - "role_name": "Nazwa roli", "role_created": "Rola utworzona", "role_deleted": "Rola usunięta", + "role_name": "Nazwa roli", + "roles": "Role", "scope": "Zakres", "select_ecosystem": "Wybierz Ekosystemy", "select_ldap_group": "Wybierz Grupę LDAP", diff --git a/src/i18n/locales/pt-BR.json b/src/i18n/locales/pt-BR.json index 99b63bad..7c88d4e1 100644 --- a/src/i18n/locales/pt-BR.json +++ b/src/i18n/locales/pt-BR.json @@ -233,10 +233,10 @@ "risk_score_weight_medium": "Médio (padrão: 3)", "risk_score_weight_unassigned": "Não atribuído (padrão: 5)", "risk_score_weighting_description": "Você pode personalizar a ponderação de cada gravidade para personalizar a pontuação de risco.", - "roles": "Funções", "role_created": "Função criada", "role_deleted": "Função excluída", "role_name": "Nome da função", + "roles": "Funções", "scope": "Escopo", "select_ecosystem": "Selecione Ecossistemas", "select_ldap_group": "Selecione o grupo LDAP", diff --git a/src/i18n/locales/pt.json b/src/i18n/locales/pt.json index a8466104..716173cc 100644 --- a/src/i18n/locales/pt.json +++ b/src/i18n/locales/pt.json @@ -233,10 +233,10 @@ "risk_score_weight_medium": "Médio (padrão: 3)", "risk_score_weight_unassigned": "Não atribuído (padrão: 5)", "risk_score_weighting_description": "Você pode personalizar a ponderação de cada gravidade para personalizar a pontuação de risco.", - "roles": "Funções", "role_created": "Função criada", "role_deleted": "Função excluída", "role_name": "Nome da função", + "roles": "Funções", "scope": "Escopo", "select_ecosystem": "Selecione Ecossistemas", "select_ldap_group": "Selecione o grupo LDAP", diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json index f35ef1b8..3c7ad3e7 100644 --- a/src/i18n/locales/ru.json +++ b/src/i18n/locales/ru.json @@ -233,10 +233,10 @@ "risk_score_weight_medium": "Средний (по умолчанию: 3)", "risk_score_weight_unassigned": "Не назначено (по умолчанию: 5)", "risk_score_weighting_description": "Вы можете настроить вес каждой серьезности, чтобы настроить оценку риска.", - "roles": "Роли", "role_created": "Роль создана", "role_deleted": "Роль удалена", "role_name": "Имя роли", + "roles": "Роли", "scope": "Область", "select_ecosystem": "Выбрать экосистему", "select_ldap_group": "Выбрать группу LDAP", diff --git a/src/i18n/locales/uk-UA.json b/src/i18n/locales/uk-UA.json index b4bfb28b..1184ae92 100644 --- a/src/i18n/locales/uk-UA.json +++ b/src/i18n/locales/uk-UA.json @@ -233,10 +233,10 @@ "risk_score_weight_medium": "Середній (за замовчуванням: 3)", "risk_score_weight_unassigned": "Не призначено (за замовчуванням: 5)", "risk_score_weighting_description": "Ви можете налаштувати зважування кожного рівня серйозності, щоб налаштувати оцінку ризику.", - "roles": "Ролі", "role_created": "Роль створено", "role_deleted": "Роль видалено", "role_name": "Назва ролі", + "roles": "Ролі", "scope": "Область застосування", "select_ecosystem": "Виберіть Екосистеми", "select_ldap_group": "Виберіть групу LDAP", diff --git a/src/i18n/locales/zh.json b/src/i18n/locales/zh.json index c8f8aa24..071f65f7 100644 --- a/src/i18n/locales/zh.json +++ b/src/i18n/locales/zh.json @@ -233,10 +233,10 @@ "risk_score_weight_medium": "中(默认值:3)", "risk_score_weight_unassigned": "未分配(默认值:5)", "risk_score_weighting_description": "您可以自定义每个严重性的权重来自定义风险评分。", - "roles": "角色", "role_created": "角色已创建", "role_deleted": "角色已删除", "role_name": "角色名称", + "roles": "角色", "scope": "范围", "select_ecosystem": "选择生态系统", "select_ldap_group": "选择 LDAP 组", From 7301a5cb7cd8fa4ed620a76c3bbe8769c92a6b9a Mon Sep 17 00:00:00 2001 From: Ephraim Mensah Date: Mon, 3 Mar 2025 23:29:49 +0000 Subject: [PATCH 11/53] add ldapUser with Role & Project Membership Signed-off-by: Ephraim Mensah --- src/i18n/locales/en.json | 3 + .../accessmanagement/LdapUsers.vue | 136 ++++++++++++++++++ .../accessmanagement/SelectRoleModal.vue | 81 +++++++++++ 3 files changed, 220 insertions(+) create mode 100644 src/views/administration/accessmanagement/SelectRoleModal.vue diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index 0fb32478..9b472899 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -195,6 +195,7 @@ "portfolio_access_control": "Portfolio Access Control", "preview": "Preview", "project_access": "Project access", + "project_membership": "Project Membership", "project_retention_enable": "Enable Inactive Project Deletion", "publisher": "Publisher", "publisher_class": "Publisher class", @@ -236,6 +237,7 @@ "role_created": "Role created", "role_deleted": "Role deleted", "role_name": "Role Name", + "role_membership": "Role Membership", "roles": "Roles", "scope": "Scope", "select_ecosystem": "Select Ecosystems", @@ -243,6 +245,7 @@ "select_oidc_group": "Select OpenID Connect Group", "select_permission": "Select permission", "select_project": "Select Project", + "select_role": "Select Role", "select_team": "Select Team", "select_team_as_recipient": "Select team as recipient", "snyk": "Snyk (Beta)", diff --git a/src/views/administration/accessmanagement/LdapUsers.vue b/src/views/administration/accessmanagement/LdapUsers.vue index 62c91906..bf957e69 100644 --- a/src/views/administration/accessmanagement/LdapUsers.vue +++ b/src/views/administration/accessmanagement/LdapUsers.vue @@ -19,6 +19,7 @@ + @@ -33,6 +34,8 @@ import ActionableListGroupItem from '../../components/ActionableListGroupItem'; import SelectTeamModal from './SelectTeamModal'; import SelectPermissionModal from './SelectPermissionModal'; import permissionsMixin from '../../../mixins/permissionsMixin'; +import SelectRoleModal from './SelectRoleModal.vue'; +import SelectProjectModal from './SelectProjectModal.vue'; export default { props: { @@ -41,6 +44,7 @@ export default { mixins: [bootstrapTableMixin], components: { CreateLdapUserModal, + SelectProjectModal, }, mounted() { EventBus.$on('admin:ldapusers:rowUpdate', (index, row) => { @@ -86,6 +90,18 @@ export default { : 0; }, }, + { + title: this.$t('admin.roles'), + field: 'roles', + sortable: false, + formatter(value, row, index) { + return value + ? xssFilters.inHTMLData( + common.valueWithDefault(value.length, '0'), + ) + : 0; + }, + }, ], data: [], options: { @@ -118,6 +134,22 @@ export default {
+ +
+ + + + +
+
+ +
+ + + + +
+
@@ -132,15 +164,19 @@ export default { {{ $t('admin.delete_user') }}
+ + `, mixins: [permissionsMixin], components: { ActionableListGroupItem, + SelectRoleModal, SelectTeamModal, SelectPermissionModal, + SelectProjectModal, }, data() { return { @@ -148,6 +184,8 @@ export default { username: row.username, teams: row.teams, permissions: row.permissions, + projects: row.projects, + roles: row.roles, }; }, methods: { @@ -213,6 +251,103 @@ export default { this.$toastr.w(this.$t('condition.unsuccessful_action')); }); }, + updateRoleSelection: function (selections) { + this.$root.$emit('bv::hide::modal', 'selectRoleModal'); + for (let i = 0; i < selections.length; i++) { + let selection = selections[i]; + let url = `${this.$api.BASE_URL}/${this.$api.URL_USER}/${this.username}/role`; + this.axios + .post(url, { + uuid: selection.uuid, + }) + .then((response) => { + this.syncVariables(response.data); + EventBus.$emit( + 'admin:ldapusers:rowUpdate', + index, + this.ldapUser, + ); + this.$toastr.s(this.$t('message.updated')); + }) + .catch((error) => { + if (error.response.status === 304) { + //this.$toastr.w(this.$t('condition.unsuccessful_action')); + } else { + this.$toastr.w( + this.$t('condition.unsuccessful_action'), + ); + } + }); + } + }, + updateProjectSelection: function (selections) { + this.$root.$emit('bv::hide::modal', 'selectProjectModal'); + for (let i = 0; i < selections.length; i++) { + let selection = selections[i]; + let url = `${this.$api.BASE_URL}/${this.$api.URL_USER}/${this.username}/project`; + this.axios + .post(url, { + uuid: selection.uuid, + }) + .then((response) => { + this.syncVariables(response.data); + EventBus.$emit( + 'admin:ldapusers:rowUpdate', + index, + this.ldapUser, + ); + this.$toastr.s(this.$t('message.updated')); + }) + .catch((error) => { + if (error.response.status === 304) { + //this.$toastr.w(this.$t('condition.unsuccessful_action')); + } else { + this.$toastr.w( + this.$t('condition.unsuccessful_action'), + ); + } + }); + } + }, + removeProjectMembership: function (projectUuid) { + let url = `${this.$api.BASE_URL}/${this.$api.URL_USER}/${this.username}/project`; + this.axios + .delete(url, { data: { uuid: projectUuid } }) + .then((response) => { + this.syncVariables(response.data); + EventBus.$emit( + 'admin:ldapusers:rowUpdate', + index, + this.ldapUser, + ); + this.$toastr.s(this.$t('message.updated')); + }) + .catch((error) => { + this.$toastr.w(this.$t('condition.unsuccessful_action')); + }); + }, + removeRole: function (role) { + let url = `${this.$api.BASE_URL}/${this.$api.URL_USER}/${this.username}/role`; + this.axios + .delete(url, { + data: { + roleName: role.name, + projectName: role.projectName, + }, + }) + .then((response) => { + this.syncVariables(response.data); + EventBus.$emit( + 'admin:ldapusers:rowUpdate', + index, + this.ldapUser, + ); + this.$toastr.s(this.$t('message.updated')); + }) + .catch((error) => { + this.$toastr.w(this.$t('condition.unsuccessful_action')); + }); + }, updatePermissionSelection: function (selections) { this.$root.$emit('bv::hide::modal', 'selectPermissionModal'); for (let i = 0; i < selections.length; i++) { @@ -251,6 +386,7 @@ export default { syncVariables: function (ldapUser) { this.ldapUser = ldapUser; this.username = ldapUser.username; + this.roles = ldapUser.roles; this.teams = ldapUser.teams; this.permissions = ldapUser.permissions; }, diff --git a/src/views/administration/accessmanagement/SelectRoleModal.vue b/src/views/administration/accessmanagement/SelectRoleModal.vue new file mode 100644 index 00000000..bc5a31ee --- /dev/null +++ b/src/views/administration/accessmanagement/SelectRoleModal.vue @@ -0,0 +1,81 @@ + + + From e8562dfb2ed6030e2c3bd29b2a52bf76e7abb515 Mon Sep 17 00:00:00 2001 From: Allen Shearin Date: Mon, 3 Mar 2025 17:47:19 -0700 Subject: [PATCH 12/53] Role UI implementation Signed-off-by: Allen Shearin --- src/i18n/locales/de.json | 7 + src/i18n/locales/en.json | 7 + src/i18n/locales/es.json | 7 + src/i18n/locales/fr.json | 7 + src/i18n/locales/hi.json | 7 + src/i18n/locales/it.json | 7 + src/i18n/locales/ja.json | 7 + src/i18n/locales/pl.json | 7 + src/i18n/locales/pt-BR.json | 7 + src/i18n/locales/pt.json | 7 + src/i18n/locales/ru.json | 7 + src/i18n/locales/uk-UA.json | 7 + src/i18n/locales/zh.json | 7 + src/router/index.js | 18 ++ src/shared/api.json | 1 + src/views/administration/AdminMenu.vue | 5 + src/views/administration/Administration.vue | 2 + .../accessmanagement/CreateRoleModal.vue | 69 +++++ .../administration/accessmanagement/Roles.vue | 235 ++++++++++++++++++ 19 files changed, 421 insertions(+) create mode 100644 src/views/administration/accessmanagement/CreateRoleModal.vue create mode 100644 src/views/administration/accessmanagement/Roles.vue diff --git a/src/i18n/locales/de.json b/src/i18n/locales/de.json index 12085b92..726d2f5f 100644 --- a/src/i18n/locales/de.json +++ b/src/i18n/locales/de.json @@ -64,6 +64,7 @@ "create_oidc_group": "Gruppe erstellen", "create_oidc_user": "OpenID Connect-Benutzer erstellen", "create_repository": "Repository erstellen", + "create_role": "Rolle erstellen", "create_team": "Team erstellen", "create_template": "Vorlage erstellen", "create_user": "Benutzer erstellen", @@ -77,6 +78,7 @@ "delete_alert": "Alarm löschen", "delete_oidc_group": "Gruppe löschen", "delete_repository": "Repository löschen", + "delete_role": "Rolle löschen", "delete_team": "Team löschen", "delete_template": "Vorlage löschen", "delete_user": "Benutzer löschen", @@ -218,6 +220,7 @@ "required_fullname": "Der vollständige Name ist erforderlich", "required_oidc_group_name": "Name ist erforderlich", "required_password": "Passwort wird benötigt", + "required_role_name": "Rollenname ist erforderlich", "required_team_name": "Teamname ist erforderlich", "required_username": "Benutzername wird benötigt", "restore_default_template": "Standardvorlagen wiederherstellen", @@ -230,6 +233,10 @@ "risk_score_weight_medium": "Mittel (Standard: 3)", "risk_score_weight_unassigned": "Nicht zugewiesen (Standard: 5)", "risk_score_weighting_description": "Sie können die Gewichtung jedes Schweregrads anpassen, um die Risikobewertung anzupassen.", + "role_created": "Rolle erstellt", + "role_deleted": "Rolle gelöscht", + "role_name": "Rollenname", + "roles": "Rollen", "scope": "Scope", "select_ecosystem": "Ökosysteme auswählen", "select_ldap_group": "LDAP-Gruppe auswählen", diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index fc165610..0fb32478 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -64,6 +64,7 @@ "create_oidc_group": "Create Group", "create_oidc_user": "Create OpenID Connect User", "create_repository": "Create Repository", + "create_role": "Create Role", "create_team": "Create Team", "create_template": "Create Template", "create_user": "Create User", @@ -77,6 +78,7 @@ "delete_alert": "Delete Alert", "delete_oidc_group": "Delete Group", "delete_repository": "Delete Repository", + "delete_role": "Delete Role", "delete_team": "Delete Team", "delete_template": "Delete Template", "delete_user": "Delete User", @@ -218,6 +220,7 @@ "required_fullname": "Fullname is required", "required_oidc_group_name": "Name is required", "required_password": "Password is required", + "required_role_name": "Role name is required", "required_team_name": "Team name is required", "required_username": "Username is required", "restore_default_template": "Restore default templates", @@ -230,6 +233,10 @@ "risk_score_weight_medium": "Medium (default: 3)", "risk_score_weight_unassigned": "Unassigned (default: 5)", "risk_score_weighting_description": "You can customize the weighting of each severity to customize the risk score.", + "role_created": "Role created", + "role_deleted": "Role deleted", + "role_name": "Role Name", + "roles": "Roles", "scope": "Scope", "select_ecosystem": "Select Ecosystems", "select_ldap_group": "Select LDAP Group", diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json index 33c99de0..2283b903 100644 --- a/src/i18n/locales/es.json +++ b/src/i18n/locales/es.json @@ -64,6 +64,7 @@ "create_oidc_group": "Crea un grupo", "create_oidc_user": "Crear usuario de OpenID Connect", "create_repository": "Crear repositorio", + "create_role": "Crear rol", "create_team": "Crear equipo", "create_template": "Crear plantilla", "create_user": "Crear usuario", @@ -77,6 +78,7 @@ "delete_alert": "Eliminar alerta", "delete_oidc_group": "Eliminar grupo", "delete_repository": "Eliminar repositorio", + "delete_role": "Delete Role", "delete_team": "Eliminar equipo", "delete_template": "Eliminar plantilla", "delete_user": "Borrar usuario", @@ -218,6 +220,7 @@ "required_fullname": "Se requiere el nombre completo", "required_oidc_group_name": "Se requiere el nombre", "required_password": "se requiere contraseña", + "required_role_name": "El nombre del rol es obligatorio", "required_team_name": "El nombre del equipo es obligatorio.", "required_username": "Se requiere nombre de usuario", "restore_default_template": "Restaurar plantillas predeterminadas", @@ -230,6 +233,10 @@ "risk_score_weight_medium": "Medio (predeterminado: 3)", "risk_score_weight_unassigned": "No asignado (predeterminado: 5)", "risk_score_weighting_description": "Puede personalizar la ponderación de cada gravedad para personalizar la puntuación de riesgo.", + "role_created": "Rol creado", + "role_deleted": "Rol eliminado", + "role_name": "Nombre del rol", + "roles": "Roles", "scope": "Alcance", "select_ecosystem": "Seleccionar ecosistemas", "select_ldap_group": "Seleccione grupo LDAP", diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json index da9f48cb..90d93bc8 100644 --- a/src/i18n/locales/fr.json +++ b/src/i18n/locales/fr.json @@ -64,6 +64,7 @@ "create_oidc_group": "Créer un groupe", "create_oidc_user": "Créer un utilisateur OpenID Connect", "create_repository": "Créer un dépôt", + "create_role": "Créer un rôle", "create_team": "Créer une équipe", "create_template": "Créer un modèle", "create_user": "Créer un utilisateur", @@ -77,6 +78,7 @@ "delete_alert": "Supprimer l'alerte", "delete_oidc_group": "Supprimer le groupe", "delete_repository": "Supprimer le dépôt", + "delete_role": "Supprimer le rôle", "delete_team": "Supprimer l'équipe", "delete_template": "Supprimer le modèle", "delete_user": "Supprimer l'utilisateur", @@ -218,6 +220,7 @@ "required_fullname": "Le nom complet est requis", "required_oidc_group_name": "Le nom est requis", "required_password": "Mot de passe requis", + "required_role_name": "Le nom du rôle est obligatoire", "required_team_name": "Le nom de l'équipe est requis", "required_username": "Nom d'utilisateur est nécessaire", "restore_default_template": "Restaurer les modèles par défaut", @@ -230,6 +233,10 @@ "risk_score_weight_medium": "Moyen (par défaut : 3)", "risk_score_weight_unassigned": "Non attribué (par défaut : 5)", "risk_score_weighting_description": "Vous pouvez personnaliser la pondération de chaque gravité pour personnaliser le score de risque.", + "role_created": "Rôle créé", + "role_deleted": "Rôle supprimé", + "role_name": "Nom du rôle", + "roles": "Rôles", "scope": "Périmètre", "select_ecosystem": "Sélectionner les écosystèmes", "select_ldap_group": "Sélectionner un groupe LDAP", diff --git a/src/i18n/locales/hi.json b/src/i18n/locales/hi.json index a1b80210..e7a72a15 100644 --- a/src/i18n/locales/hi.json +++ b/src/i18n/locales/hi.json @@ -64,6 +64,7 @@ "create_oidc_group": "समूह बनाना", "create_oidc_user": "OpenID कनेक्ट उपयोगकर्ता बनाएँ", "create_repository": "रिपॉजिटरी बनाएं", + "create_role": "भूमिका बनाएँ", "create_team": "टीम बनाएं", "create_template": "टेम्पलेट बनाएं", "create_user": "उपयोगकर्ता बनाइये", @@ -77,6 +78,7 @@ "delete_alert": "अलर्ट हटाएं", "delete_oidc_group": "समूह हटाएं", "delete_repository": "रिपॉजिटरी हटाएँ", + "delete_role": "भूमिका हटाएँ", "delete_team": "टीम हटाएँ", "delete_template": "टेम्पलेट हटाएं", "delete_user": "उपभोक्ता मिटायें", @@ -218,6 +220,7 @@ "required_fullname": "पूरा नाम आवश्यक है", "required_oidc_group_name": "नाम आवश्यक है", "required_password": "पासवर्ड की आवश्यकता है", + "required_role_name": "भूमिका का नाम आवश्यक है", "required_team_name": "टीम का नाम आवश्यक है", "required_username": "उपयोगकर्ता नाम आवश्यक है", "restore_default_template": "डिफ़ॉल्ट टेम्पलेट्स पुनर्स्थापित करें", @@ -230,6 +233,10 @@ "risk_score_weight_medium": "मध्यम (डिफ़ॉल्ट: 3)", "risk_score_weight_unassigned": "असाइन नहीं किया गया (डिफ़ॉल्ट: 5)", "risk_score_weighting_description": "आप जोखिम स्कोर को अनुकूलित करने के लिए प्रत्येक गंभीरता के भार को अनुकूलित कर सकते हैं।", + "role_created": "भूमिका बनाई गई", + "role_deleted": "भूमिका हटा दी गई", + "role_name": "भूमिका का नाम", + "roles": "भूमिकाएँ", "scope": "दायरा", "select_ecosystem": "पारिस्थितिकी तंत्र का चयन करें", "select_ldap_group": "LDAP समूह चुनें", diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json index e2bbe83f..349ea751 100644 --- a/src/i18n/locales/it.json +++ b/src/i18n/locales/it.json @@ -64,6 +64,7 @@ "create_oidc_group": "Creare un gruppo", "create_oidc_user": "Crea utente OpenID Connect", "create_repository": "Crea archivio", + "create_role": "Crea ruolo", "create_team": "Crea squadra", "create_template": "Crea modello", "create_user": "Creare un utente", @@ -77,6 +78,7 @@ "delete_alert": "Elimina avviso", "delete_oidc_group": "Elimina gruppo", "delete_repository": "Elimina archivio", + "delete_role": "Elimina ruolo", "delete_team": "Elimina squadra", "delete_template": "Elimina modello", "delete_user": "Elimina utente", @@ -218,6 +220,7 @@ "required_fullname": "Il nome completo è obbligatorio", "required_oidc_group_name": "Il nome è obbligatorio", "required_password": "E 'richiesta la password", + "required_role_name": "Il nome del ruolo è obbligatorio", "required_team_name": "Il nome della squadra è obbligatorio", "required_username": "è richiesto il nome utente", "restore_default_template": "Ripristina i modelli predefiniti", @@ -230,6 +233,10 @@ "risk_score_weight_medium": "Medio (predefinito: 3)", "risk_score_weight_unassigned": "Non assegnato (impostazione predefinita: 5)", "risk_score_weighting_description": "È possibile personalizzare la ponderazione di ciascuna gravità per personalizzare il punteggio di rischio.", + "role_created": "Ruolo creato", + "role_deleted": "Ruolo eliminato", + "role_name": "Nome del ruolo", + "roles": "Ruoli", "scope": "Scopo", "select_ecosystem": "Seleziona Ecosistemi", "select_ldap_group": "Seleziona Gruppo LDAP", diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json index 2fbb311b..616975c0 100644 --- a/src/i18n/locales/ja.json +++ b/src/i18n/locales/ja.json @@ -64,6 +64,7 @@ "create_oidc_group": "グループを作成", "create_oidc_user": "OpenID Connect ユーザーを作成する", "create_repository": "リポジトリの作成", + "create_role": "ロールを作成", "create_team": "チームを作成", "create_template": "テンプレートを作成", "create_user": "ユーザーを作成", @@ -77,6 +78,7 @@ "delete_alert": "アラートを削除", "delete_oidc_group": "グループを削除", "delete_repository": "リポジトリの削除", + "delete_role": "ロールを削除", "delete_team": "チームを削除", "delete_template": "テンプレートを削除", "delete_user": "ユーザーを削除", @@ -218,6 +220,7 @@ "required_fullname": "フルネームは必須です", "required_oidc_group_name": "名前は必須です", "required_password": "パスワードが必要", + "required_role_name": "ロール名は必須です", "required_team_name": "チーム名は必須です", "required_username": "ユーザー名は必須です", "restore_default_template": "デフォルトのテンプレートを復元する", @@ -230,6 +233,10 @@ "risk_score_weight_medium": "中 (デフォルト: 3)", "risk_score_weight_unassigned": "未割り当て (デフォルト: 5)", "risk_score_weighting_description": "各重大度の重み付けをカスタマイズして、リスク スコアをカスタマイズできます。", + "role_created": "ロールを作成しました", + "role_deleted": "ロールを削除しました", + "role_name": "ロール名", + "roles": "ロール", "scope": "スコープ", "select_ecosystem": "エコシステムを選択", "select_ldap_group": "LDAPグループを選択", diff --git a/src/i18n/locales/pl.json b/src/i18n/locales/pl.json index 138ea652..4d0244ed 100644 --- a/src/i18n/locales/pl.json +++ b/src/i18n/locales/pl.json @@ -64,6 +64,7 @@ "create_oidc_group": "Stworzyć grupę", "create_oidc_user": "Utwórz użytkownika OpenID Connect", "create_repository": "Utwórz repozytorium", + "create_role": "Utwórz rolę", "create_team": "Utwórz zespół", "create_template": "Utwórz szablon", "create_user": "Stwórz użytkownika", @@ -77,6 +78,7 @@ "delete_alert": "Usuń alert", "delete_oidc_group": "Usuń grupę", "delete_repository": "Usuń repozytorium", + "delete_role": "Usuń rolę", "delete_team": "Usuń zespół", "delete_template": "Usuń szablon", "delete_user": "Usuń użytkownika", @@ -218,6 +220,7 @@ "required_fullname": "Imię i nazwisko jest wymagane", "required_oidc_group_name": "imie jest wymagane", "required_password": "Wymagane jest hasło", + "required_role_name": "Nazwa roli jest wymagana", "required_team_name": "Nazwa zespołu jest wymagana", "required_username": "Wymagana jest nazwa użytkownika", "restore_default_template": "Przywróć domyślne szablony", @@ -230,6 +233,10 @@ "risk_score_weight_medium": "Średni (domyślnie: 3)", "risk_score_weight_unassigned": "Nieprzypisane (domyślnie: 5)", "risk_score_weighting_description": "Możesz dostosować wagę każdej wagi, aby dostosować ocenę ryzyka.", + "role_created": "Rola utworzona", + "role_deleted": "Rola usunięta", + "role_name": "Nazwa roli", + "roles": "Role", "scope": "Zakres", "select_ecosystem": "Wybierz Ekosystemy", "select_ldap_group": "Wybierz Grupę LDAP", diff --git a/src/i18n/locales/pt-BR.json b/src/i18n/locales/pt-BR.json index 43b4e6ca..7c88d4e1 100644 --- a/src/i18n/locales/pt-BR.json +++ b/src/i18n/locales/pt-BR.json @@ -64,6 +64,7 @@ "create_oidc_group": "Criar grupo", "create_oidc_user": "Criar usuário OpenID Connect", "create_repository": "Criar repositório", + "create_role": "Criar função", "create_team": "Criar equipe", "create_template": "Criar modelo", "create_user": "Criar usuário", @@ -77,6 +78,7 @@ "delete_alert": "Excluir alerta", "delete_oidc_group": "Excluir grupo", "delete_repository": "Excluir repositório", + "delete_role": "Excluir função", "delete_team": "Excluir equipe", "delete_template": "Excluir modelo", "delete_user": "Deletar usuário", @@ -218,6 +220,7 @@ "required_fullname": "O nome completo é obrigatório", "required_oidc_group_name": "O nome é obrigatório", "required_password": "Senha requerida", + "required_role_name": "O nome da função é obrigatório", "required_team_name": "O nome da equipe é obrigatório", "required_username": "Nome de usuário é requerido", "restore_default_template": "Restaurar modelos padrão", @@ -230,6 +233,10 @@ "risk_score_weight_medium": "Médio (padrão: 3)", "risk_score_weight_unassigned": "Não atribuído (padrão: 5)", "risk_score_weighting_description": "Você pode personalizar a ponderação de cada gravidade para personalizar a pontuação de risco.", + "role_created": "Função criada", + "role_deleted": "Função excluída", + "role_name": "Nome da função", + "roles": "Funções", "scope": "Escopo", "select_ecosystem": "Selecione Ecossistemas", "select_ldap_group": "Selecione o grupo LDAP", diff --git a/src/i18n/locales/pt.json b/src/i18n/locales/pt.json index be5fb499..716173cc 100644 --- a/src/i18n/locales/pt.json +++ b/src/i18n/locales/pt.json @@ -64,6 +64,7 @@ "create_oidc_group": "Criar grupo", "create_oidc_user": "Criar utilizador OpenID Connect", "create_repository": "Criar repositório", + "create_role": "Criar função", "create_team": "Criar equipe", "create_template": "Criar modelo", "create_user": "Criar utilizador", @@ -77,6 +78,7 @@ "delete_alert": "Excluir alerta", "delete_oidc_group": "Excluir grupo", "delete_repository": "Excluir repositório", + "delete_role": "Excluir função", "delete_team": "Excluir equipe", "delete_template": "Excluir modelo", "delete_user": "Deletar utilizador", @@ -218,6 +220,7 @@ "required_fullname": "O nome completo é obrigatório", "required_oidc_group_name": "O nome é obrigatório", "required_password": "Palavra passe obrigatória", + "required_role_name": "O nome da função é obrigatório", "required_team_name": "O nome da equipe é obrigatório", "required_username": "Nome de utilizador é obrigatório", "restore_default_template": "Restaurar modelos padrão", @@ -230,6 +233,10 @@ "risk_score_weight_medium": "Médio (padrão: 3)", "risk_score_weight_unassigned": "Não atribuído (padrão: 5)", "risk_score_weighting_description": "Você pode personalizar a ponderação de cada gravidade para personalizar a pontuação de risco.", + "role_created": "Função criada", + "role_deleted": "Função excluída", + "role_name": "Nome da função", + "roles": "Funções", "scope": "Escopo", "select_ecosystem": "Selecione Ecossistemas", "select_ldap_group": "Selecione o grupo LDAP", diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json index 9226d139..3c7ad3e7 100644 --- a/src/i18n/locales/ru.json +++ b/src/i18n/locales/ru.json @@ -64,6 +64,7 @@ "create_oidc_group": "Создать группу", "create_oidc_user": "Создать пользователя OpenID Connect", "create_repository": "Создать репозиторий", + "create_role": "Создать роль", "create_team": "Создать команду", "create_template": "Создать шаблон", "create_user": "Создать пользователя", @@ -77,6 +78,7 @@ "delete_alert": "Удалить оповещение", "delete_oidc_group": "Удалить группу", "delete_repository": "Удалить репозиторий", + "delete_role": "Удалить роль", "delete_team": "Удалить команду", "delete_template": "Удалить шаблон", "delete_user": "Удалить пользователя", @@ -218,6 +220,7 @@ "required_fullname": "Полное имя обязательно", "required_oidc_group_name": "Имя обязательно", "required_password": "Пароль обязателен", + "required_role_name": "Имя роли обязательно", "required_team_name": "Имя команды обязательно", "required_username": "Имя пользователя обязательно", "restore_default_template": "Восстановить шаблоны по умолчанию", @@ -230,6 +233,10 @@ "risk_score_weight_medium": "Средний (по умолчанию: 3)", "risk_score_weight_unassigned": "Не назначено (по умолчанию: 5)", "risk_score_weighting_description": "Вы можете настроить вес каждой серьезности, чтобы настроить оценку риска.", + "role_created": "Роль создана", + "role_deleted": "Роль удалена", + "role_name": "Имя роли", + "roles": "Роли", "scope": "Область", "select_ecosystem": "Выбрать экосистему", "select_ldap_group": "Выбрать группу LDAP", diff --git a/src/i18n/locales/uk-UA.json b/src/i18n/locales/uk-UA.json index 74f5c812..1184ae92 100644 --- a/src/i18n/locales/uk-UA.json +++ b/src/i18n/locales/uk-UA.json @@ -64,6 +64,7 @@ "create_oidc_group": "Створити групу", "create_oidc_user": "Створіть користувача OpenID Connect", "create_repository": "Створити репозиторій", + "create_role": "Створити роль", "create_team": "Створити команду", "create_template": "Створити шаблон", "create_user": "Створити користувача", @@ -77,6 +78,7 @@ "delete_alert": "Видалити сповіщення", "delete_oidc_group": "Видалити групу", "delete_repository": "Видалити репозиторій", + "delete_role": "Видалити роль", "delete_team": "Видалити команду", "delete_template": "Видалити шаблон", "delete_user": "Видалити користувача", @@ -218,6 +220,7 @@ "required_fullname": "Введіть повне ім'я", "required_oidc_group_name": "Необхідно вказати ім'я", "required_password": "Необхідно ввести пароль", + "required_role_name": "Необхідно вказати назву ролі", "required_team_name": "Необхідно вказати назву команди", "required_username": "Потрібно ввести ім'я користувача", "restore_default_template": "Відновити стандартні шаблони", @@ -230,6 +233,10 @@ "risk_score_weight_medium": "Середній (за замовчуванням: 3)", "risk_score_weight_unassigned": "Не призначено (за замовчуванням: 5)", "risk_score_weighting_description": "Ви можете налаштувати зважування кожного рівня серйозності, щоб налаштувати оцінку ризику.", + "role_created": "Роль створено", + "role_deleted": "Роль видалено", + "role_name": "Назва ролі", + "roles": "Ролі", "scope": "Область застосування", "select_ecosystem": "Виберіть Екосистеми", "select_ldap_group": "Виберіть групу LDAP", diff --git a/src/i18n/locales/zh.json b/src/i18n/locales/zh.json index c2bb1184..071f65f7 100644 --- a/src/i18n/locales/zh.json +++ b/src/i18n/locales/zh.json @@ -64,6 +64,7 @@ "create_oidc_group": "创建 OIDC 组", "create_oidc_user": "创建 OpenID Connect 用户", "create_repository": "创建存储库", + "create_role": "创建角色", "create_team": "创建团队", "create_template": "创建模板", "create_user": "创建用户", @@ -77,6 +78,7 @@ "delete_alert": "删除告警", "delete_oidc_group": "删除 OIDC 组", "delete_repository": "删除存储库", + "delete_role": "删除角色", "delete_team": "删除团队", "delete_template": "删除模板", "delete_user": "删除用户", @@ -218,6 +220,7 @@ "required_fullname": "必填:全名", "required_oidc_group_name": "必填:OIDC 组名", "required_password": "密码是必需的", + "required_role_name": "必填:角色名称", "required_team_name": "必填:团队名称", "required_username": "必填:用户名", "restore_default_template": "恢复默认模板", @@ -230,6 +233,10 @@ "risk_score_weight_medium": "中(默认值:3)", "risk_score_weight_unassigned": "未分配(默认值:5)", "risk_score_weighting_description": "您可以自定义每个严重性的权重来自定义风险评分。", + "role_created": "角色已创建", + "role_deleted": "角色已删除", + "role_name": "角色名称", + "roles": "角色", "scope": "范围", "select_ecosystem": "选择生态系统", "select_ldap_group": "选择 LDAP 组", diff --git a/src/router/index.js b/src/router/index.js index 10f3eb65..20bf9e76 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -94,6 +94,7 @@ const OidcUsers = () => import('@/views/administration/accessmanagement/OidcUsers'); const OidcGroups = () => import('@/views/administration/accessmanagement/OidcGroups'); +const Roles = () => import('@/views/administration/accessmanagement/Roles'); const Teams = () => import('@/views/administration/accessmanagement/Teams'); const Permissions = () => import('@/views/administration/accessmanagement/Permissions'); @@ -1075,6 +1076,23 @@ function configRoutes() { ], }, }, + { + path: 'accessManagement/roles', + component: Roles, + meta: { + title: i18n.t('message.administration'), + i18n: 'message.administration', + sectionPath: '/admin', + sectionName: 'Admin', + permissions: [ + 'ACCESS_MANAGEMENT', + 'ACCESS_MANAGEMENT_CREATE', + 'ACCESS_MANAGEMENT_READ', + 'ACCESS_MANAGEMENT_UPDATE', + 'ACCESS_MANAGEMENT_DELETE', + ], + }, + }, { path: 'accessManagement/teams', component: Teams, diff --git a/src/shared/api.json b/src/shared/api.json index a38230cb..83a82aff 100644 --- a/src/shared/api.json +++ b/src/shared/api.json @@ -42,6 +42,7 @@ "URL_POLICY_VIOLATION_ANALYSIS": "api/v1/violation/analysis", "URL_PROJECT": "api/v1/project", "URL_REPOSITORY": "api/v1/repository", + "URL_ROLE": "api/v1/role", "URL_SEARCH": "api/v1/search", "URL_SERVICE": "api/v1/service", "URL_TAG": "api/v1/tag", diff --git a/src/views/administration/AdminMenu.vue b/src/views/administration/AdminMenu.vue index 599fb567..cc65b1e5 100644 --- a/src/views/administration/AdminMenu.vue +++ b/src/views/administration/AdminMenu.vue @@ -377,6 +377,11 @@ export default { name: this.$t('admin.oidc_groups'), route: 'accessManagement/oidcGroups', }, + { + component: 'Roles', + name: this.$t('admin.roles'), + route: 'accessManagement/roles', + }, { component: 'Teams', name: this.$t('admin.teams'), diff --git a/src/views/administration/Administration.vue b/src/views/administration/Administration.vue index 04a6231f..879ac822 100644 --- a/src/views/administration/Administration.vue +++ b/src/views/administration/Administration.vue @@ -76,6 +76,7 @@ import OidcGroups from './accessmanagement/OidcGroups'; import OidcUsers from './accessmanagement/OidcUsers'; import Permissions from './accessmanagement/Permissions'; import PortfolioAccessControl from './accessmanagement/PortfolioAccessControl'; +import Roles from './accessmanagement/Roles'; import Teams from './accessmanagement/Teams'; export default { @@ -122,6 +123,7 @@ export default { ManagedUsers, OidcUsers, OidcGroups, + Roles, Teams, Permissions, PortfolioAccessControl, diff --git a/src/views/administration/accessmanagement/CreateRoleModal.vue b/src/views/administration/accessmanagement/CreateRoleModal.vue new file mode 100644 index 00000000..0847b0ed --- /dev/null +++ b/src/views/administration/accessmanagement/CreateRoleModal.vue @@ -0,0 +1,69 @@ + + + diff --git a/src/views/administration/accessmanagement/Roles.vue b/src/views/administration/accessmanagement/Roles.vue new file mode 100644 index 00000000..c15991c5 --- /dev/null +++ b/src/views/administration/accessmanagement/Roles.vue @@ -0,0 +1,235 @@ + + + From 59d7bfe44b54138c4af57ef4ba506552f22ef18d Mon Sep 17 00:00:00 2001 From: Allen Shearin Date: Tue, 4 Mar 2025 16:54:24 -0700 Subject: [PATCH 13/53] remove description field Signed-off-by: Allen Shearin --- src/views/administration/accessmanagement/Roles.vue | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/views/administration/accessmanagement/Roles.vue b/src/views/administration/accessmanagement/Roles.vue index c15991c5..d920a266 100644 --- a/src/views/administration/accessmanagement/Roles.vue +++ b/src/views/administration/accessmanagement/Roles.vue @@ -97,9 +97,6 @@ export default { -
@@ -128,7 +125,6 @@ export default { return { role: row, name: row.name, - description: row.description, permissions: row.permissions, labelIcon: { dataOn: '\u2713', @@ -143,7 +139,6 @@ export default { .post(url, { uuid: this.role.uuid, name: this.name, - description: this.description, }) .then((response) => { this.role = response.data; @@ -206,9 +201,6 @@ export default { }, syncVariables: function (role) { this.role = role; - if (role.description) { - this.description = role.description; - } this.permissions = role.permissions; }, }, From 42a4b50c4937569d321dd49d4de0f871e48942f3 Mon Sep 17 00:00:00 2001 From: Ephraim Mensah Date: Wed, 5 Mar 2025 16:36:19 +0000 Subject: [PATCH 14/53] Update the LDAP users and role heading Signed-off-by: Ephraim Mensah --- .../accessmanagement/LdapUsers.vue | 29 +++++++++---------- .../accessmanagement/SelectRoleModal.vue | 4 +-- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/src/views/administration/accessmanagement/LdapUsers.vue b/src/views/administration/accessmanagement/LdapUsers.vue index bf957e69..cd9bebea 100644 --- a/src/views/administration/accessmanagement/LdapUsers.vue +++ b/src/views/administration/accessmanagement/LdapUsers.vue @@ -134,22 +134,7 @@ export default {
- -
- - - - -
- -
- - - - -
-
@@ -158,8 +143,20 @@ export default {
+ +
+ + + + {{ project.name }} + + {{ $t('admin.select_project') }} + + +
+
- +
{{ $t('admin.delete_user') }}
diff --git a/src/views/administration/accessmanagement/SelectRoleModal.vue b/src/views/administration/accessmanagement/SelectRoleModal.vue index bc5a31ee..724270e0 100644 --- a/src/views/administration/accessmanagement/SelectRoleModal.vue +++ b/src/views/administration/accessmanagement/SelectRoleModal.vue @@ -1,6 +1,6 @@ + + From 794a26d7fad968d549ef2f7f44f05ce5016ac35a Mon Sep 17 00:00:00 2001 From: Allen Shearin Date: Thu, 6 Mar 2025 19:07:24 -0700 Subject: [PATCH 17/53] working modal Signed-off-by: Allen Shearin --- .../accessmanagement/LdapUsers.vue | 12 -- .../accessmanagement/RoleFormInputGroup.vue | 64 +++++--- .../accessmanagement/SelectRoleModal.vue | 152 ++++++++++++------ 3 files changed, 149 insertions(+), 79 deletions(-) diff --git a/src/views/administration/accessmanagement/LdapUsers.vue b/src/views/administration/accessmanagement/LdapUsers.vue index a9b3aac0..f1a56ba1 100644 --- a/src/views/administration/accessmanagement/LdapUsers.vue +++ b/src/views/administration/accessmanagement/LdapUsers.vue @@ -144,18 +144,6 @@ export default {
- - {{ - $t('admin.select_project') - }} - - - - Action A - Action B - - -
diff --git a/src/views/administration/accessmanagement/RoleFormInputGroup.vue b/src/views/administration/accessmanagement/RoleFormInputGroup.vue index 3d6d1f3a..2ad6fc69 100644 --- a/src/views/administration/accessmanagement/RoleFormInputGroup.vue +++ b/src/views/administration/accessmanagement/RoleFormInputGroup.vue @@ -1,11 +1,20 @@ diff --git a/src/views/administration/accessmanagement/SelectRoleModal.vue b/src/views/administration/accessmanagement/SelectRoleModal.vue index e9545403..c92ca80c 100644 --- a/src/views/administration/accessmanagement/SelectRoleModal.vue +++ b/src/views/administration/accessmanagement/SelectRoleModal.vue @@ -1,78 +1,138 @@ From 65d13235d345ce4368ae3a2d1115d3c2465f8252 Mon Sep 17 00:00:00 2001 From: Allen Shearin Date: Mon, 10 Mar 2025 16:20:41 -0600 Subject: [PATCH 21/53] update locale files Signed-off-by: Allen Shearin --- src/i18n/locales/de.json | 2 ++ src/i18n/locales/en.json | 2 ++ src/i18n/locales/es.json | 2 ++ src/i18n/locales/fr.json | 2 ++ src/i18n/locales/hi.json | 2 ++ src/i18n/locales/it.json | 2 ++ src/i18n/locales/ja.json | 2 ++ src/i18n/locales/pl.json | 2 ++ src/i18n/locales/pt-BR.json | 2 ++ src/i18n/locales/pt.json | 2 ++ src/i18n/locales/ru.json | 2 ++ src/i18n/locales/uk-UA.json | 2 ++ src/i18n/locales/zh.json | 2 ++ 13 files changed, 26 insertions(+) diff --git a/src/i18n/locales/de.json b/src/i18n/locales/de.json index 726d2f5f..ab69036a 100644 --- a/src/i18n/locales/de.json +++ b/src/i18n/locales/de.json @@ -41,6 +41,7 @@ "api_keys": "API-Schlüssel", "api_token": "API-Token", "api_token_header": "Header des API-Tokens", + "assign_role": "Rolle zuweisen", "base_url": "Basis-URL", "bearer_token_auth_enable": "Authentifizieren mit einem persönlichen Zugriffstoken", "bom_formats": "BOM-Formate", @@ -366,6 +367,7 @@ "apply_vex": "VEX anwenden", "apply_vex_tooltip": "Wenden Sie Analysen aus einem Vulnerability Exploitability eXchange (VEX)-Dokument auf dieses Projekt an.", "approved": "Genehmigt", + "assign": "Zuweisen", "attributed_on": "Zugeordnet am", "audit_trail": "Buchungskontrolle", "audit_vulnerabilities": "Schwachstellen prüfen", diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index 13314f98..ced9c7fb 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -41,6 +41,7 @@ "api_keys": "API Keys", "api_token": "API token", "api_token_header": "API token header", + "assign_role": "Assign Role", "base_url": "Base URL", "bearer_token_auth_enable": "Authenticate with a personal access token", "bom_formats": "BOM Formats", @@ -372,6 +373,7 @@ "apply_vex": "Apply VEX", "apply_vex_tooltip": "Apply analyses from a Vulnerability Exploitability eXchange (VEX) document to this project.", "approved": "Approved", + "assign": "Assign", "attributed_on": "Attributed On", "audit_trail": "Audit Trail", "audit_vulnerabilities": "Audit Vulnerabilities", diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json index 2283b903..aeb3a4e5 100644 --- a/src/i18n/locales/es.json +++ b/src/i18n/locales/es.json @@ -41,6 +41,7 @@ "api_keys": "Claves API", "api_token": "token API", "api_token_header": "api_token_header", + "assign_role": "Asignar rol", "base_url": "URL base", "bearer_token_auth_enable": "Autenticarse con un token de acceso personal", "bom_formats": "Formatos de lista de materiales", @@ -366,6 +367,7 @@ "apply_vex": "Aplicar VEX", "apply_vex_tooltip": "Aplique análisis de un documento de Vulnerability Exploitability eXchange (VEX) a este proyecto.", "approved": "Aprobado", + "assign": "Asignar", "attributed_on": "Atribuido el", "audit_trail": "Pista de auditoría", "audit_vulnerabilities": "Vulnerabilidades de auditoría", diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json index 90d93bc8..5a5cefb1 100644 --- a/src/i18n/locales/fr.json +++ b/src/i18n/locales/fr.json @@ -41,6 +41,7 @@ "api_keys": "Clés d'API", "api_token": "Jeton d'API", "api_token_header": "Entête du jeton d'API", + "assign_role": "Attribuer un rôle", "base_url": "URL de base", "bearer_token_auth_enable": "S'authentifier avec un jeton d'accès personnel", "bom_formats": "Formats de nomenclature (BOM)", @@ -366,6 +367,7 @@ "apply_vex": "Appliquer VEX", "apply_vex_tooltip": "Appliquer les analyses d'un document Vulnerability Exploitability eXchange (VEX) à ce projet.", "approved": "Approuvée", + "assign": "Attribuer", "attributed_on": "Attribuée le", "audit_trail": "Suivi d'audit", "audit_vulnerabilities": "Audit des vulnérabilités", diff --git a/src/i18n/locales/hi.json b/src/i18n/locales/hi.json index e7a72a15..15b66f00 100644 --- a/src/i18n/locales/hi.json +++ b/src/i18n/locales/hi.json @@ -41,6 +41,7 @@ "api_keys": "एपीआई कुंजियाँ", "api_token": "एपीआई टोकन", "api_token_header": "api_token_header", + "assign_role": "भूमिका सौंपें", "base_url": "आधार यूआरएल", "bearer_token_auth_enable": "व्यक्तिगत एक्सेस टोकन से प्रमाणीकरण करें", "bom_formats": "बीओएम प्रारूप", @@ -366,6 +367,7 @@ "apply_vex": "VEX लागू करें", "apply_vex_tooltip": "इस परियोजना पर भेद्यता शोषण एक्सचेंज (VEX) दस्तावेज़ से विश्लेषण लागू करें।", "approved": "अनुमत", + "assign": "सौंपना", "attributed_on": "पर जिम्मेदार ठहराया", "audit_trail": "लेखापरीक्षा", "audit_vulnerabilities": "ऑडिट कमजोरियाँ", diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json index 349ea751..39d0eb99 100644 --- a/src/i18n/locales/it.json +++ b/src/i18n/locales/it.json @@ -41,6 +41,7 @@ "api_keys": "Chiavi API", "api_token": "Token API", "api_token_header": "api_token_header", + "assign_role": "Assegna ruolo", "base_url": "URL di base", "bearer_token_auth_enable": "Autenticarsi con un token di accesso personale", "bom_formats": "Formati distinta base", @@ -366,6 +367,7 @@ "apply_vex": "Applica VEX", "apply_vex_tooltip": "Applicare le analisi da un documento Vulnerability Exploitability eXchange (VEX) a questo progetto.", "approved": "Approvato", + "assign": "Assegnare", "attributed_on": "Attribuito a", "audit_trail": "Traccia di controllo", "audit_vulnerabilities": "Vulnerabilità del controllo", diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json index 616975c0..9ac6d357 100644 --- a/src/i18n/locales/ja.json +++ b/src/i18n/locales/ja.json @@ -41,6 +41,7 @@ "api_keys": "APIキー", "api_token": "APIトークン", "api_token_header": "api_token_header", + "assign_role": "ロールを割り当てる", "base_url": "ベースURL", "bearer_token_auth_enable": "パーソナルアクセストークンで認証する", "bom_formats": "BOM 形式", @@ -366,6 +367,7 @@ "apply_vex": "VEXを適用する", "apply_vex_tooltip": "Vulnerability Exploitability eXchange (VEX) ドキュメントからの分析をこのプロジェクトに適用します。", "approved": "承認された", + "assign": "割り当て", "attributed_on": "帰属先", "audit_trail": "監査証跡", "audit_vulnerabilities": "監査の脆弱性", diff --git a/src/i18n/locales/pl.json b/src/i18n/locales/pl.json index 4d0244ed..cd2234e8 100644 --- a/src/i18n/locales/pl.json +++ b/src/i18n/locales/pl.json @@ -41,6 +41,7 @@ "api_keys": "Klucze API", "api_token": "Token API", "api_token_header": "api_token_header", + "assign_role": "Przypisz rolę", "base_url": "Bazowy adres URL", "bearer_token_auth_enable": "Uwierzytelnij się za pomocą osobistego tokena dostępu", "bom_formats": "Formaty BOM-ów", @@ -366,6 +367,7 @@ "apply_vex": "Zastosuj VEX", "apply_vex_tooltip": "Zastosuj analizy z dokumentu Vulnerability Exploitability eXchange (VEX) do tego projektu.", "approved": "Zatwierdzony", + "assign": "Przypisać", "attributed_on": "Przypisane", "audit_trail": "Ścieżka audytu", "audit_vulnerabilities": "Audyt luk w zabezpieczeniach", diff --git a/src/i18n/locales/pt-BR.json b/src/i18n/locales/pt-BR.json index 7c88d4e1..ca746bb5 100644 --- a/src/i18n/locales/pt-BR.json +++ b/src/i18n/locales/pt-BR.json @@ -41,6 +41,7 @@ "api_keys": "Chaves de API", "api_token": "Token de API", "api_token_header": "api_token_header", + "assign_role": "Atribuir função", "base_url": "URL base", "bearer_token_auth_enable": "Autenticar com um token de acesso pessoal", "bom_formats": "Formatos de lista de materiais", @@ -366,6 +367,7 @@ "apply_vex": "Aplicar VEX", "apply_vex_tooltip": "Aplique análises de um documento Vulnerability Exploitability eXchange (VEX) a este projeto.", "approved": "Aprovado", + "assign": "Atribuir", "attributed_on": "Atribuído em", "audit_trail": "Trilha de auditoria", "audit_vulnerabilities": "Vulnerabilidades de auditoria", diff --git a/src/i18n/locales/pt.json b/src/i18n/locales/pt.json index 716173cc..ee135d8b 100644 --- a/src/i18n/locales/pt.json +++ b/src/i18n/locales/pt.json @@ -41,6 +41,7 @@ "api_keys": "Chaves de API", "api_token": "Token de API", "api_token_header": "api_token_header", + "assign_role": "Atribuir função", "base_url": "URL base", "bearer_token_auth_enable": "Autenticar com um token de acesso pessoal", "bom_formats": "Formatos de lista de materiais", @@ -367,6 +368,7 @@ "apply_vex_tooltip": "Aplique análises de um documento Vulnerability Exploitability eXchange (VEX) a este projeto.", "approved": "Aprovado", "attributed_on": "Atribuído em", + "assign": "Atribuir", "audit_trail": "Trilha de auditoria", "audit_vulnerabilities": "Vulnerabilidades de auditoria", "auditing_progress": "Progresso da auditoria", diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json index 3c7ad3e7..b1ae749a 100644 --- a/src/i18n/locales/ru.json +++ b/src/i18n/locales/ru.json @@ -41,6 +41,7 @@ "api_keys": "Ключи API", "api_token": "Токен API", "api_token_header": "Заголовок токена API", + "assign_role": "Назначить роль", "base_url": "Базовый URL", "bearer_token_auth_enable": "Аутентификация с помощью токена доступа", "bom_formats": "Форматы BOM", @@ -367,6 +368,7 @@ "apply_vex_tooltip": "Применить анализ из документа Vulnerability Exploitability eXchange (VEX) к этому проекту.", "approved": "Одобрено", "attributed_on": "Указано на", + "assign": "Назначить", "audit_trail": "Журнал аудита", "audit_vulnerabilities": "Аудит уязвимостей", "auditing_progress": "Прогресс аудита", diff --git a/src/i18n/locales/uk-UA.json b/src/i18n/locales/uk-UA.json index 1184ae92..36bb2760 100644 --- a/src/i18n/locales/uk-UA.json +++ b/src/i18n/locales/uk-UA.json @@ -41,6 +41,7 @@ "api_keys": "Ключі API", "api_token": "Маркер API", "api_token_header": "Заголовок маркера API", + "assign_role": "Призначити роль", "base_url": "Базовий URL", "bearer_token_auth_enable": "Автентифікуйте за допомогою особистого маркера доступу", "bom_formats": "Формати BOM", @@ -366,6 +367,7 @@ "apply_vex": "Застосуйте VEX", "apply_vex_tooltip": "Застосуйте до цього проекту аналіз із документа Vulnerability Exploitability eXchange (VEX).", "approved": "Затверджено", + "assign": "Призначити", "attributed_on": "Приписується", "audit_trail": "Аудиторський слід", "audit_vulnerabilities": "Уразливості аудиту", diff --git a/src/i18n/locales/zh.json b/src/i18n/locales/zh.json index 071f65f7..3965760b 100644 --- a/src/i18n/locales/zh.json +++ b/src/i18n/locales/zh.json @@ -41,6 +41,7 @@ "api_keys": "API 密钥", "api_token": "API 令牌", "api_token_header": "API Token Header", + "assign_role": "分配角色", "base_url": "基本 URL", "bearer_token_auth_enable": "使用个人访问令牌进行身份验证", "bom_formats": "BOM 格式", @@ -367,6 +368,7 @@ "apply_vex_tooltip": "将漏洞可利用性交换 (VEX) 文档的分析应用于该项目。", "approved": "批准", "attributed_on": "归因于", + "assign": "分配", "audit_trail": "审计追踪", "audit_vulnerabilities": "审计漏洞", "auditing_progress": "审计进度", From 74e14b470b33c281786603f5e22fc2c0f09c991f Mon Sep 17 00:00:00 2001 From: Johnny Mayer Date: Mon, 10 Mar 2025 22:22:00 +0000 Subject: [PATCH 22/53] Added english locale defs + first try at adding Permissions to CRM Signed-off-by: Johnny Mayer --- src/i18n/locales/en.json | 1954 +++++++++-------- .../accessmanagement/CreateRoleModal.vue | 170 +- 2 files changed, 1084 insertions(+), 1040 deletions(-) diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index ae072c4d..dc03b0ab 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -1,978 +1,980 @@ { - "404": { - "action": "Go Back", - "heading": "Oops! This is awkward", - "message": "The page you're looking for could not be found" - }, - "admin": { - "access_management": "Access Management", - "alert_created": "Alert created", - "alert_deleted": "Alert deleted", - "alert_log_successful_publish": "Log successful publish", - "alert_log_successful_publish_help": "Emit a log message upon successful publishing of the alert to the destination, instead of only emitting logs when issues are encountered. Aids in debugging missing alerts, or making alert publishing auditable.", - "alerts": "Alerts", - "analyzer_internal_desc": "The internal analyzer evaluates components against an internal vulnerability database derived from the National Vulnerability Database, GitHub Advisories (if enabled) and VulnDB (if enabled). This analyzer makes use of the Common Platform Enumeration (CPE) defined in components. Components with a valid CPE will be evaluated with this analyzer.", - "analyzer_internal_enable": "Enable internal analyzer", - "analyzer_internal_fuzzy_enable": "Enable fuzzy CPE matching. Helps with inconsistent NVD data, highlighting missing risks but also increasing false positives", - "analyzer_internal_fuzzy_exclude_internal": "Enable fuzzy CPE matching on internal components", - "analyzer_internal_fuzzy_exclude_purl": "Enable fuzzy CPE matching on components that have a Package URL (PURL) defined", - "analyzer_ossindex_desc": "OSS Index is a service provided by Sonatype which identifies vulnerabilities in third-party components. Dependency-Track integrates natively with the OSS Index service to provide highly accurate results. Use of this analyzer requires a valid PackageURL for the components being analyzed.", - "analyzer_ossindex_enable": "Enable OSS Index analyzer", - "analyzer_snyk_alias_sync_warning": "Snyk does not differentiate between related and identical vulnerabilities. Proceed with caution.", - "analyzer_snyk_api_version": "API Version", - "analyzer_snyk_api_version_warning": "Changing the default version may break the integration!", - "analyzer_snyk_desc": "Snyk's security intelligence database, also known as the Snyk Intel Vulnerability Database, is maintained by a dedicated research team that combines public sources, contributions from the developer community, proprietary research, and machine learning to continuously adapt to the changing and expanding nature of security threats. Dependency-Track integrates natively with Snyk's REST API to provide highly accurate results. Use of this analyzer requires a valid PackageURL for the components being analyzed.", - "analyzer_snyk_enable": "Enable Snyk analyzer", - "analyzer_snyk_how_to_api_token_help": "How do I get an API token?", - "analyzer_snyk_how_to_api_version_help": "Where do I find available versions?", - "analyzer_snyk_how_to_org_id_help": "How do I find my Organization ID?", - "analyzer_snyk_multiple_tokens_info": "Multiple tokens may be provided by separating them with semicolons, e.g. ", - "analyzer_snyk_org_id": "Organization ID", - "analyzer_snyk_why_multiple_cvss": "Why are there multiple CVSS Scores for the same vulnerability?", - "analyzer_trivy_enable": "Enable Trivy analyzer", - "analyzer_trivy_ignore_unfixed": "Ignore unfixed vulnerabilities", - "analyzer_vulndb_desc": "VulnDB is a commercial service from Risk Based Security which identifies vulnerabilities in third-party components. Dependency-Track integrates natively with the VulnDB service to provide highly accurate results. Use of this analyzer requires a valid CPE for the components being analyzed.", - "analyzer_vulndb_enable": "Enable VulnDB analyzer", - "analyzers": "Analyzers", - "api_key_comment": "API Key Comment", - "api_key_comment_updated": "API Key Comment Updated", - "api_key_created_tooltip": "When the API Key was created", - "api_key_last_used_tooltip": "Approximate last usage of the API Key", - "api_keys": "API Keys", - "api_token": "API token", - "api_token_header": "API token header", - "base_url": "Base URL", - "bearer_token_auth_enable": "Authenticate with a personal access token", - "bom_formats": "BOM Formats", - "bom_formats_desc": "Enables support for processing BOMs of various formats. Only BOM formats which are enabled will be processed.", - "bom_validation": "BOM Validation", - "bom_validation_mode": "Validation Mode", - "cargo": "Cargo", - "change_password": "Change Password", - "change_password_next_login": "User must change password at next login", - "clone_template": "Clone Template", - "composer": "Composer", - "configuration": "Configuration", - "configuration_saved": "Configuration saved", - "configuration_test": "Configuration Test", - "consumer_key": "Consumer key", - "consumer_secret": "Consumer secret", - "cpan": "CPAN", - "create_alert": "Create Alert", - "create_ldap_user": "Create LDAP User", - "create_managed_user": "Create Managed User", - "create_oidc_group": "Create Group", - "create_oidc_user": "Create OpenID Connect User", - "create_repository": "Create Repository", - "create_role": "Create Role", - "create_team": "Create Team", - "create_template": "Create Template", - "create_user": "Create User", - "days": "Days", - "default": "Default", - "default_language": "Default Language", - "default_language_desc": "Default language, which is used for everyone, when they didn't specify one. Langauge from Browser will be used, when this is disabled.", - "default_language_enable": "Enable Default language", - "default_template_restored": "Default templates restored", - "defectdojo": "DefectDojo", - "delete_alert": "Delete Alert", - "delete_oidc_group": "Delete Group", - "delete_repository": "Delete Repository", - "delete_role": "Delete Role", - "delete_team": "Delete Team", - "delete_template": "Delete Template", - "delete_user": "Delete User", - "destination": "Destination", - "disabled": "Disabled", - "disabled_for_tags": "Disabled for tags", - "distinguished_name": "Distinguished name", - "edit_api_key_comment": "Edit API Key Comment", - "email": "Email", - "email_address": "Email address", - "email_enable_ssltls": "Enable SSL/TLS encryption", - "email_from_address": "From email address", - "email_prefix": "Subject prefix", - "email_smtp_password": "SMTP password", - "email_smtp_port": "SMTP server port", - "email_smtp_server": "SMTP server", - "email_smtp_username": "SMTP username", - "email_trust_cert": "Trust the certificate provided by the SMTP server", - "enable_acl": "Enable portfolio access control (beta)", - "enable_bom_cyclonedx": "Enable CycloneDX", - "enable_default_template_override": "Enable default template override", - "enable_email": "Enable email", - "enable_index_consistency_check": "Enable periodic consistency check", - "enable_risk_score_history_check": "Recalculate risk score weighting on project history", - "enable_svg_badge": "Enable unauthenticated SVG badge access (deprecated)", - "enabled": "Enabled", - "enabled_for_tags": "Enabled for tags", - "experimental": "Experimental", - "experimental_bom_upload_v2": "BOM Processing V2", - "experimental_bom_upload_v2_info": "The logic how uploaded BOMs are processed and ingested into Dependency-Track has been overhauled to be more reliable and efficient. Further, BOM processing is now an atomic operation, such that errors occurring midway do not cause a partial state to be left behind. De-duplication of components and services is more predictable, and log messages emitted during processing contain additional context, making them easier to correlate. Because the new implementation can have a big impact on how Dependency-Track behaves regarding BOM uploads, it is disabled by default for this release.", - "experimental_info": "The following options are experimental options and should be used with precaution.", - "fortify_ssc": "Fortify SSC", - "gem": "Gem", - "general": "General", - "general_template_configuration": "General template configuration", - "github": "GitHub", - "github_advisories": "GitHub Advisories", - "gitlab_integration": "GitLab", - "integration_gitlab_enable": "Enable GitLab Integration", - "go_modules": "Go Modules", - "group": "Group", - "hackage": "Hackage", - "hex": "Hex", - "hours": "Hours", - "identifier": "Identifier", - "include_active_children": "Include active children of projects", - "include_children": "Include children of projects", - "index_consistency_check_cadence": "Cadence (in minutes)", - "index_consistency_check_description": "You can enable a periodic background task that will check that all indexes exists, are not corrupted and that their difference with Dependency Track database is under a defined threshold percentage. Any check failure will trigger a rebuild of the corresponding index. A restart is required to take cadence modification into account.", - "index_consistency_check_threshold": "Delta threshold (in percentage)", - "index_general_description": "Dependency Track uses Apache Lucene to enable full-text search on various entities like projects or vulnerabilities.", - "index_issues_description": "The lucene indexes can degrade or drift from Dependency Track database over time. Even though DT does its best to minimize the drift, the administrative features below are provided to check or restore the indexes if need be. It must be used with caution.", - "index_rebuild_description": "You can selectively trigger an immediate rebuild of some or all indexes. The index rebuild will be perform by an asynchronous tasks. You can check the progress using Dependency Track logs.", - "index_use_cases": "The full-text search feature is principally used for the search API (i.e. all the indexes) and internal analyzer fuzzy matching on CPE (i.e. the vulnerable software index).", - "integration_defectdojo_enable": "Enable DefectDojo integration", - "integration_defectdojo_reimport_enable": "Enable reimport", - "integration_fortify_ssc_enable": "Enable Fortify SSC integration", - "integration_kenna_connector_id": "Connector ID", - "integration_kenna_enable": "Enable Kenna Security integration", - "integrations": "Integrations", - "internal": "Internal", - "internal_analyzer": "Internal", - "internal_component_desc": "Internal components will be excluded from vulnerability scans and version checks that rely on external systems.\n Note that the regular expressions below must be compliant with Java's regex syntax.\nThe regex must match the whole string. To match all namespaces with 'example' in it, write '.*example.*'.", - "internal_components": "Internal Components", - "internal_identification_error": "An error occurred queueing internal component identification. Check server logs for details", - "internal_identification_queued": "Internal component identification queued", - "jira": "Jira", - "jira_auth_with_token": "Jira personal access token", - "jira_desc": "Jira service authentication", - "jira_password": "Jira password", - "jira_ticket_type": "Jira ticket type", - "jira_url": "Jira base URL", - "jira_username": "Jira user (service account). The user must be provisioned to the appropriate jira instance and permitted to create issues.", - "kenna_security": "Kenna Security", - "ldap_users": "LDAP Users", - "limit_to": "Limit To", - "limit_to_projects": "Limit to projects", - "limit_to_tags": "Limit to tags", - "maintenance": "Maintenance", - "managed_users": "Managed Users", - "mapped_ldap_groups": "Mapped LDAP groups", - "mapped_oidc_groups": "Mapped OpenID Connect Groups", - "mapped_teams": "Mapped Teams", - "maven": "Maven", - "members": "Members", - "metrics": "Metrics", - "mime_type": "Mime type", - "minutes": "Minutes", - "name_regex": "Component name regex", - "name_regex_desc": "Specifies a regular expression that identifies internal components by the components name.", - "namespace_regex": "Component namespace regex", - "namespace_regex_desc": "Specifies a regular expression that identifies internal components by namespace. The namespace is often referred to as 'group', 'organization', or 'vendor' in various ecosystems.", - "national_vulnerability_database": "National Vulnerability Database", - "nixpkgs": "Nixpkgs", - "notification_level": "Notification level", - "notifications": "Notifications", - "npm": "NPM", - "nuget": "NuGet", - "nvd": "NVD", - "nvd_request_api_key_help": "How do I get an API key?", - "oidc_group_created": "OpenID Connect group created", - "oidc_group_deleted": "OpenID Connect group deleted", - "oidc_group_name": "Group Name", - "oidc_groups": "OpenID Connect Groups", - "oidc_users": "OpenID Connect Users", - "oss_index": "Sonatype OSS Index", - "osv_advisories": "Google OSV Advisories (Beta)", - "password": "Password (or access token)", - "password_confirm": "Confirm password", - "password_never_expires": "Password never expires", - "password_updated": "Password updated", - "perform_identification": "Perform Identification", - "perform_test": "Perform Test", - "permissions": "Permissions", - "personal_access_token": "Personal Access Token", - "portfolio_access_control": "Portfolio Access Control", - "preview": "Preview", - "project": "Project", - "project_access": "Project access", - "project_name": "Project Name", - "project_membership": "Project Membership", - "project_retention_enable": "Enable Inactive Project Deletion", - "publisher": "Publisher", - "publisher_class": "Publisher class", - "python": "Python", - "registered_email_address": "Registered email address", - "reindex_components": "Components", - "reindex_cpes": "CPE", - "reindex_error": "Error encountered while submitting reindex request", - "reindex_licenses": "Licenses", - "reindex_projects": "Projects", - "reindex_service_components": "Service components", - "reindex_submitted": "Reindex request submitted", - "reindex_vulnerabilities": "Vulnerabilities", - "reindex_vulnerable_software": "Vulnerable software", - "remove_api_key": "Remove API Key", - "repositories": "Repositories", - "repository_authentication": "Authentication required", - "repository_created": "Repository created", - "repository_deleted": "Repository deleted", - "repository_type": "Repository Type", - "required_confirmPassword": "Password confirmation is required and passwords must match", - "required_email": "Email address is required", - "required_fullname": "Fullname is required", - "required_oidc_group_name": "Name is required", - "required_password": "Password is required", - "required_role_name": "Role name is required", - "required_team_name": "Team name is required", - "required_username": "Username is required", - "restore_default_template": "Restore default templates", - "retention": "Retention", - "risk_score_calc": "((critical * 10) + (high * 5) + (medium * 3) + (low * 1) + (unassigned * 5))", - "risk_score_description": "Dependency Track calculates the risk score of each project as a weighted severity score using the following calculation as default: ", - "risk_score_weight_critical": "Critical (default: 10)", - "risk_score_weight_high": "High (default: 5)", - "risk_score_weight_low": "Low (default: 1)", - "risk_score_weight_medium": "Medium (default: 3)", - "risk_score_weight_unassigned": "Unassigned (default: 5)", - "risk_score_weighting_description": "You can customize the weighting of each severity to customize the risk score.", - "role": "Role", - "role_created": "Role created", - "role_deleted": "Role deleted", - "role_name": "Role Name", - "role_membership": "Role Membership", - "roles": "Roles", - "scope": "Scope", - "select_ecosystem": "Select Ecosystems", - "select_ldap_group": "Select LDAP Group", - "select_oidc_group": "Select OpenID Connect Group", - "select_permission": "Select permission", - "select_project": "Select Project", - "select_role": "Select Role", - "select_team": "Select Team", - "select_team_as_recipient": "Select team as recipient", - "snyk": "Snyk (Beta)", - "subject_identifier": "Subject Identifier", - "submit": "Submit", - "suspended": "Suspended", - "synchronization_cadence_minutes": "Synchronization cadence (in minutes)", - "synchronization_cadence_restart_required": "Restarting Dependency-Track is required for cadence changes to take effect", - "tags": "Tags", - "tags_delete_unused": "Delete Unused", - "task_scheduler": "Task scheduler", - "task_scheduler_component_analysis_cache_clear": "Component analysis cache clear", - "task_scheduler_description": "Dependency Track task scheduler perform various background tasks at a fixed interval. You can modify the fixed interval for each task using the form below. Each interval is expressed in hours. A Dependency Track restart is needed to reschedule the tasks with the updated cadence.", - "task_scheduler_internal_component_identification": "Internal component identification", - "task_scheduler_ldap_sync": "LDAP sync", - "task_scheduler_portfolio_metrics_update": "Portfolio metrics", - "task_scheduler_portfolio_vulnerability_analysis": "Portfolio vulnerability analysis", - "task_scheduler_repository_metadata_fetch": "Repository metadata fetch", - "task_scheduler_vulnerability_metrics_update": "Vulnerability metrics", - "team_created": "Team created", - "team_deleted": "Team deleted", - "team_membership": "Team membership", - "team_name": "Team Name", - "teams": "Teams", - "template": "Template", - "template_basedir": "Template base directory", - "template_basedir_tooltip": "This property is used as base directory for notification templates search", - "template_created": "Template created", - "template_deleted": "Template deleted", - "template_override_description": "Switching the template override control on and providing a template base directory allow you to override Dependency Track default notification publisher templates.", - "template_override_file_hierarchy": "Any Pebble templates available in the template base directory with the appropriate directory hierarchy and naming scheme (e.g ${base directory}/templates/notification/publisher/email.peb) will override Dependency Track default one.", - "template_override_restart_needed": "Dependency Track restart is required for the modifications to be taken into account.", - "template_override_security_warning": "You must set appropriate rights to the template base directory to prevent untrusted third party from supplying fraudulent Pebble templates that could lead to potential remote code execution.", - "templates": "Templates", - "test_notification_queued": "A test notification has been queued", - "token": "Token", - "trivy": "Trivy", - "url": "URL", - "user_created": "User created", - "user_deleted": "User deleted", - "username": "Username", - "versions": "Versions", - "vuln_sources": "Vulnerability Sources", - "vulndb": "VulnDB", - "vulnerability_scans": "Vulnerability Scans", - "vulnsource_alias_sync_enable": "Enable vulnerability alias synchronization", - "vulnsource_alias_sync_enable_tooltip": "Alias data can help in identifying identical vulnerabilities across multiple databases. If the source provides this data, synchronize it with Dependency-Track's database.", - "vulnsource_github_advisories_desc": "GitHub Advisories (GHSA) is a database of CVEs and GitHub-originated security advisories affecting the open source world. Dependency-Track integrates with GHSA by mirroring advisories via GitHub's public GraphQL API. The mirror is refreshed daily, or upon restart of the Dependency-Track instance. A personal access token (PAT) is required in order to authenticate with GitHub, but no scopes need to be assigned to it.", - "vulnsource_github_advisories_enable": "Enable GitHub Advisory mirroring", - "vulnsource_nvd_desc": "The National Vulnerability Database (NVD) is the largest publicly available source of vulnerability intelligence. It is maintained by a group within the National Institute of Standards and Technology (NIST) and builds upon the work of MITRE and others. Vulnerabilities in the NVD are called Common Vulnerabilities and Exposures (CVE). There are over 100,000 CVEs documented in the NVD spanning from the 1990’s to the present.", - "vulnsource_nvd_enable": "Enable National Vulnerability Database mirroring", - "vulnsource_nvd_notice": "This product uses data from the NVD API but is not endorsed or certified by the NVD.", - "vulnsource_osv_advisories_desc": "Google OSV is a distributed vulnerability and triage infrastructure for open source projects aimed at helping both open source maintainers and consumers of open source. It serves as an aggregator of vulnerability databases that have adopted the OpenSSF Vulnerability format.", - "vulnsource_osv_advisories_enable": "Select ecosystem to enable Google OSV Advisory mirroring", - "vulnsource_osv_alias_sync_warning": "OSV may report non-identical vulnerabilities as aliases. Proceed with caution.", - "vulnsource_osv_base_url": "OSV Base URL", - "welcome_message": "Welcome Message", - "welcome_message_desc": "Customize the welcome message that appears on the start page of Dependency-Track before users sign in.", - "welcome_message_enable": "Enable welcome message", - "workflow_step_timeout": "Step Timeout", - "workflows": "Workflows" - }, - "condition": { - "forbidden": "Forbidden (403)", - "http_request_error": "HTTP Request Error", - "server_error": "Server Error", - "successful": "successful", - "unsuccessful_action": "Could not perform the requested action" - }, - "hashes": { - "blake3": "BLAKE3", - "blake_256": "BLAKE2b-256", - "blake_384": "BLAKE2b-384", - "blake_512": "BLAKE2b-512", - "md5": "MD5", - "sha3_256": "SHA3-256", - "sha3_384": "SHA3-384", - "sha3_512": "SHA3-512", - "sha_1": "SHA-1", - "sha_256": "SHA-256", - "sha_384": "SHA-384", - "sha_512": "SHA-512" - }, - "language": { - "de": "German", - "en": "English", - "es": "Spanish", - "fr": "French", - "hi": "Hindi", - "it": "Italian", - "ja": "Japanese", - "pl": "Polish", - "pt": "Portuguese (Portugal)", - "pt-BR": "Portuguese (Brazil)", - "ru": "Russian", - "zh": "Chinese" - }, - "message": { - "about": "About", - "active": "Active", - "add": "Add", - "add_affected_component": "Add Affected Component", - "add_comment": "Add Comment", - "add_component": "Add Component", - "add_license": "Add License", - "add_tag": "Add Tag", - "add_version": "Add Version", - "administration": "Administration", - "affected_components": "Affected Components", - "affected_projects": "Affected Projects", - "age": "Age", - "age_tooltip": "Age in ISO-8601 period format (e.g. P1Y = 1 Year; P2Y3M = 2 Years, 3 Months)", - "alerts_tagged_with": "Alerts tagged with {tag}", - "aliases": "Aliases", - "analysis": "Analysis", - "analysis_details_tooltip": "Details (explanation, workaround details, and other impact information)", - "analysis_state": "Analysis State", - "analysis_status": "Analysis Status", - "analysis_tooltip": "The current state of an occurrence of a vulnerability", - "analyzer": "Analyzer", - "apply_vex": "Apply VEX", - "apply_vex_tooltip": "Apply analyses from a Vulnerability Exploitability eXchange (VEX) document to this project.", - "approved": "Approved", - "attributed_on": "Attributed On", - "audit_trail": "Audit Trail", - "audit_vulnerabilities": "Audit Vulnerabilities", - "auditing_progress": "Auditing Progress", - "authenticated": "Authenticated", - "author": "Author", - "authors": "Authors", - "bom": "BOM", - "bom_format": "BOM Format", - "bom_uploaded": "BOM uploaded", - "browse": "Browse", - "can_not_fix": "Can not fix", - "cancel": "Cancel", - "change_password": "Change Password", - "classification": "Classification", - "classifier": "Classifier", - "clear_all": "Clear all", - "close": "Close", - "code_not_present": "Code not present", - "code_not_reachable": "Code not reachable", - "comment": "Comment", - "comments": "Comments", - "component": "Component", - "component_application": "Application", - "component_author": "Author", - "component_author_desc": "The author of the component", - "component_classification": "Classification", - "component_classification_desc": "Classifies whether a component is considered internal or external to an organization", - "component_classifier_desc": "Specifies the type of component: Assets (applications, operating systems, and hardware) and non-assets (libraries, frameworks, and files)", - "component_container": "Container", - "component_cpe_desc": "The CPE v2.2 or v2.3 URI as provided by MITRE or NIST. All assets (applications, operating systems, and hardware) should have a CPE specified", - "component_created": "Component created", - "component_deleted": "Component deleted", - "component_details": "Component Details", - "component_device": "Device", - "component_file": "File", - "component_filename_desc": "Specifies the observed filename of the component", - "component_firmware": "Firmware", - "component_framework": "Framework", - "component_group_desc": "The suppliers higher-level namespace, group, or vendor identifier", - "component_hash": "Component Hash", - "component_hash_desc": "Specifies the observed hash value of the component using the preceding algorithm", - "component_identifier_desc": "Identifies the component by Package URL (PURL) or CPE. If the version type is 'Exact', the PURL or CPE must contain the version. If a range is specified, version information in the identifier will be ignored.", - "component_library": "Library", - "component_license_expression_desc": "Specifies license information for the component in the form of an SPDX expression", - "component_license_url_desc": "Specifies the URL to the license of the component", - "component_name": "Component name", - "component_name_desc": "The name of the component as provided by the supplier", - "component_namespace_group_vendor": "Namespace / group / vendor", - "component_operating_system": "Operating system", - "component_package_url_desc": "A Valid Package URL is required for libraries and frameworks. PURL syntax: pkg:type/namespace/name@version?qualifiers#subpath", - "component_properties": "Component Properties", - "component_search": "Component Search", - "component_spdx_license_desc": "Specifies the SPDX license ID of the component", - "component_supplier_name_desc": "The organization that supplied the component", - "component_swid_tagid_desc": "The ISO/IEC 19770-2:2015 (SWID) tag ID provided by the software vendor", - "component_team_desc": "Select the team assigned to this project", - "component_updated": "Component updated", - "component_version_desc": "The version of the component as provided by the supplier", - "component_vulnerabilities": "Component Vulnerabilities", - "components": "Components", - "condition": "Condition", - "condition_deleted": "Condition deleted", - "conditions": "Conditions", - "connected_as": "Connected as", - "contacts": "Contacts", - "coordinates": "Coordinates", - "coordinates_version_tooltip": "You can use the comparison operators >, <, >=, <=, == and != to match specific versions or version ranges", - "copyright": "Copyright", - "cpe": "CPE", - "cpe_full": "Common Platform Enumeration (CPE)", - "create": "Create", - "create_component_property": "Create Component Property", - "create_license_group": "Create License Group", - "create_policy": "Create Policy", - "create_project": "Create Project", - "create_project_property": "Create Project Property", - "create_property": "Create Property", - "create_vulnerability": "Create Vulnerability", - "created": "Created", - "credits": "Credits", - "csv_filetype": "CSV ", - "custom_license": "Custom License", - "custom_license_deleted": "Custom License Deleted", - "cvss": "CVSS", - "cvss_access_complexity": "Access Complexity", - "cvss_adjacent": "Adjacent", - "cvss_attack_complexity": "Attack Complexity", - "cvss_attack_vector": "Attack Vector", - "cvss_authentication": "Authentication", - "cvss_availability_impact": "Availability Impact", - "cvss_base_score": "CVSS Base Score", - "cvss_base_score_short": "Base Score", - "cvss_changed": "Changed", - "cvss_complete": "Complete", - "cvss_confidentiality_impact": "Confidentiality Impact", - "cvss_exploitability": "Exploitability", - "cvss_exploitability_subscore": "CVSS Exploitability Subscore", - "cvss_high": "High", - "cvss_impact": "Impact", - "cvss_impact_subscore": "CVSS Impact Subscore", - "cvss_integrity_impact": "Integrity Impact", - "cvss_local": "Local", - "cvss_low": "Low", - "cvss_medium": "Medium", - "cvss_multiple": "Multiple", - "cvss_network": "Network", - "cvss_none": "None", - "cvss_partial": "Partial", - "cvss_physical": "Physical", - "cvss_privileges_required": "Privileges Required", - "cvss_required": "Required", - "cvss_scope": "Scope", - "cvss_single": "Single", - "cvss_source": "Select source priority for CVSS", - "cvss_unchanged": "Unchanged", - "cvss_user_interaction": "User Interaction", - "cvss_v2": "CVSSv2", - "cvss_v2_vector": "CVSSv2 Vector", - "cvss_v3": "CVSSv3", - "cvss_v3_vector": "CVSSv3 Vector", - "cwe": "CWE", - "cwe_full": "Common Weakness Enumeration (CWE)", - "cwe_id": "CWE ID", - "dashboard": "Dashboard", - "data": "Data", - "dates": "Dates", - "delete": "Delete", - "delete_license_group": "Delete License Group", - "delete_policy": "Delete Policy", - "delete_selected": "Delete selected items", - "dependency_graph": "Dependency Graph", - "deprecated": "Deprecated", - "description": "Description", - "details": "Details", - "direct_only": "Direct only", - "direction": "Direction", - "download_bom": "Download BOM", - "download_component": "Download Components", - "edit": "Edit", - "edit_affected_component": "Edit Affected Component", - "email": "Email", - "empty_selection": "No items selected", - "endpoints": "Endpoints", - "epss": "EPSS", - "epss_percentile": "EPSS Percentile", - "epss_score": "EPSS Score", - "exact": "Exact", - "exploit_predictions": "Exploit Predictions", - "exploitable": "Exploitable", - "export_vdr": "Export VDR", - "export_vdr_tooltip": "Export a Vulnerability Disclosure Report (VDR), as defined in NIST SP 800-161.", - "export_vex": "Export VEX", - "export_vex_tooltip": "Export a Vulnerability Exploitability eXchange (VEX) document.", - "extended": "Extended", - "external_references": "External References", - "false_positive": "False Positive", - "filename": "Filename", - "filters": "Filters", - "findings": "Findings", - "findings_audited": "Findings Audited", - "findings_unaudited": "Findings Unaudited", - "first_seen": "First Seen At", - "from": "From", - "fsf_libre": "FSF Libre", - "fullname": "Full name", - "general": "General", - "global_audit": "Global Audit", - "group": "Group", - "group_name": "Group Name", - "grouped_vulnerabilities": "Grouped Vulnerabilities", - "hashes": "Hashes", - "hashes_short_desc": "Hash (MD5, SHA, SHA3, Blake2b, Blake3)", - "home": "Home", - "identifier": "Identifier", - "identifier_type": "Identifier Type", - "identity": "Identity", - "in_triage": "In Triage", - "inactive": "Inactive", - "inactive_active_children": "The project cannot be set to inactive if it has active children", - "inactive_since": "Inactive since", - "inactive_versions": "Inactive Versions", - "include_acl": "Include access control list", - "include_audit_history": "Include audit history", - "include_components": "Include components", - "include_policy_violations": "Include Policy Violations", - "include_properties": "Include properties", - "include_services": "Include services", - "include_tags": "Include tags", - "inherited_risk_score": "Inherited Risk Score", - "integrity": "Integrity", - "internal": "Internal", - "inventory": "Inventory", - "inventory_with_vulnerabilities": "Inventory with Vulnerabilities", - "justification": "Justification", - "justification_tooltip": "The rationale of why the impact analysis state was asserted to be \"Not Affected\"", - "language": "Language", - "last_bom_import": "Last BOM Import", - "last_measurement": "Last Measurement", - "last_seen": "Last Seen At", - "latest": "Latest", - "latest_version": "Latest Version", - "legal": "Legal", - "license": "License", - "license_comments": "License Comments", - "license_expression": "SPDX Expression", - "license_group": "License group", - "license_group_created": "License group created", - "license_group_deleted": "License group deleted", - "license_groups": "License Groups", - "license_id": "License ID", - "license_id_desc": "The SPDX defined ID of the license. The ID may only contain alpha, numeric, and specific symbols: _ - . +", - "license_name": "License Name", - "license_name_desc": "The name of the license as provided by the supplier", - "license_risk": "License Risk", - "license_text": "License Text", - "license_url": "License URL", - "licenses": "Licenses", - "login": "Login", - "login_desc": "Sign In to your account", - "login_forbidden": "This account is inactive or has been suspended", - "login_more_options": "More options", - "login_unauthorized": "Invalid username or password", - "logout": "Logout", - "manufacturer": "Manufacturer", - "manufacturer_name": "Manufacturer name", - "manufacturer_name_desc": "The organization that manufactured the component that the project describes", - "matrix": "Matrix", - "method": "Method", - "metric_refresh_requested": "A refresh has been requested. Metrics will be updated when the refresh task has completed.", - "name": "Name", - "no_file_chosen": "No file chosen", - "non_vulnerable": "Non Vulnerable", - "not_affected": "Not Affected", - "not_found_in_dependency_graph": "Dependency could not be found in dependency graph", - "not_set": "Not Set", - "notes": "Notes", - "object_identifier": "Object Identifier", - "object_identifier_desc": "A unique identifier (UUID) that Dependency-Track automatically assigns to every object", - "occurred_on": "Occurred On", - "occurrences_in_projects": "Occurrences in projects", - "oidc_availability_check_failed": "Failed to determine availability of OpenID Connect", - "oidc_redirect_failed": "An error occurred while redirecting to the OpenID Connect identity provider", - "only_direct_tooltip": "Only show direct dependencies, hiding transitive dependencies", - "only_outdated_tooltip": "Only show dependencies that have newer stable versions available", - "operational_risk": "Operational Risk", - "operator": "Operator", - "osi_approved": "OSI Approved", - "outdated_only": "Outdated only", - "overview": "Overview", - "owasp_rr": "OWASP Risk Rating", - "owasp_rr_awareness": "Awareness", - "owasp_rr_awareness_hidden": "Hidden", - "owasp_rr_awareness_obvious": "Obvious", - "owasp_rr_awareness_public_knowledge": "Public", - "owasp_rr_awareness_unknown": "Unknown", - "owasp_rr_business_impact_factor": "Business impact Factor", - "owasp_rr_business_impact_score": "OWASP RR Business impact score", - "owasp_rr_business_impact_score_short": "Business impact", - "owasp_rr_ease_of_discovery": "Ease of discovery", - "owasp_rr_ease_of_discovery_automated_tools_available": "Automated", - "owasp_rr_ease_of_discovery_difficult": "Difficult", - "owasp_rr_ease_of_discovery_easy": "Easy", - "owasp_rr_ease_of_discovery_impossible": "Impossible", - "owasp_rr_ease_of_exploit": "Ease of exploit", - "owasp_rr_ease_of_exploit_automated_tools_available": "Automated", - "owasp_rr_ease_of_exploit_difficult": "Difficult", - "owasp_rr_ease_of_exploit_easy": "Easy", - "owasp_rr_ease_of_exploit_theoritical": "Theoritical", - "owasp_rr_financial_damage": "Financial Damage", - "owasp_rr_financial_damage_bankruptcy": "Bankruptcy", - "owasp_rr_financial_damage_less_than_cost_to_fix": "Less than fix", - "owasp_rr_financial_damage_minor": "Minor", - "owasp_rr_financial_damage_significant": "Significant", - "owasp_rr_intrusion_detection": "Intrusion detection", - "owasp_rr_intrusion_detection_active": "Active", - "owasp_rr_intrusion_detection_logged_reviewed": "Logged & Reviewed", - "owasp_rr_intrusion_detection_logged_unreviewed": "Logged & Unreviewed", - "owasp_rr_intrusion_detection_not_logged": "Not logged", - "owasp_rr_likelihood_score": "OWASP RR Likelihood score", - "owasp_rr_likelihood_score_short": "Likelihood", - "owasp_rr_loss_of_accountability": "Loss of accountability", - "owasp_rr_loss_of_accountability_completely_anonymous": "Completely anonymous", - "owasp_rr_loss_of_accountability_fully_traceable": "Fully traceable", - "owasp_rr_loss_of_accountability_possibly_traceable": "Possibly traceable", - "owasp_rr_loss_of_availability": "Loss of availibility (services)", - "owasp_rr_loss_of_availability_all": "All", - "owasp_rr_loss_of_availability_extensive_primary_services": "Extensive primary", - "owasp_rr_loss_of_availability_extensive_secondary_services": "Extensive secondary", - "owasp_rr_loss_of_availability_minimal_primary_services": "Minimal primary", - "owasp_rr_loss_of_availability_minimal_secondary_services": "Minimal secondary", - "owasp_rr_loss_of_confidentiality": "Loss of confidentiality (data)", - "owasp_rr_loss_of_confidentiality_all": "All", - "owasp_rr_loss_of_confidentiality_extensive_critical": "Extensive critical", - "owasp_rr_loss_of_confidentiality_extensive_non_sensitive": "Extensive non sensitive", - "owasp_rr_loss_of_confidentiality_minimal_critical": "Minimal critical", - "owasp_rr_loss_of_confidentiality_minimal_non_sensitive": "Minimal non sensitive", - "owasp_rr_loss_of_integrity": "Loss of integrity (corruption)", - "owasp_rr_loss_of_integrity_all": "All", - "owasp_rr_loss_of_integrity_extensive_seriously_corrupt": "Extensive seriously", - "owasp_rr_loss_of_integrity_extensive_slightly_corrupt": "Extensive slightly", - "owasp_rr_loss_of_integrity_minimal_seriously_corrupt": "Minimal seriously", - "owasp_rr_loss_of_integrity_minimal_slightly_corrupt": "Minimal slightly", - "owasp_rr_motivation": "Motivation", - "owasp_rr_motivation_high_reward": "High reward", - "owasp_rr_motivation_low": "Low", - "owasp_rr_motivation_possible_reward": "Possible reward", - "owasp_rr_non_compliance": "Non compliance", - "owasp_rr_non_compliance_clear": "Clear", - "owasp_rr_non_compliance_high_profile": "High profile", - "owasp_rr_non_compliance_minor": "Minor", - "owasp_rr_opportunity": "Opportunity / Access", - "owasp_rr_opportunity_full": "Full", - "owasp_rr_opportunity_none": "None", - "owasp_rr_opportunity_some": "Some", - "owasp_rr_opportunity_special": "Special", - "owasp_rr_privacy_violation": "Privacy violation", - "owasp_rr_privacy_violation_hundreds": "Hundreds", - "owasp_rr_privacy_violation_millions": "Millions", - "owasp_rr_privacy_violation_one_individual": "One", - "owasp_rr_privacy_violation_thousands": "Thousands", - "owasp_rr_reputation_damage": "Reputation Damage", - "owasp_rr_reputation_damage_brand": "Brand", - "owasp_rr_reputation_damage_goodwill": "Goodwill", - "owasp_rr_reputation_damage_major_accounts": "Major accounts", - "owasp_rr_reputation_damage_minimal": "Minimal", - "owasp_rr_skill_level": "Skill level", - "owasp_rr_skill_level_advanced": "Advanced", - "owasp_rr_skill_level_network_and_programming": "Programming", - "owasp_rr_skill_level_none": "None", - "owasp_rr_skill_level_security_penetration_testing": "Pentest", - "owasp_rr_skill_level_some": "Some", - "owasp_rr_technical_impact_factor": "Technical impact Factor", - "owasp_rr_technical_impact_score": "OWASP RR Technical impact score", - "owasp_rr_technical_impact_score_short": "Technical impact", - "owasp_rr_threat_agent_factor": "Threat Agent Factor", - "owasp_rr_threat_size": "Threat Size", - "owasp_rr_threat_size_anonymous_internet_users": "Internet users", - "owasp_rr_threat_size_auth_users": "Authenticated users", - "owasp_rr_threat_size_dev_sa": "Dev/Sysadmin", - "owasp_rr_threat_size_intranet": "Intranet", - "owasp_rr_threat_size_partners": "Partners", - "owasp_rr_vulnerability_factor": "Vulnerability Factor", - "package_url": "Package URL (PURL)", - "package_url_full": "Package URL (PURL)", - "password": "Password", - "password_change": "Change password", - "password_change_success": "Password changed successfully", - "password_confirm": "Confirm new password", - "password_current": "Current password", - "password_force_change": "Update Password", - "password_force_change_desc": "You need to change your password", - "password_new": "New password", - "password_not_acceptable": "Check that new password and confirm password match. You can't re-use your old password", - "password_unauthorized": "Check current login credentials and try again", - "phone": "Phone", - "policies": "Policies", - "policies_tagged_with": "Policies tagged with {tag}", - "policy_bundle_hash": "Bundle Hash", - "policy_bundle_info": "Bundle Info", - "policy_bundle_sync": "Sync Bundle", - "policy_bundle_sync_requested": "Policy bundle synchronization requested. Vulnerability policy data will be updated when the sync is completed.", - "policy_bundle_sync_timestamp": "Last Synced On", - "policy_bundle_url": "Bundle URL", - "policy_created": "Policy created", - "policy_deleted": "Policy deleted", - "policy_is_only_for_latest_project_version": "Limit to project versions marked as latest", - "policy_last_bundle_sync_failed": "Last bundle sync failed", - "policy_management": "Policy Management", - "policy_name": "Policy Name", - "policy_operation_mode": "Operation Mode", - "policy_violation_audit": "Policy Violation Audit", - "policy_violations": "Policy Violations", - "policy_violations_by_classification": "Policy Violations by Classification", - "policy_violations_by_state": "Policy Violations by State", - "portfolio": "Portfolio", - "portfolio_statistics": "Portfolio Statistics", - "portfolio_vulnerabilities": "Portfolio Vulnerabilities", - "profile_update": "Update Profile", - "profile_updated": "Profile updated", - "project_cloning_in_progress": "The project is being created with the cloning options specified", - "project_created": "Project created", - "project_delete_message": "Deleting this project will also permanently delete all associated child projects. This action cannot be undone. Are you sure you want to proceed?", - "project_delete_title": "Confirm Project Deletion", - "project_deleted": "Project deleted", - "project_details": "Project Details", - "project_is_latest": "Is latest version", - "project_metadata_supplier_name_desc": "The organization that supplied the BOM", - "project_name": "Project Name", - "project_name_desc": "The name of the project or component as provided by the supplier", - "project_properties": "Project Properties", - "project_reanalyze": "Reanalyze", - "project_reanalyze_requested": "A Project Vulnerability Analysis has been requested. Project vulnerability data will be updated when the reanalysis task has completed.", - "project_reanalyze_tooltip": "Runs configured analyzers to detect vulnerabilities in this project's components. Will use any cached results that haven't expired yet", - "project_retention_type": "Select retention type for projects", - "project_supplier_name_desc": "The organization that supplied the component that the project describes", - "project_updated": "Project updated", - "project_vulnerabilities": "Project Vulnerabilities", - "projects": "Projects", - "projects_at_risk": "Projects at Risk", - "projects_tagged_with": "Projects tagged with {tag}", - "properties": "Properties", - "property_created": "Property created", - "property_deleted": "Property deleted", - "property_name": "Property Name", - "property_type": "Property Type", - "property_value": "Property Value", - "protected_at_perimeter": "Protected at perimeter", - "protected_at_runtime": "Protected at runtime", - "protected_by_compiler": "Protected by compiler", - "protected_by_mitigating_control": "Protected by mitigating control", - "provider": "Provider", - "provider_name": "Provider name", - "published": "Published", - "purl": "purl", - "range": "Range", - "ratings": "Ratings", - "recommendation": "Recommendation", - "references": "References", - "reindex": "Rebuild index(es)", - "rejected": "Rejected", - "remove_component": "Remove Component", - "reported_by": "Reported By", - "required_component_identifier": "A component identifier is required", - "required_component_name": "The component name is required", - "required_component_version": "The component version is required", - "required_license_id": "The license ID is required", - "required_license_name": "The license name is required", - "required_project_name": "The project name is required", - "required_service_name": "The service name is required", - "required_vulnerability_vuln_id": "A unique vulnerability identifier is required", - "requires_configuration": "Requires configuration", - "requires_dependency": "Requires dependency", - "requires_environment": "Requires environment", - "reset": "Reset", - "resolved": "Resolved", - "response": "Vendor Response (project)", - "response_tooltip": "A response to the vulnerability by the manufacturer, supplier, or project responsible for the affected component or service", - "risk_score": "Risk Score", - "risk_type": "Risk Type", - "rollback": "Rollback", - "score": "Score", - "search": "Search", - "search_parent": "Type to search parent", - "security_risk": "Security Risk", - "see_also": "See Also", - "select": "Select", - "select_cwe": "Select CWE", - "select_license": "Select License", - "select_project": "Select Project", - "select_tag": "Select Tag", - "selection_deleted": "Selection deleted", - "service_deleted": "Service deleted", - "service_details": "Service Details", - "service_name": "Service name", - "service_name_desc": "The name of the service as described by the provider", - "service_provider_name_desc": "The name of the provider", - "service_updated": "Service updated", - "service_version_desc": "The version of the service as described by the provider", - "service_vulnerabilities": "Service Vulnerabilities", - "services": "Services", - "severity": "Severity", - "show_complete_graph": "Show complete graph", - "show_flat_view": "Show flat project view", - "show_in_dependency_graph": "Show in dependency graph", - "show_inactive_projects": "Show inactive projects", - "show_suppressed_findings": "Show suppressed findings", - "show_suppressed_violations": "Show suppressed violations", - "show_update_information": "Highlight outdated components", - "source_header": "Source Header", - "spdx_license_id": "SPDX License ID", - "state": "State", - "subtitle": "Subtitle", - "supplier": "Supplier", - "supplier_name": "Supplier name", - "suppress": "Suppress", - "suppressed": "Suppressed", - "swid": "swid", - "swid_tagid": "SWID Tag ID", - "switch_view": "Cannot switch view while searching", - "tag_name": "Tag Name", - "tag_unassigned_successfully": "Untagged successfully", - "tags": "Tags", - "team": "Team", - "teams": "Teams", - "template": "Template", - "text_search": "Text Search", - "title": "Title", - "to": "To", - "total": "Total", - "total_findings": "Total Findings", - "total_findings_excluding_aliases": "Total Findings (excluding aliases)", - "total_findings_including_aliases": "Total Findings (including aliases)", - "type": "Type", - "unassign_tag_from_selection": "Unassign tag from selection", - "update": "Update", - "update_details": "Update Details", - "updated": "Updated", - "upload": "Upload", - "upload_bom": "Upload BOM", - "upload_bom_tooltip": "Upload BOM, all components will be analyzed for vulnerabilities", - "upload_vex": "Upload VEX", - "url": "URL", - "urls": "URLs", - "username": "Username", - "validFrom": "Valid From", - "validUntil": "Valid Until", - "value": "Value", - "vector": "Vector", - "vendor_response": "Vendor Response", - "version": "Version", - "version_distance": "Version Distance", - "version_distance_epoch": "epoch", - "version_distance_major": "major", - "version_distance_minor": "minor", - "version_distance_patch": "patch", - "version_distance_tooltip": "Specify the difference between version numbers, or empty to ignore", - "version_type": "Version Type", - "vex_uploaded": "VEX uploaded", - "view_details": "View Details", - "violation_state": "Violation State", - "violations_audited": "Violations Audited", - "violations_unaudited": "Violations Unaudited", - "vulnerabilities": "Vulnerabilities", - "vulnerabilities_by_occurrence": "Vulnerabilities By Occurrence", - "vulnerabilities_tagged_with": "Vulnerabilities tagged with {tag}", - "vulnerability": "Vulnerability", - "vulnerability_audit": "Vulnerability Audit", - "vulnerability_created": "Vulnerability created", - "vulnerability_created_desc": "The date the vulnerability record was originally created", - "vulnerability_deleted": "Vulnerability deleted", - "vulnerability_details": "Vulnerability Details", - "vulnerability_policies": "Vulnerability Policies", - "vulnerability_published_desc": "The date the vulnerability record was originally published", - "vulnerability_tags_updated": "Vulnerability tags updated", - "vulnerability_title": "Title", - "vulnerability_title_desc": "The optional title of the vulnerability", - "vulnerability_updated": "Vulnerability updated", - "vulnerability_updated_desc": "The date the vulnerability record was last updated", - "vulnerability_vuln_id": "Vulnerability ID", - "vulnerability_vuln_id_desc": "The identifier which uniquely identifies this vulnerability within the same source", - "vulnerable": "Vulnerable", - "vulnerable_components": "Vulnerable Components", - "vulnerable_projects": "Vulnerable Projects", - "weakness": "Weakness", - "will_not_fix": "Will not fix", - "workaround_available": "Workaround available", - "x_trust_boundary": "Cross Trust Boundary" - }, - "operator": { - "contains_all": "contains all", - "contains_any": "contains any", - "is": "is", - "is_not": "is not", - "matches": "matches", - "no_match": "does not match" - }, - "policy_violation": { - "fails": "Violation Failures", - "infos": "Informational Violations", - "license": "License Violations", - "operational": "Operational Violations", - "security": "Security Violations", - "total": "Total Violations", - "warns": "Violation Warnings" - }, - "severity": { - "critical": "Critical", - "critical_severity": "Critical Severity", - "cvss_severity": "CVSS Severity", - "derive_from_cvss_or_owasp_rr": "Derive from CVSS or OWASP RR", - "high": "High", - "high_severity": "High Severity", - "info": "Info", - "info_severity": "Informational", - "low": "Low", - "low_severity": "Low Severity", - "medium": "Medium", - "medium_severity": "Medium Severity", - "owasp_rr_severity": "OWASP Risk Rating Severity", - "unassigned": "Unassigned", - "unassigned_severity": "Unassigned Severity" - }, - "validation": { - "confirmed": "{_field_} doesn't match", - "max_value": "{_field_} value should be under {max}", - "min_value": "{_field_} value should be above {min}", - "required": "{_field_} is required" - }, - "violation": { - "fail": "Fail", - "info": "Inform", - "warn": "Warn" - }, - "vulnerability": { - "critical": "Critical Severity Vulnerabilities", - "high": "High Severity Vulnerabilities", - "low": "Low Severity Vulnerabilities", - "medium": "Medium Severity Vulnerabilities", - "unassigned": "Unassigned Vulnerabilities" - } + "404": { + "action": "Go Back", + "heading": "Oops! This is awkward", + "message": "The page you're looking for could not be found" + }, + "admin": { + "access_management": "Access Management", + "alert_created": "Alert created", + "alert_deleted": "Alert deleted", + "alert_log_successful_publish": "Log successful publish", + "alert_log_successful_publish_help": "Emit a log message upon successful publishing of the alert to the destination, instead of only emitting logs when issues are encountered. Aids in debugging missing alerts, or making alert publishing auditable.", + "alerts": "Alerts", + "analyzer_internal_desc": "The internal analyzer evaluates components against an internal vulnerability database derived from the National Vulnerability Database, GitHub Advisories (if enabled) and VulnDB (if enabled). This analyzer makes use of the Common Platform Enumeration (CPE) defined in components. Components with a valid CPE will be evaluated with this analyzer.", + "analyzer_internal_enable": "Enable internal analyzer", + "analyzer_internal_fuzzy_enable": "Enable fuzzy CPE matching. Helps with inconsistent NVD data, highlighting missing risks but also increasing false positives", + "analyzer_internal_fuzzy_exclude_internal": "Enable fuzzy CPE matching on internal components", + "analyzer_internal_fuzzy_exclude_purl": "Enable fuzzy CPE matching on components that have a Package URL (PURL) defined", + "analyzer_ossindex_desc": "OSS Index is a service provided by Sonatype which identifies vulnerabilities in third-party components. Dependency-Track integrates natively with the OSS Index service to provide highly accurate results. Use of this analyzer requires a valid PackageURL for the components being analyzed.", + "analyzer_ossindex_enable": "Enable OSS Index analyzer", + "analyzer_snyk_alias_sync_warning": "Snyk does not differentiate between related and identical vulnerabilities. Proceed with caution.", + "analyzer_snyk_api_version": "API Version", + "analyzer_snyk_api_version_warning": "Changing the default version may break the integration!", + "analyzer_snyk_desc": "Snyk's security intelligence database, also known as the Snyk Intel Vulnerability Database, is maintained by a dedicated research team that combines public sources, contributions from the developer community, proprietary research, and machine learning to continuously adapt to the changing and expanding nature of security threats. Dependency-Track integrates natively with Snyk's REST API to provide highly accurate results. Use of this analyzer requires a valid PackageURL for the components being analyzed.", + "analyzer_snyk_enable": "Enable Snyk analyzer", + "analyzer_snyk_how_to_api_token_help": "How do I get an API token?", + "analyzer_snyk_how_to_api_version_help": "Where do I find available versions?", + "analyzer_snyk_how_to_org_id_help": "How do I find my Organization ID?", + "analyzer_snyk_multiple_tokens_info": "Multiple tokens may be provided by separating them with semicolons, e.g. ", + "analyzer_snyk_org_id": "Organization ID", + "analyzer_snyk_why_multiple_cvss": "Why are there multiple CVSS Scores for the same vulnerability?", + "analyzer_trivy_enable": "Enable Trivy analyzer", + "analyzer_trivy_ignore_unfixed": "Ignore unfixed vulnerabilities", + "analyzer_vulndb_desc": "VulnDB is a commercial service from Risk Based Security which identifies vulnerabilities in third-party components. Dependency-Track integrates natively with the VulnDB service to provide highly accurate results. Use of this analyzer requires a valid CPE for the components being analyzed.", + "analyzer_vulndb_enable": "Enable VulnDB analyzer", + "analyzers": "Analyzers", + "api_key_comment": "API Key Comment", + "api_key_comment_updated": "API Key Comment Updated", + "api_key_created_tooltip": "When the API Key was created", + "api_key_last_used_tooltip": "Approximate last usage of the API Key", + "api_keys": "API Keys", + "api_token": "API token", + "api_token_header": "API token header", + "assign_role": "Assign Role", + "base_url": "Base URL", + "bearer_token_auth_enable": "Authenticate with a personal access token", + "bom_formats": "BOM Formats", + "bom_formats_desc": "Enables support for processing BOMs of various formats. Only BOM formats which are enabled will be processed.", + "bom_validation": "BOM Validation", + "bom_validation_mode": "Validation Mode", + "cargo": "Cargo", + "change_password": "Change Password", + "change_password_next_login": "User must change password at next login", + "clone_template": "Clone Template", + "composer": "Composer", + "configuration": "Configuration", + "configuration_saved": "Configuration saved", + "configuration_test": "Configuration Test", + "consumer_key": "Consumer key", + "consumer_secret": "Consumer secret", + "cpan": "CPAN", + "create_alert": "Create Alert", + "create_ldap_user": "Create LDAP User", + "create_managed_user": "Create Managed User", + "create_oidc_group": "Create Group", + "create_oidc_user": "Create OpenID Connect User", + "create_repository": "Create Repository", + "create_role": "Create Role", + "create_team": "Create Team", + "create_template": "Create Template", + "create_user": "Create User", + "days": "Days", + "default": "Default", + "default_language": "Default Language", + "default_language_desc": "Default language, which is used for everyone, when they didn't specify one. Langauge from Browser will be used, when this is disabled.", + "default_language_enable": "Enable Default language", + "default_template_restored": "Default templates restored", + "defectdojo": "DefectDojo", + "delete_alert": "Delete Alert", + "delete_oidc_group": "Delete Group", + "delete_repository": "Delete Repository", + "delete_role": "Delete Role", + "delete_team": "Delete Team", + "delete_template": "Delete Template", + "delete_user": "Delete User", + "destination": "Destination", + "disabled": "Disabled", + "disabled_for_tags": "Disabled for tags", + "distinguished_name": "Distinguished name", + "edit_api_key_comment": "Edit API Key Comment", + "email": "Email", + "email_address": "Email address", + "email_enable_ssltls": "Enable SSL/TLS encryption", + "email_from_address": "From email address", + "email_prefix": "Subject prefix", + "email_smtp_password": "SMTP password", + "email_smtp_port": "SMTP server port", + "email_smtp_server": "SMTP server", + "email_smtp_username": "SMTP username", + "email_trust_cert": "Trust the certificate provided by the SMTP server", + "enable_acl": "Enable portfolio access control (beta)", + "enable_bom_cyclonedx": "Enable CycloneDX", + "enable_default_template_override": "Enable default template override", + "enable_email": "Enable email", + "enable_index_consistency_check": "Enable periodic consistency check", + "enable_risk_score_history_check": "Recalculate risk score weighting on project history", + "enable_svg_badge": "Enable unauthenticated SVG badge access (deprecated)", + "enabled": "Enabled", + "enabled_for_tags": "Enabled for tags", + "experimental": "Experimental", + "experimental_bom_upload_v2": "BOM Processing V2", + "experimental_bom_upload_v2_info": "The logic how uploaded BOMs are processed and ingested into Dependency-Track has been overhauled to be more reliable and efficient. Further, BOM processing is now an atomic operation, such that errors occurring midway do not cause a partial state to be left behind. De-duplication of components and services is more predictable, and log messages emitted during processing contain additional context, making them easier to correlate. Because the new implementation can have a big impact on how Dependency-Track behaves regarding BOM uploads, it is disabled by default for this release.", + "experimental_info": "The following options are experimental options and should be used with precaution.", + "fortify_ssc": "Fortify SSC", + "gem": "Gem", + "general": "General", + "general_template_configuration": "General template configuration", + "github": "GitHub", + "github_advisories": "GitHub Advisories", + "gitlab_integration": "GitLab", + "integration_gitlab_enable": "Enable GitLab Integration", + "go_modules": "Go Modules", + "group": "Group", + "hackage": "Hackage", + "hex": "Hex", + "hours": "Hours", + "identifier": "Identifier", + "include_active_children": "Include active children of projects", + "include_children": "Include children of projects", + "index_consistency_check_cadence": "Cadence (in minutes)", + "index_consistency_check_description": "You can enable a periodic background task that will check that all indexes exists, are not corrupted and that their difference with Dependency Track database is under a defined threshold percentage. Any check failure will trigger a rebuild of the corresponding index. A restart is required to take cadence modification into account.", + "index_consistency_check_threshold": "Delta threshold (in percentage)", + "index_general_description": "Dependency Track uses Apache Lucene to enable full-text search on various entities like projects or vulnerabilities.", + "index_issues_description": "The lucene indexes can degrade or drift from Dependency Track database over time. Even though DT does its best to minimize the drift, the administrative features below are provided to check or restore the indexes if need be. It must be used with caution.", + "index_rebuild_description": "You can selectively trigger an immediate rebuild of some or all indexes. The index rebuild will be perform by an asynchronous tasks. You can check the progress using Dependency Track logs.", + "index_use_cases": "The full-text search feature is principally used for the search API (i.e. all the indexes) and internal analyzer fuzzy matching on CPE (i.e. the vulnerable software index).", + "integration_defectdojo_enable": "Enable DefectDojo integration", + "integration_defectdojo_reimport_enable": "Enable reimport", + "integration_fortify_ssc_enable": "Enable Fortify SSC integration", + "integration_kenna_connector_id": "Connector ID", + "integration_kenna_enable": "Enable Kenna Security integration", + "integrations": "Integrations", + "internal": "Internal", + "internal_analyzer": "Internal", + "internal_component_desc": "Internal components will be excluded from vulnerability scans and version checks that rely on external systems.\n Note that the regular expressions below must be compliant with Java's regex syntax.\nThe regex must match the whole string. To match all namespaces with 'example' in it, write '.*example.*'.", + "internal_components": "Internal Components", + "internal_identification_error": "An error occurred queueing internal component identification. Check server logs for details", + "internal_identification_queued": "Internal component identification queued", + "jira": "Jira", + "jira_auth_with_token": "Jira personal access token", + "jira_desc": "Jira service authentication", + "jira_password": "Jira password", + "jira_ticket_type": "Jira ticket type", + "jira_url": "Jira base URL", + "jira_username": "Jira user (service account). The user must be provisioned to the appropriate jira instance and permitted to create issues.", + "kenna_security": "Kenna Security", + "ldap_users": "LDAP Users", + "limit_to": "Limit To", + "limit_to_projects": "Limit to projects", + "limit_to_tags": "Limit to tags", + "maintenance": "Maintenance", + "managed_users": "Managed Users", + "mapped_ldap_groups": "Mapped LDAP groups", + "mapped_oidc_groups": "Mapped OpenID Connect Groups", + "mapped_teams": "Mapped Teams", + "maven": "Maven", + "members": "Members", + "metrics": "Metrics", + "mime_type": "Mime type", + "minutes": "Minutes", + "name_regex": "Component name regex", + "name_regex_desc": "Specifies a regular expression that identifies internal components by the components name.", + "namespace_regex": "Component namespace regex", + "namespace_regex_desc": "Specifies a regular expression that identifies internal components by namespace. The namespace is often referred to as 'group', 'organization', or 'vendor' in various ecosystems.", + "national_vulnerability_database": "National Vulnerability Database", + "nixpkgs": "Nixpkgs", + "notification_level": "Notification level", + "notifications": "Notifications", + "npm": "NPM", + "nuget": "NuGet", + "nvd": "NVD", + "nvd_request_api_key_help": "How do I get an API key?", + "oidc_group_created": "OpenID Connect group created", + "oidc_group_deleted": "OpenID Connect group deleted", + "oidc_group_name": "Group Name", + "oidc_groups": "OpenID Connect Groups", + "oidc_users": "OpenID Connect Users", + "oss_index": "Sonatype OSS Index", + "osv_advisories": "Google OSV Advisories (Beta)", + "password": "Password (or access token)", + "password_confirm": "Confirm password", + "password_never_expires": "Password never expires", + "password_updated": "Password updated", + "perform_identification": "Perform Identification", + "perform_test": "Perform Test", + "permissions": "Permissions", + "personal_access_token": "Personal Access Token", + "portfolio_access_control": "Portfolio Access Control", + "preview": "Preview", + "project": "Project", + "project_access": "Project access", + "project_name": "Project Name", + "project_membership": "Project Membership", + "project_retention_enable": "Enable Inactive Project Deletion", + "publisher": "Publisher", + "publisher_class": "Publisher class", + "python": "Python", + "registered_email_address": "Registered email address", + "reindex_components": "Components", + "reindex_cpes": "CPE", + "reindex_error": "Error encountered while submitting reindex request", + "reindex_licenses": "Licenses", + "reindex_projects": "Projects", + "reindex_service_components": "Service components", + "reindex_submitted": "Reindex request submitted", + "reindex_vulnerabilities": "Vulnerabilities", + "reindex_vulnerable_software": "Vulnerable software", + "remove_api_key": "Remove API Key", + "repositories": "Repositories", + "repository_authentication": "Authentication required", + "repository_created": "Repository created", + "repository_deleted": "Repository deleted", + "repository_type": "Repository Type", + "required_confirmPassword": "Password confirmation is required and passwords must match", + "required_email": "Email address is required", + "required_fullname": "Fullname is required", + "required_oidc_group_name": "Name is required", + "required_password": "Password is required", + "required_role_name": "Role name is required", + "required_team_name": "Team name is required", + "required_username": "Username is required", + "restore_default_template": "Restore default templates", + "retention": "Retention", + "risk_score_calc": "((critical * 10) + (high * 5) + (medium * 3) + (low * 1) + (unassigned * 5))", + "risk_score_description": "Dependency Track calculates the risk score of each project as a weighted severity score using the following calculation as default: ", + "risk_score_weight_critical": "Critical (default: 10)", + "risk_score_weight_high": "High (default: 5)", + "risk_score_weight_low": "Low (default: 1)", + "risk_score_weight_medium": "Medium (default: 3)", + "risk_score_weight_unassigned": "Unassigned (default: 5)", + "risk_score_weighting_description": "You can customize the weighting of each severity to customize the risk score.", + "role": "Role", + "role_created": "Role created", + "role_deleted": "Role deleted", + "role_name": "Role Name", + "role_membership": "Role Membership", + "roles": "Roles", + "scope": "Scope", + "select_ecosystem": "Select Ecosystems", + "select_ldap_group": "Select LDAP Group", + "select_oidc_group": "Select OpenID Connect Group", + "select_permission": "Select permission", + "select_project": "Select Project", + "select_role": "Select Role", + "select_team": "Select Team", + "select_team_as_recipient": "Select team as recipient", + "snyk": "Snyk (Beta)", + "subject_identifier": "Subject Identifier", + "submit": "Submit", + "suspended": "Suspended", + "synchronization_cadence_minutes": "Synchronization cadence (in minutes)", + "synchronization_cadence_restart_required": "Restarting Dependency-Track is required for cadence changes to take effect", + "tags": "Tags", + "tags_delete_unused": "Delete Unused", + "task_scheduler": "Task scheduler", + "task_scheduler_component_analysis_cache_clear": "Component analysis cache clear", + "task_scheduler_description": "Dependency Track task scheduler perform various background tasks at a fixed interval. You can modify the fixed interval for each task using the form below. Each interval is expressed in hours. A Dependency Track restart is needed to reschedule the tasks with the updated cadence.", + "task_scheduler_internal_component_identification": "Internal component identification", + "task_scheduler_ldap_sync": "LDAP sync", + "task_scheduler_portfolio_metrics_update": "Portfolio metrics", + "task_scheduler_portfolio_vulnerability_analysis": "Portfolio vulnerability analysis", + "task_scheduler_repository_metadata_fetch": "Repository metadata fetch", + "task_scheduler_vulnerability_metrics_update": "Vulnerability metrics", + "team_created": "Team created", + "team_deleted": "Team deleted", + "team_membership": "Team membership", + "team_name": "Team Name", + "teams": "Teams", + "template": "Template", + "template_basedir": "Template base directory", + "template_basedir_tooltip": "This property is used as base directory for notification templates search", + "template_created": "Template created", + "template_deleted": "Template deleted", + "template_override_description": "Switching the template override control on and providing a template base directory allow you to override Dependency Track default notification publisher templates.", + "template_override_file_hierarchy": "Any Pebble templates available in the template base directory with the appropriate directory hierarchy and naming scheme (e.g ${base directory}/templates/notification/publisher/email.peb) will override Dependency Track default one.", + "template_override_restart_needed": "Dependency Track restart is required for the modifications to be taken into account.", + "template_override_security_warning": "You must set appropriate rights to the template base directory to prevent untrusted third party from supplying fraudulent Pebble templates that could lead to potential remote code execution.", + "templates": "Templates", + "test_notification_queued": "A test notification has been queued", + "token": "Token", + "trivy": "Trivy", + "url": "URL", + "user_created": "User created", + "user_deleted": "User deleted", + "username": "Username", + "versions": "Versions", + "vuln_sources": "Vulnerability Sources", + "vulndb": "VulnDB", + "vulnerability_scans": "Vulnerability Scans", + "vulnsource_alias_sync_enable": "Enable vulnerability alias synchronization", + "vulnsource_alias_sync_enable_tooltip": "Alias data can help in identifying identical vulnerabilities across multiple databases. If the source provides this data, synchronize it with Dependency-Track's database.", + "vulnsource_github_advisories_desc": "GitHub Advisories (GHSA) is a database of CVEs and GitHub-originated security advisories affecting the open source world. Dependency-Track integrates with GHSA by mirroring advisories via GitHub's public GraphQL API. The mirror is refreshed daily, or upon restart of the Dependency-Track instance. A personal access token (PAT) is required in order to authenticate with GitHub, but no scopes need to be assigned to it.", + "vulnsource_github_advisories_enable": "Enable GitHub Advisory mirroring", + "vulnsource_nvd_desc": "The National Vulnerability Database (NVD) is the largest publicly available source of vulnerability intelligence. It is maintained by a group within the National Institute of Standards and Technology (NIST) and builds upon the work of MITRE and others. Vulnerabilities in the NVD are called Common Vulnerabilities and Exposures (CVE). There are over 100,000 CVEs documented in the NVD spanning from the 1990’s to the present.", + "vulnsource_nvd_enable": "Enable National Vulnerability Database mirroring", + "vulnsource_nvd_notice": "This product uses data from the NVD API but is not endorsed or certified by the NVD.", + "vulnsource_osv_advisories_desc": "Google OSV is a distributed vulnerability and triage infrastructure for open source projects aimed at helping both open source maintainers and consumers of open source. It serves as an aggregator of vulnerability databases that have adopted the OpenSSF Vulnerability format.", + "vulnsource_osv_advisories_enable": "Select ecosystem to enable Google OSV Advisory mirroring", + "vulnsource_osv_alias_sync_warning": "OSV may report non-identical vulnerabilities as aliases. Proceed with caution.", + "vulnsource_osv_base_url": "OSV Base URL", + "welcome_message": "Welcome Message", + "welcome_message_desc": "Customize the welcome message that appears on the start page of Dependency-Track before users sign in.", + "welcome_message_enable": "Enable welcome message", + "workflow_step_timeout": "Step Timeout", + "workflows": "Workflows" + }, + "condition": { + "forbidden": "Forbidden (403)", + "http_request_error": "HTTP Request Error", + "server_error": "Server Error", + "successful": "successful", + "unsuccessful_action": "Could not perform the requested action" + }, + "hashes": { + "blake3": "BLAKE3", + "blake_256": "BLAKE2b-256", + "blake_384": "BLAKE2b-384", + "blake_512": "BLAKE2b-512", + "md5": "MD5", + "sha3_256": "SHA3-256", + "sha3_384": "SHA3-384", + "sha3_512": "SHA3-512", + "sha_1": "SHA-1", + "sha_256": "SHA-256", + "sha_384": "SHA-384", + "sha_512": "SHA-512" + }, + "language": { + "de": "German", + "en": "English", + "es": "Spanish", + "fr": "French", + "hi": "Hindi", + "it": "Italian", + "ja": "Japanese", + "pl": "Polish", + "pt": "Portuguese (Portugal)", + "pt-BR": "Portuguese (Brazil)", + "ru": "Russian", + "zh": "Chinese" + }, + "message": { + "about": "About", + "active": "Active", + "add": "Add", + "add_affected_component": "Add Affected Component", + "add_comment": "Add Comment", + "add_component": "Add Component", + "add_license": "Add License", + "add_tag": "Add Tag", + "add_version": "Add Version", + "administration": "Administration", + "affected_components": "Affected Components", + "affected_projects": "Affected Projects", + "age": "Age", + "age_tooltip": "Age in ISO-8601 period format (e.g. P1Y = 1 Year; P2Y3M = 2 Years, 3 Months)", + "alerts_tagged_with": "Alerts tagged with {tag}", + "aliases": "Aliases", + "analysis": "Analysis", + "analysis_details_tooltip": "Details (explanation, workaround details, and other impact information)", + "analysis_state": "Analysis State", + "analysis_status": "Analysis Status", + "analysis_tooltip": "The current state of an occurrence of a vulnerability", + "analyzer": "Analyzer", + "apply_vex": "Apply VEX", + "apply_vex_tooltip": "Apply analyses from a Vulnerability Exploitability eXchange (VEX) document to this project.", + "approved": "Approved", + "attributed_on": "Attributed On", + "audit_trail": "Audit Trail", + "audit_vulnerabilities": "Audit Vulnerabilities", + "auditing_progress": "Auditing Progress", + "authenticated": "Authenticated", + "author": "Author", + "authors": "Authors", + "assign": "Assign", + "bom": "BOM", + "bom_format": "BOM Format", + "bom_uploaded": "BOM uploaded", + "browse": "Browse", + "can_not_fix": "Can not fix", + "cancel": "Cancel", + "change_password": "Change Password", + "classification": "Classification", + "classifier": "Classifier", + "clear_all": "Clear all", + "close": "Close", + "code_not_present": "Code not present", + "code_not_reachable": "Code not reachable", + "comment": "Comment", + "comments": "Comments", + "component": "Component", + "component_application": "Application", + "component_author": "Author", + "component_author_desc": "The author of the component", + "component_classification": "Classification", + "component_classification_desc": "Classifies whether a component is considered internal or external to an organization", + "component_classifier_desc": "Specifies the type of component: Assets (applications, operating systems, and hardware) and non-assets (libraries, frameworks, and files)", + "component_container": "Container", + "component_cpe_desc": "The CPE v2.2 or v2.3 URI as provided by MITRE or NIST. All assets (applications, operating systems, and hardware) should have a CPE specified", + "component_created": "Component created", + "component_deleted": "Component deleted", + "component_details": "Component Details", + "component_device": "Device", + "component_file": "File", + "component_filename_desc": "Specifies the observed filename of the component", + "component_firmware": "Firmware", + "component_framework": "Framework", + "component_group_desc": "The suppliers higher-level namespace, group, or vendor identifier", + "component_hash": "Component Hash", + "component_hash_desc": "Specifies the observed hash value of the component using the preceding algorithm", + "component_identifier_desc": "Identifies the component by Package URL (PURL) or CPE. If the version type is 'Exact', the PURL or CPE must contain the version. If a range is specified, version information in the identifier will be ignored.", + "component_library": "Library", + "component_license_expression_desc": "Specifies license information for the component in the form of an SPDX expression", + "component_license_url_desc": "Specifies the URL to the license of the component", + "component_name": "Component name", + "component_name_desc": "The name of the component as provided by the supplier", + "component_namespace_group_vendor": "Namespace / group / vendor", + "component_operating_system": "Operating system", + "component_package_url_desc": "A Valid Package URL is required for libraries and frameworks. PURL syntax: pkg:type/namespace/name@version?qualifiers#subpath", + "component_properties": "Component Properties", + "component_search": "Component Search", + "component_spdx_license_desc": "Specifies the SPDX license ID of the component", + "component_supplier_name_desc": "The organization that supplied the component", + "component_swid_tagid_desc": "The ISO/IEC 19770-2:2015 (SWID) tag ID provided by the software vendor", + "component_team_desc": "Select the team assigned to this project", + "component_updated": "Component updated", + "component_version_desc": "The version of the component as provided by the supplier", + "component_vulnerabilities": "Component Vulnerabilities", + "components": "Components", + "condition": "Condition", + "condition_deleted": "Condition deleted", + "conditions": "Conditions", + "connected_as": "Connected as", + "contacts": "Contacts", + "coordinates": "Coordinates", + "coordinates_version_tooltip": "You can use the comparison operators >, <, >=, <=, == and != to match specific versions or version ranges", + "copyright": "Copyright", + "cpe": "CPE", + "cpe_full": "Common Platform Enumeration (CPE)", + "create": "Create", + "create_component_property": "Create Component Property", + "create_license_group": "Create License Group", + "create_policy": "Create Policy", + "create_project": "Create Project", + "create_project_property": "Create Project Property", + "create_property": "Create Property", + "create_vulnerability": "Create Vulnerability", + "created": "Created", + "credits": "Credits", + "csv_filetype": "CSV ", + "custom_license": "Custom License", + "custom_license_deleted": "Custom License Deleted", + "cvss": "CVSS", + "cvss_access_complexity": "Access Complexity", + "cvss_adjacent": "Adjacent", + "cvss_attack_complexity": "Attack Complexity", + "cvss_attack_vector": "Attack Vector", + "cvss_authentication": "Authentication", + "cvss_availability_impact": "Availability Impact", + "cvss_base_score": "CVSS Base Score", + "cvss_base_score_short": "Base Score", + "cvss_changed": "Changed", + "cvss_complete": "Complete", + "cvss_confidentiality_impact": "Confidentiality Impact", + "cvss_exploitability": "Exploitability", + "cvss_exploitability_subscore": "CVSS Exploitability Subscore", + "cvss_high": "High", + "cvss_impact": "Impact", + "cvss_impact_subscore": "CVSS Impact Subscore", + "cvss_integrity_impact": "Integrity Impact", + "cvss_local": "Local", + "cvss_low": "Low", + "cvss_medium": "Medium", + "cvss_multiple": "Multiple", + "cvss_network": "Network", + "cvss_none": "None", + "cvss_partial": "Partial", + "cvss_physical": "Physical", + "cvss_privileges_required": "Privileges Required", + "cvss_required": "Required", + "cvss_scope": "Scope", + "cvss_single": "Single", + "cvss_source": "Select source priority for CVSS", + "cvss_unchanged": "Unchanged", + "cvss_user_interaction": "User Interaction", + "cvss_v2": "CVSSv2", + "cvss_v2_vector": "CVSSv2 Vector", + "cvss_v3": "CVSSv3", + "cvss_v3_vector": "CVSSv3 Vector", + "cwe": "CWE", + "cwe_full": "Common Weakness Enumeration (CWE)", + "cwe_id": "CWE ID", + "dashboard": "Dashboard", + "data": "Data", + "dates": "Dates", + "delete": "Delete", + "delete_license_group": "Delete License Group", + "delete_policy": "Delete Policy", + "delete_selected": "Delete selected items", + "dependency_graph": "Dependency Graph", + "deprecated": "Deprecated", + "description": "Description", + "details": "Details", + "direct_only": "Direct only", + "direction": "Direction", + "download_bom": "Download BOM", + "download_component": "Download Components", + "edit": "Edit", + "edit_affected_component": "Edit Affected Component", + "email": "Email", + "empty_selection": "No items selected", + "endpoints": "Endpoints", + "epss": "EPSS", + "epss_percentile": "EPSS Percentile", + "epss_score": "EPSS Score", + "exact": "Exact", + "exploit_predictions": "Exploit Predictions", + "exploitable": "Exploitable", + "export_vdr": "Export VDR", + "export_vdr_tooltip": "Export a Vulnerability Disclosure Report (VDR), as defined in NIST SP 800-161.", + "export_vex": "Export VEX", + "export_vex_tooltip": "Export a Vulnerability Exploitability eXchange (VEX) document.", + "extended": "Extended", + "external_references": "External References", + "false_positive": "False Positive", + "filename": "Filename", + "filters": "Filters", + "findings": "Findings", + "findings_audited": "Findings Audited", + "findings_unaudited": "Findings Unaudited", + "first_seen": "First Seen At", + "from": "From", + "fsf_libre": "FSF Libre", + "fullname": "Full name", + "general": "General", + "global_audit": "Global Audit", + "group": "Group", + "group_name": "Group Name", + "grouped_vulnerabilities": "Grouped Vulnerabilities", + "hashes": "Hashes", + "hashes_short_desc": "Hash (MD5, SHA, SHA3, Blake2b, Blake3)", + "home": "Home", + "identifier": "Identifier", + "identifier_type": "Identifier Type", + "identity": "Identity", + "in_triage": "In Triage", + "inactive": "Inactive", + "inactive_active_children": "The project cannot be set to inactive if it has active children", + "inactive_since": "Inactive since", + "inactive_versions": "Inactive Versions", + "include_acl": "Include access control list", + "include_audit_history": "Include audit history", + "include_components": "Include components", + "include_policy_violations": "Include Policy Violations", + "include_properties": "Include properties", + "include_services": "Include services", + "include_tags": "Include tags", + "inherited_risk_score": "Inherited Risk Score", + "integrity": "Integrity", + "internal": "Internal", + "inventory": "Inventory", + "inventory_with_vulnerabilities": "Inventory with Vulnerabilities", + "justification": "Justification", + "justification_tooltip": "The rationale of why the impact analysis state was asserted to be \"Not Affected\"", + "language": "Language", + "last_bom_import": "Last BOM Import", + "last_measurement": "Last Measurement", + "last_seen": "Last Seen At", + "latest": "Latest", + "latest_version": "Latest Version", + "legal": "Legal", + "license": "License", + "license_comments": "License Comments", + "license_expression": "SPDX Expression", + "license_group": "License group", + "license_group_created": "License group created", + "license_group_deleted": "License group deleted", + "license_groups": "License Groups", + "license_id": "License ID", + "license_id_desc": "The SPDX defined ID of the license. The ID may only contain alpha, numeric, and specific symbols: _ - . +", + "license_name": "License Name", + "license_name_desc": "The name of the license as provided by the supplier", + "license_risk": "License Risk", + "license_text": "License Text", + "license_url": "License URL", + "licenses": "Licenses", + "login": "Login", + "login_desc": "Sign In to your account", + "login_forbidden": "This account is inactive or has been suspended", + "login_more_options": "More options", + "login_unauthorized": "Invalid username or password", + "logout": "Logout", + "manufacturer": "Manufacturer", + "manufacturer_name": "Manufacturer name", + "manufacturer_name_desc": "The organization that manufactured the component that the project describes", + "matrix": "Matrix", + "method": "Method", + "metric_refresh_requested": "A refresh has been requested. Metrics will be updated when the refresh task has completed.", + "name": "Name", + "no_file_chosen": "No file chosen", + "non_vulnerable": "Non Vulnerable", + "not_affected": "Not Affected", + "not_found_in_dependency_graph": "Dependency could not be found in dependency graph", + "not_set": "Not Set", + "notes": "Notes", + "object_identifier": "Object Identifier", + "object_identifier_desc": "A unique identifier (UUID) that Dependency-Track automatically assigns to every object", + "occurred_on": "Occurred On", + "occurrences_in_projects": "Occurrences in projects", + "oidc_availability_check_failed": "Failed to determine availability of OpenID Connect", + "oidc_redirect_failed": "An error occurred while redirecting to the OpenID Connect identity provider", + "only_direct_tooltip": "Only show direct dependencies, hiding transitive dependencies", + "only_outdated_tooltip": "Only show dependencies that have newer stable versions available", + "operational_risk": "Operational Risk", + "operator": "Operator", + "osi_approved": "OSI Approved", + "outdated_only": "Outdated only", + "overview": "Overview", + "owasp_rr": "OWASP Risk Rating", + "owasp_rr_awareness": "Awareness", + "owasp_rr_awareness_hidden": "Hidden", + "owasp_rr_awareness_obvious": "Obvious", + "owasp_rr_awareness_public_knowledge": "Public", + "owasp_rr_awareness_unknown": "Unknown", + "owasp_rr_business_impact_factor": "Business impact Factor", + "owasp_rr_business_impact_score": "OWASP RR Business impact score", + "owasp_rr_business_impact_score_short": "Business impact", + "owasp_rr_ease_of_discovery": "Ease of discovery", + "owasp_rr_ease_of_discovery_automated_tools_available": "Automated", + "owasp_rr_ease_of_discovery_difficult": "Difficult", + "owasp_rr_ease_of_discovery_easy": "Easy", + "owasp_rr_ease_of_discovery_impossible": "Impossible", + "owasp_rr_ease_of_exploit": "Ease of exploit", + "owasp_rr_ease_of_exploit_automated_tools_available": "Automated", + "owasp_rr_ease_of_exploit_difficult": "Difficult", + "owasp_rr_ease_of_exploit_easy": "Easy", + "owasp_rr_ease_of_exploit_theoritical": "Theoritical", + "owasp_rr_financial_damage": "Financial Damage", + "owasp_rr_financial_damage_bankruptcy": "Bankruptcy", + "owasp_rr_financial_damage_less_than_cost_to_fix": "Less than fix", + "owasp_rr_financial_damage_minor": "Minor", + "owasp_rr_financial_damage_significant": "Significant", + "owasp_rr_intrusion_detection": "Intrusion detection", + "owasp_rr_intrusion_detection_active": "Active", + "owasp_rr_intrusion_detection_logged_reviewed": "Logged & Reviewed", + "owasp_rr_intrusion_detection_logged_unreviewed": "Logged & Unreviewed", + "owasp_rr_intrusion_detection_not_logged": "Not logged", + "owasp_rr_likelihood_score": "OWASP RR Likelihood score", + "owasp_rr_likelihood_score_short": "Likelihood", + "owasp_rr_loss_of_accountability": "Loss of accountability", + "owasp_rr_loss_of_accountability_completely_anonymous": "Completely anonymous", + "owasp_rr_loss_of_accountability_fully_traceable": "Fully traceable", + "owasp_rr_loss_of_accountability_possibly_traceable": "Possibly traceable", + "owasp_rr_loss_of_availability": "Loss of availibility (services)", + "owasp_rr_loss_of_availability_all": "All", + "owasp_rr_loss_of_availability_extensive_primary_services": "Extensive primary", + "owasp_rr_loss_of_availability_extensive_secondary_services": "Extensive secondary", + "owasp_rr_loss_of_availability_minimal_primary_services": "Minimal primary", + "owasp_rr_loss_of_availability_minimal_secondary_services": "Minimal secondary", + "owasp_rr_loss_of_confidentiality": "Loss of confidentiality (data)", + "owasp_rr_loss_of_confidentiality_all": "All", + "owasp_rr_loss_of_confidentiality_extensive_critical": "Extensive critical", + "owasp_rr_loss_of_confidentiality_extensive_non_sensitive": "Extensive non sensitive", + "owasp_rr_loss_of_confidentiality_minimal_critical": "Minimal critical", + "owasp_rr_loss_of_confidentiality_minimal_non_sensitive": "Minimal non sensitive", + "owasp_rr_loss_of_integrity": "Loss of integrity (corruption)", + "owasp_rr_loss_of_integrity_all": "All", + "owasp_rr_loss_of_integrity_extensive_seriously_corrupt": "Extensive seriously", + "owasp_rr_loss_of_integrity_extensive_slightly_corrupt": "Extensive slightly", + "owasp_rr_loss_of_integrity_minimal_seriously_corrupt": "Minimal seriously", + "owasp_rr_loss_of_integrity_minimal_slightly_corrupt": "Minimal slightly", + "owasp_rr_motivation": "Motivation", + "owasp_rr_motivation_high_reward": "High reward", + "owasp_rr_motivation_low": "Low", + "owasp_rr_motivation_possible_reward": "Possible reward", + "owasp_rr_non_compliance": "Non compliance", + "owasp_rr_non_compliance_clear": "Clear", + "owasp_rr_non_compliance_high_profile": "High profile", + "owasp_rr_non_compliance_minor": "Minor", + "owasp_rr_opportunity": "Opportunity / Access", + "owasp_rr_opportunity_full": "Full", + "owasp_rr_opportunity_none": "None", + "owasp_rr_opportunity_some": "Some", + "owasp_rr_opportunity_special": "Special", + "owasp_rr_privacy_violation": "Privacy violation", + "owasp_rr_privacy_violation_hundreds": "Hundreds", + "owasp_rr_privacy_violation_millions": "Millions", + "owasp_rr_privacy_violation_one_individual": "One", + "owasp_rr_privacy_violation_thousands": "Thousands", + "owasp_rr_reputation_damage": "Reputation Damage", + "owasp_rr_reputation_damage_brand": "Brand", + "owasp_rr_reputation_damage_goodwill": "Goodwill", + "owasp_rr_reputation_damage_major_accounts": "Major accounts", + "owasp_rr_reputation_damage_minimal": "Minimal", + "owasp_rr_skill_level": "Skill level", + "owasp_rr_skill_level_advanced": "Advanced", + "owasp_rr_skill_level_network_and_programming": "Programming", + "owasp_rr_skill_level_none": "None", + "owasp_rr_skill_level_security_penetration_testing": "Pentest", + "owasp_rr_skill_level_some": "Some", + "owasp_rr_technical_impact_factor": "Technical impact Factor", + "owasp_rr_technical_impact_score": "OWASP RR Technical impact score", + "owasp_rr_technical_impact_score_short": "Technical impact", + "owasp_rr_threat_agent_factor": "Threat Agent Factor", + "owasp_rr_threat_size": "Threat Size", + "owasp_rr_threat_size_anonymous_internet_users": "Internet users", + "owasp_rr_threat_size_auth_users": "Authenticated users", + "owasp_rr_threat_size_dev_sa": "Dev/Sysadmin", + "owasp_rr_threat_size_intranet": "Intranet", + "owasp_rr_threat_size_partners": "Partners", + "owasp_rr_vulnerability_factor": "Vulnerability Factor", + "package_url": "Package URL (PURL)", + "package_url_full": "Package URL (PURL)", + "password": "Password", + "password_change": "Change password", + "password_change_success": "Password changed successfully", + "password_confirm": "Confirm new password", + "password_current": "Current password", + "password_force_change": "Update Password", + "password_force_change_desc": "You need to change your password", + "password_new": "New password", + "password_not_acceptable": "Check that new password and confirm password match. You can't re-use your old password", + "password_unauthorized": "Check current login credentials and try again", + "phone": "Phone", + "policies": "Policies", + "policies_tagged_with": "Policies tagged with {tag}", + "policy_bundle_hash": "Bundle Hash", + "policy_bundle_info": "Bundle Info", + "policy_bundle_sync": "Sync Bundle", + "policy_bundle_sync_requested": "Policy bundle synchronization requested. Vulnerability policy data will be updated when the sync is completed.", + "policy_bundle_sync_timestamp": "Last Synced On", + "policy_bundle_url": "Bundle URL", + "policy_created": "Policy created", + "policy_deleted": "Policy deleted", + "policy_is_only_for_latest_project_version": "Limit to project versions marked as latest", + "policy_last_bundle_sync_failed": "Last bundle sync failed", + "policy_management": "Policy Management", + "policy_name": "Policy Name", + "policy_operation_mode": "Operation Mode", + "policy_violation_audit": "Policy Violation Audit", + "policy_violations": "Policy Violations", + "policy_violations_by_classification": "Policy Violations by Classification", + "policy_violations_by_state": "Policy Violations by State", + "portfolio": "Portfolio", + "portfolio_statistics": "Portfolio Statistics", + "portfolio_vulnerabilities": "Portfolio Vulnerabilities", + "profile_update": "Update Profile", + "profile_updated": "Profile updated", + "project_cloning_in_progress": "The project is being created with the cloning options specified", + "project_created": "Project created", + "project_delete_message": "Deleting this project will also permanently delete all associated child projects. This action cannot be undone. Are you sure you want to proceed?", + "project_delete_title": "Confirm Project Deletion", + "project_deleted": "Project deleted", + "project_details": "Project Details", + "project_is_latest": "Is latest version", + "project_metadata_supplier_name_desc": "The organization that supplied the BOM", + "project_name": "Project Name", + "project_name_desc": "The name of the project or component as provided by the supplier", + "project_properties": "Project Properties", + "project_reanalyze": "Reanalyze", + "project_reanalyze_requested": "A Project Vulnerability Analysis has been requested. Project vulnerability data will be updated when the reanalysis task has completed.", + "project_reanalyze_tooltip": "Runs configured analyzers to detect vulnerabilities in this project's components. Will use any cached results that haven't expired yet", + "project_retention_type": "Select retention type for projects", + "project_supplier_name_desc": "The organization that supplied the component that the project describes", + "project_updated": "Project updated", + "project_vulnerabilities": "Project Vulnerabilities", + "projects": "Projects", + "projects_at_risk": "Projects at Risk", + "projects_tagged_with": "Projects tagged with {tag}", + "properties": "Properties", + "property_created": "Property created", + "property_deleted": "Property deleted", + "property_name": "Property Name", + "property_type": "Property Type", + "property_value": "Property Value", + "protected_at_perimeter": "Protected at perimeter", + "protected_at_runtime": "Protected at runtime", + "protected_by_compiler": "Protected by compiler", + "protected_by_mitigating_control": "Protected by mitigating control", + "provider": "Provider", + "provider_name": "Provider name", + "published": "Published", + "purl": "purl", + "range": "Range", + "ratings": "Ratings", + "recommendation": "Recommendation", + "references": "References", + "reindex": "Rebuild index(es)", + "rejected": "Rejected", + "remove_component": "Remove Component", + "reported_by": "Reported By", + "required_component_identifier": "A component identifier is required", + "required_component_name": "The component name is required", + "required_component_version": "The component version is required", + "required_license_id": "The license ID is required", + "required_license_name": "The license name is required", + "required_project_name": "The project name is required", + "required_service_name": "The service name is required", + "required_vulnerability_vuln_id": "A unique vulnerability identifier is required", + "requires_configuration": "Requires configuration", + "requires_dependency": "Requires dependency", + "requires_environment": "Requires environment", + "reset": "Reset", + "resolved": "Resolved", + "response": "Vendor Response (project)", + "response_tooltip": "A response to the vulnerability by the manufacturer, supplier, or project responsible for the affected component or service", + "risk_score": "Risk Score", + "risk_type": "Risk Type", + "rollback": "Rollback", + "score": "Score", + "search": "Search", + "search_parent": "Type to search parent", + "security_risk": "Security Risk", + "see_also": "See Also", + "select": "Select", + "select_cwe": "Select CWE", + "select_license": "Select License", + "select_project": "Select Project", + "select_tag": "Select Tag", + "selection_deleted": "Selection deleted", + "service_deleted": "Service deleted", + "service_details": "Service Details", + "service_name": "Service name", + "service_name_desc": "The name of the service as described by the provider", + "service_provider_name_desc": "The name of the provider", + "service_updated": "Service updated", + "service_version_desc": "The version of the service as described by the provider", + "service_vulnerabilities": "Service Vulnerabilities", + "services": "Services", + "severity": "Severity", + "show_complete_graph": "Show complete graph", + "show_flat_view": "Show flat project view", + "show_in_dependency_graph": "Show in dependency graph", + "show_inactive_projects": "Show inactive projects", + "show_suppressed_findings": "Show suppressed findings", + "show_suppressed_violations": "Show suppressed violations", + "show_update_information": "Highlight outdated components", + "source_header": "Source Header", + "spdx_license_id": "SPDX License ID", + "state": "State", + "subtitle": "Subtitle", + "supplier": "Supplier", + "supplier_name": "Supplier name", + "suppress": "Suppress", + "suppressed": "Suppressed", + "swid": "swid", + "swid_tagid": "SWID Tag ID", + "switch_view": "Cannot switch view while searching", + "tag_name": "Tag Name", + "tag_unassigned_successfully": "Untagged successfully", + "tags": "Tags", + "team": "Team", + "teams": "Teams", + "template": "Template", + "text_search": "Text Search", + "title": "Title", + "to": "To", + "total": "Total", + "total_findings": "Total Findings", + "total_findings_excluding_aliases": "Total Findings (excluding aliases)", + "total_findings_including_aliases": "Total Findings (including aliases)", + "type": "Type", + "unassign_tag_from_selection": "Unassign tag from selection", + "update": "Update", + "update_details": "Update Details", + "updated": "Updated", + "upload": "Upload", + "upload_bom": "Upload BOM", + "upload_bom_tooltip": "Upload BOM, all components will be analyzed for vulnerabilities", + "upload_vex": "Upload VEX", + "url": "URL", + "urls": "URLs", + "username": "Username", + "validFrom": "Valid From", + "validUntil": "Valid Until", + "value": "Value", + "vector": "Vector", + "vendor_response": "Vendor Response", + "version": "Version", + "version_distance": "Version Distance", + "version_distance_epoch": "epoch", + "version_distance_major": "major", + "version_distance_minor": "minor", + "version_distance_patch": "patch", + "version_distance_tooltip": "Specify the difference between version numbers, or empty to ignore", + "version_type": "Version Type", + "vex_uploaded": "VEX uploaded", + "view_details": "View Details", + "violation_state": "Violation State", + "violations_audited": "Violations Audited", + "violations_unaudited": "Violations Unaudited", + "vulnerabilities": "Vulnerabilities", + "vulnerabilities_by_occurrence": "Vulnerabilities By Occurrence", + "vulnerabilities_tagged_with": "Vulnerabilities tagged with {tag}", + "vulnerability": "Vulnerability", + "vulnerability_audit": "Vulnerability Audit", + "vulnerability_created": "Vulnerability created", + "vulnerability_created_desc": "The date the vulnerability record was originally created", + "vulnerability_deleted": "Vulnerability deleted", + "vulnerability_details": "Vulnerability Details", + "vulnerability_policies": "Vulnerability Policies", + "vulnerability_published_desc": "The date the vulnerability record was originally published", + "vulnerability_tags_updated": "Vulnerability tags updated", + "vulnerability_title": "Title", + "vulnerability_title_desc": "The optional title of the vulnerability", + "vulnerability_updated": "Vulnerability updated", + "vulnerability_updated_desc": "The date the vulnerability record was last updated", + "vulnerability_vuln_id": "Vulnerability ID", + "vulnerability_vuln_id_desc": "The identifier which uniquely identifies this vulnerability within the same source", + "vulnerable": "Vulnerable", + "vulnerable_components": "Vulnerable Components", + "vulnerable_projects": "Vulnerable Projects", + "weakness": "Weakness", + "will_not_fix": "Will not fix", + "workaround_available": "Workaround available", + "x_trust_boundary": "Cross Trust Boundary" + }, + "operator": { + "contains_all": "contains all", + "contains_any": "contains any", + "is": "is", + "is_not": "is not", + "matches": "matches", + "no_match": "does not match" + }, + "policy_violation": { + "fails": "Violation Failures", + "infos": "Informational Violations", + "license": "License Violations", + "operational": "Operational Violations", + "security": "Security Violations", + "total": "Total Violations", + "warns": "Violation Warnings" + }, + "severity": { + "critical": "Critical", + "critical_severity": "Critical Severity", + "cvss_severity": "CVSS Severity", + "derive_from_cvss_or_owasp_rr": "Derive from CVSS or OWASP RR", + "high": "High", + "high_severity": "High Severity", + "info": "Info", + "info_severity": "Informational", + "low": "Low", + "low_severity": "Low Severity", + "medium": "Medium", + "medium_severity": "Medium Severity", + "owasp_rr_severity": "OWASP Risk Rating Severity", + "unassigned": "Unassigned", + "unassigned_severity": "Unassigned Severity" + }, + "validation": { + "confirmed": "{_field_} doesn't match", + "max_value": "{_field_} value should be under {max}", + "min_value": "{_field_} value should be above {min}", + "required": "{_field_} is required" + }, + "violation": { + "fail": "Fail", + "info": "Inform", + "warn": "Warn" + }, + "vulnerability": { + "critical": "Critical Severity Vulnerabilities", + "high": "High Severity Vulnerabilities", + "low": "Low Severity Vulnerabilities", + "medium": "Medium Severity Vulnerabilities", + "unassigned": "Unassigned Vulnerabilities" + } } diff --git a/src/views/administration/accessmanagement/CreateRoleModal.vue b/src/views/administration/accessmanagement/CreateRoleModal.vue index 0847b0ed..5f36050a 100644 --- a/src/views/administration/accessmanagement/CreateRoleModal.vue +++ b/src/views/administration/accessmanagement/CreateRoleModal.vue @@ -1,69 +1,111 @@ + +
+ + + + +
+
- + methods: { + createUser() { + let url = `${this.$api.BASE_URL}/${this.$api.URL_ROLE}`; + this.axios + .put(url, { + name: this.name, + permissions: this.permissions + }) + .then(response => { + this.$emit('refreshTable'); + this.$toastr.s(this.$t('admin.role_created')); + }) + .catch(error => { + this.$toastr.w(this.$t('condition.unsuccessful_action')); + }); + this.$root.$emit('bv::hide::modal', 'createRoleModal'); + this.resetValues(); + }, + resetValues() { + this.name = null; + this.permissions = []; + }, + removePermission(permission) { + let index = this.permissions.indexOf(permission); + if (index > -1) { + this.permissions.splice(index, 1); + } + }, + showSelectPermissionModal() { + this.$root.$emit('bv::show::modal', 'selectPermissionModal'); + }, + updatePermissionSelection(selections) { + this.$root.$emit('bv::hide::modal', 'selectPermissionModal'); + for (let i = 0; i < selections.length; i++) { + let selection = selections[i]; + this.permissions.push(selection); + } + } + } + }; + From 671d490a3f80905fb68deb213ed5951fc6554bcb Mon Sep 17 00:00:00 2001 From: Allen Shearin Date: Mon, 10 Mar 2025 16:36:04 -0600 Subject: [PATCH 23/53] delete unused roleFormInputGroup file Signed-off-by: Allen Shearin --- .../accessmanagement/RoleFormInputGroup.vue | 105 ------------------ 1 file changed, 105 deletions(-) delete mode 100644 src/views/administration/accessmanagement/RoleFormInputGroup.vue diff --git a/src/views/administration/accessmanagement/RoleFormInputGroup.vue b/src/views/administration/accessmanagement/RoleFormInputGroup.vue deleted file mode 100644 index 2ad6fc69..00000000 --- a/src/views/administration/accessmanagement/RoleFormInputGroup.vue +++ /dev/null @@ -1,105 +0,0 @@ - - - From bf58432c3a88dda9f0147f2cb8e1664482ad88b9 Mon Sep 17 00:00:00 2001 From: Allen Shearin Date: Mon, 10 Mar 2025 16:46:50 -0600 Subject: [PATCH 24/53] remove references to removed file Signed-off-by: Allen Shearin --- src/views/administration/accessmanagement/ManagedUsers.vue | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/views/administration/accessmanagement/ManagedUsers.vue b/src/views/administration/accessmanagement/ManagedUsers.vue index 80497962..3a29f6db 100644 --- a/src/views/administration/accessmanagement/ManagedUsers.vue +++ b/src/views/administration/accessmanagement/ManagedUsers.vue @@ -37,7 +37,6 @@ import permissionsMixin from '../../../mixins/permissionsMixin'; import { Switch as cSwitch } from '@coreui/vue'; import BInputGroupFormInput from '../../../forms/BInputGroupFormInput'; import SelectRoleModal from './SelectRoleModal.vue'; -import RoleFormInputGroup from './RoleFormInputGroup.vue'; export default { props: { @@ -178,7 +177,6 @@ export default { SelectTeamModal, SelectPermissionModal, SelectRoleModal, - RoleFormInputGroup, ChangePasswordModal, BInputGroupFormInput, }, From e90d4dc7b03eb8e87d6f5cbdf4346fe38e1c2bfd Mon Sep 17 00:00:00 2001 From: Allen Shearin Date: Mon, 10 Mar 2025 17:55:48 -0600 Subject: [PATCH 25/53] tighten role modal Signed-off-by: Allen Shearin --- .../administration/accessmanagement/SelectRoleModal.vue | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/views/administration/accessmanagement/SelectRoleModal.vue b/src/views/administration/accessmanagement/SelectRoleModal.vue index c92ca80c..d22058e5 100644 --- a/src/views/administration/accessmanagement/SelectRoleModal.vue +++ b/src/views/administration/accessmanagement/SelectRoleModal.vue @@ -8,7 +8,7 @@ :title="$t('admin.assign_role')" > - +
@@ -28,7 +28,7 @@
- + import BInputGroupFormSelect from '../../../forms/BInputGroupFormSelect'; -// import BInputGroupFormInput from '../../../forms/BInputGroupFormInput'; import ActionableListGroupItem from '../../components/ActionableListGroupItem'; import SelectProjectModal from './SelectProjectModal'; @@ -61,7 +60,6 @@ export default { }, components: { BInputGroupFormSelect, - // BInputGroupFormInput, ActionableListGroupItem, SelectProjectModal, }, From 2661c868d8b3c84b6e6ff3302350d2d95fbc685e Mon Sep 17 00:00:00 2001 From: Allen Shearin Date: Wed, 12 Mar 2025 11:24:17 -0600 Subject: [PATCH 26/53] pushing latest Signed-off-by: Allen Shearin --- src/shared/api.json | 1 + .../accessmanagement/LdapUsers.vue | 2 +- .../accessmanagement/ManagedUsers.vue | 2 + .../accessmanagement/OidcUsers.vue | 2 + .../accessmanagement/SelectRoleModal.vue | 141 ++++++++++++------ 5 files changed, 100 insertions(+), 48 deletions(-) diff --git a/src/shared/api.json b/src/shared/api.json index 83a82aff..b6553b8f 100644 --- a/src/shared/api.json +++ b/src/shared/api.json @@ -13,6 +13,7 @@ "URL_ABOUT": "api/version", "URL_ACL_MAPPING": "api/v1/acl/mapping", "URL_ACL_TEAM": "api/v1/acl/team", + "URL_ACL_USER": "api/v1/acl/user", "URL_ANALYSIS": "api/v1/analysis", "URL_BOM": "api/v1/bom", "URL_CALCULATOR_CVSS": "api/v1/calculator/cvss", diff --git a/src/views/administration/accessmanagement/LdapUsers.vue b/src/views/administration/accessmanagement/LdapUsers.vue index 5453c3aa..b4e139c1 100644 --- a/src/views/administration/accessmanagement/LdapUsers.vue +++ b/src/views/administration/accessmanagement/LdapUsers.vue @@ -157,7 +157,7 @@ export default { {{ $t('admin.delete_user') }}
- + diff --git a/src/views/administration/accessmanagement/ManagedUsers.vue b/src/views/administration/accessmanagement/ManagedUsers.vue index 3a29f6db..561fad45 100644 --- a/src/views/administration/accessmanagement/ManagedUsers.vue +++ b/src/views/administration/accessmanagement/ManagedUsers.vue @@ -37,6 +37,7 @@ import permissionsMixin from '../../../mixins/permissionsMixin'; import { Switch as cSwitch } from '@coreui/vue'; import BInputGroupFormInput from '../../../forms/BInputGroupFormInput'; import SelectRoleModal from './SelectRoleModal.vue'; +import SelectProjectModal from './SelectProjectModal.vue'; export default { props: { @@ -176,6 +177,7 @@ export default { ActionableListGroupItem, SelectTeamModal, SelectPermissionModal, + SelectProjectModal, SelectRoleModal, ChangePasswordModal, BInputGroupFormInput, diff --git a/src/views/administration/accessmanagement/OidcUsers.vue b/src/views/administration/accessmanagement/OidcUsers.vue index c38731ff..308f2e91 100644 --- a/src/views/administration/accessmanagement/OidcUsers.vue +++ b/src/views/administration/accessmanagement/OidcUsers.vue @@ -34,6 +34,7 @@ import SelectTeamModal from './SelectTeamModal'; import SelectPermissionModal from './SelectPermissionModal'; import permissionsMixin from '../../../mixins/permissionsMixin'; import SelectProjectModal from './SelectProjectModal.vue'; +import SelectRoleModal from './SelectRoleModal.vue'; export default { props: { @@ -152,6 +153,7 @@ export default { SelectTeamModal, SelectPermissionModal, SelectProjectModal, + SelectRoleModal, }, data() { return { diff --git a/src/views/administration/accessmanagement/SelectRoleModal.vue b/src/views/administration/accessmanagement/SelectRoleModal.vue index d22058e5..6024c136 100644 --- a/src/views/administration/accessmanagement/SelectRoleModal.vue +++ b/src/views/administration/accessmanagement/SelectRoleModal.vue @@ -9,24 +9,12 @@ > - -
- - - - -
-
+
{{ $t('message.close') }} - {{ + {{ $t('message.assign') }} @@ -55,9 +43,6 @@ import SelectProjectModal from './SelectProjectModal'; export default { name: 'selectRoleModal', - props: { - type: String, - }, components: { BInputGroupFormSelect, ActionableListGroupItem, @@ -69,19 +54,17 @@ export default { }, mounted() { this.loadRoles(); + this.loadProjects(); + }, + props: { + username: String, }, data() { return { - identifier: null, - url: null, + selectedProject: null, selectedRole: null, availableRoles: [], - initialRepositoryType: null, - internal: false, - repository_authentication: false, - username: null, - password: null, - enabled: true, + availableProjects: [], labelIcon: { dataOn: '\u2713', dataOff: '\u2715', @@ -89,18 +72,13 @@ export default { }; }, methods: { - createRepository: function () { - let url = `${this.$api.BASE_URL}/${this.$api.URL_REPOSITORY}`; + createRoleMapping: function () { + let url = `${this.$api.BASE_URL}/${this.$api.URL_USER}/${this.username}/role`; this.axios - .put(url, { - type: this.repositoryType, - identifier: this.identifier, - url: this.url, - internal: this.internal, - authenticationRequired: this.repository_authentication, - username: this.username, - password: this.password || null, - enabled: this.enabled, + .post(url, { + projectName: this.selectedProject.name, + projectVersion: this.selectedProject.version, + selectedRole: this.selectedRole.uuid, }) .then((response) => { this.$emit('refreshTable'); @@ -119,14 +97,83 @@ export default { }); this.resetValues(); }, + updateProjectSelection: function (selections) { + this.$root.$emit('bv::hide::modal', 'selectProjectModal'); + for (let i = 0; i < selections.length; i++) { + let selection = selections[i]; + let url = `${this.$api.BASE_URL}/${this.$api.URL_ACL_MAPPING}`; + this.axios + .put(url, { + team: this.team.uuid, + project: selection.uuid, + }) + .then((response) => { + if (this.projects === undefined || this.projects === null) { + this.projects = []; + } + this.projects.push({ + name: selection.name, + version: selection.version, + uuid: selection.uuid, + }); + this.projects.sort(); + this.$toastr.s(this.$t('message.updated')); + }) + .catch((error) => { + if (error.response.status === 304) { + //this.$toastr.w(this.$t('condition.unsuccessful_action')); + } else { + this.$toastr.w(this.$t('condition.unsuccessful_action')); + } + }); + } + }, + removeProjectMapping: function (projectUuid) { + let url = `${this.$api.BASE_URL}/${this.$api.URL_ACL_MAPPING}/team/${this.team.uuid}/project/${projectUuid}`; + this.axios + .delete(url) + .then((response) => { + let k = []; + for (let i = 0; i < this.projects.length; i++) { + if (this.projects[i].uuid !== projectUuid) { + k.push(this.projects[i]); + } + } + this.projects = k; + this.$toastr.s(this.$t('message.updated')); + }) + .catch((error) => { + this.$toastr.w(this.$t('condition.unsuccessful_action')); + }); + }, loadRoles: function () { let url = `${this.$api.BASE_URL}/${this.$api.URL_ROLE}`; - this.axios.get(url).then((response) => { - this.availableRoles = response.data.map((d) => ({ - value: d.id, - text: d.name, - })); - }); + this.axios + .get(url) + .then((response) => { + this.availableRoles = response.data.map((d) => ({ + value: d.id, + text: d.name, + })); + }) + .catch((error) => { + this.$toastr.w(this.$t('condition.unsuccessful_action')); + }); + }, + loadProjects: function () { + let url = `${this.$api.BASE_URL}/${this.$api.URL_ACL_USER}/${this.username}`; + this.axios + .get(url) + .then((response) => { + this.availableProjects = response.data.map((d) => ({ + value: d.id, + text: d.name, + })); + // this.availableProjects = response.data; + }) + .catch((error) => { + this.$toastr.w(this.$t('condition.unsuccessful_action')); + }); }, resetValues: function () { this.repositoryType = this.initialRepositoryType; From 673dfe9848c4328403a7a2e0b8f84c0a4e2bdffe Mon Sep 17 00:00:00 2001 From: Allen Shearin Date: Fri, 14 Mar 2025 16:24:22 -0600 Subject: [PATCH 27/53] add role to user working Signed-off-by: Allen Shearin --- src/i18n/locales/en.json | 5 +- .../accessmanagement/LdapUsers.vue | 87 +-------------- .../accessmanagement/SelectRoleModal.vue | 105 ++++-------------- 3 files changed, 30 insertions(+), 167 deletions(-) diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index ced9c7fb..b3a2aa12 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -238,8 +238,9 @@ "risk_score_weight_unassigned": "Unassigned (default: 5)", "risk_score_weighting_description": "You can customize the weighting of each severity to customize the risk score.", "role": "Role", - "role_created": "Role created", - "role_deleted": "Role deleted", + "role_assigned": "Role Assigned", + "role_created": "Role Created", + "role_deleted": "Role Deleted", "role_name": "Role Name", "role_membership": "Role Membership", "roles": "Roles", diff --git a/src/views/administration/accessmanagement/LdapUsers.vue b/src/views/administration/accessmanagement/LdapUsers.vue index b4e139c1..2690849c 100644 --- a/src/views/administration/accessmanagement/LdapUsers.vue +++ b/src/views/administration/accessmanagement/LdapUsers.vue @@ -19,7 +19,6 @@ -
@@ -36,7 +35,6 @@ import SelectTeamModal from './SelectTeamModal'; import SelectPermissionModal from './SelectPermissionModal'; import permissionsMixin from '../../../mixins/permissionsMixin'; import SelectRoleModal from './SelectRoleModal.vue'; -import SelectProjectModal from './SelectProjectModal.vue'; export default { props: { @@ -45,7 +43,6 @@ export default { mixins: [bootstrapTableMixin], components: { CreateLdapUserModal, - SelectProjectModal, }, mounted() { EventBus.$on('admin:ldapusers:rowUpdate', (index, row) => { @@ -137,8 +134,8 @@ export default {
- - + +
@@ -160,7 +157,6 @@ export default { - `, mixins: [permissionsMixin], @@ -170,7 +166,6 @@ export default { SelectRoleModal, SelectTeamModal, SelectPermissionModal, - SelectProjectModal, }, data() { return { @@ -178,8 +173,7 @@ export default { username: row.username, teams: row.teams, permissions: row.permissions, - projects: row.projects, - mappedroles: row.mappedroles, + roles: row.roles, }; }, methods: { @@ -245,81 +239,6 @@ export default { this.$toastr.w(this.$t('condition.unsuccessful_action')); }); }, - updateRoleSelection: function (selections) { - this.$root.$emit('bv::hide::modal', 'selectRoleModal'); - for (let i = 0; i < selections.length; i++) { - let selection = selections[i]; - let url = `${this.$api.BASE_URL}/${this.$api.URL_USER}/${this.username}/role`; - this.axios - .post(url, { - uuid: selection.uuid, - }) - .then((response) => { - this.syncVariables(response.data); - EventBus.$emit( - 'admin:ldapusers:rowUpdate', - index, - this.ldapUser, - ); - this.$toastr.s(this.$t('message.updated')); - }) - .catch((error) => { - if (error.response.status === 304) { - //this.$toastr.w(this.$t('condition.unsuccessful_action')); - } else { - this.$toastr.w( - this.$t('condition.unsuccessful_action'), - ); - } - }); - } - }, - updateProjectSelection: function (selections) { - this.$root.$emit('bv::hide::modal', 'selectProjectModal'); - for (let i = 0; i < selections.length; i++) { - let selection = selections[i]; - let url = `${this.$api.BASE_URL}/${this.$api.URL_USER}/${this.username}/project`; - this.axios - .post(url, { - uuid: selection.uuid, - }) - .then((response) => { - this.syncVariables(response.data); - EventBus.$emit( - 'admin:ldapusers:rowUpdate', - index, - this.ldapUser, - ); - this.$toastr.s(this.$t('message.updated')); - }) - .catch((error) => { - if (error.response.status === 304) { - //this.$toastr.w(this.$t('condition.unsuccessful_action')); - } else { - this.$toastr.w( - this.$t('condition.unsuccessful_action'), - ); - } - }); - } - }, - removeProjectMembership: function (projectUuid) { - let url = `${this.$api.BASE_URL}/${this.$api.URL_USER}/${this.username}/project`; - this.axios - .delete(url, { data: { uuid: projectUuid } }) - .then((response) => { - this.syncVariables(response.data); - EventBus.$emit( - 'admin:ldapusers:rowUpdate', - index, - this.ldapUser, - ); - this.$toastr.s(this.$t('message.updated')); - }) - .catch((error) => { - this.$toastr.w(this.$t('condition.unsuccessful_action')); - }); - }, removeRole: function (role) { let url = `${this.$api.BASE_URL}/${this.$api.URL_USER}/${this.username}/role`; this.axios diff --git a/src/views/administration/accessmanagement/SelectRoleModal.vue b/src/views/administration/accessmanagement/SelectRoleModal.vue index 6024c136..481dab1d 100644 --- a/src/views/administration/accessmanagement/SelectRoleModal.vue +++ b/src/views/administration/accessmanagement/SelectRoleModal.vue @@ -7,21 +7,23 @@ no-stacking :title="$t('admin.assign_role')" > - + @@ -38,19 +40,11 @@ - - diff --git a/src/views/administration/accessmanagement/OidcUsers.vue b/src/views/administration/accessmanagement/OidcUsers.vue index 308f2e91..e92f5e15 100644 --- a/src/views/administration/accessmanagement/OidcUsers.vue +++ b/src/views/administration/accessmanagement/OidcUsers.vue @@ -5,9 +5,10 @@ - {{ $t('admin.create_user') }} + + {{ $t('admin.create_oidc_group') }} - + > - + @@ -26,15 +26,13 @@ import xssFilters from 'xss-filters'; import common from '../../../shared/common'; import i18n from '../../../i18n'; -import CreateOidcUserModal from './CreateOidcUserModal'; +import CreateOidcGroupModal from './CreateOidcGroupModal'; import bootstrapTableMixin from '../../../mixins/bootstrapTableMixin'; import EventBus from '../../../shared/eventbus'; import ActionableListGroupItem from '../../components/ActionableListGroupItem'; -import SelectTeamModal from './SelectTeamModal'; -import SelectPermissionModal from './SelectPermissionModal'; import permissionsMixin from '../../../mixins/permissionsMixin'; -import SelectProjectModal from './SelectProjectModal.vue'; -import SelectRoleModal from './SelectRoleModal.vue'; +import BInputGroupFormInput from '../../../forms/BInputGroupFormInput'; +import SelectTeamModal from './SelectTeamModal'; export default { props: { @@ -42,52 +40,32 @@ export default { }, mixins: [bootstrapTableMixin], components: { - CreateOidcUserModal, + CreateOidcGroupModal, }, mounted() { - EventBus.$on('admin:oidcusers:rowUpdate', (index, row) => { + EventBus.$on('admin:oidcgroups:rowUpdate', (index, row) => { this.$refs.table.updateRow({ index: index, row: row }); this.$refs.table.expandRow(index); }); - EventBus.$on('admin:oidcusers:rowDeleted', (index, row) => { + EventBus.$on('admin:oidcgroups:rowDeleted', (index, row) => { this.refreshTable(); }); }, beforeDestroy() { - EventBus.$off('admin:oidcusers:rowUpdate'); - EventBus.$off('admin:oidcusers:rowDeleted'); + EventBus.$off('admin:oidcgroups:rowUpdate'); + EventBus.$off('admin:oidcgroups:rowDeleted'); }, data() { return { columns: [ { - title: this.$t('message.username'), - field: 'username', - sortable: false, - formatter(value, row, index) { - return xssFilters.inHTMLData(common.valueWithDefault(value, '')); - }, - }, - { - title: this.$t('admin.subject_identifier'), - field: 'subjectIdentifier', + title: this.$t('admin.oidc_group_name'), + field: 'name', sortable: false, formatter(value, row, index) { return xssFilters.inHTMLData(common.valueWithDefault(value, '')); }, }, - { - title: this.$t('admin.teams'), - field: 'teams', - sortable: false, - formatter(value, row, index) { - return value - ? xssFilters.inHTMLData( - common.valueWithDefault(value.length, '0'), - ) - : 0; - }, - }, ], data: [], options: { @@ -110,163 +88,125 @@ export default { return this.vueFormatter({ i18n, template: ` - + - + +
- - + +
- -
- - - - -
-
- -
- - - - -
-
- {{ $t('admin.delete_user') }} + {{ $t('admin.delete_oidc_group') }}
- -
`, mixins: [permissionsMixin], components: { ActionableListGroupItem, + BInputGroupFormInput, SelectTeamModal, - SelectPermissionModal, - SelectProjectModal, - SelectRoleModal, }, data() { return { - oidcUser: row, - username: row.username, - teams: row.teams, - permissions: row.permissions, + oidcGroup: row, + mappedTeams: [], }; }, methods: { - deleteUser: function () { - let url = `${this.$api.BASE_URL}/${this.$api.URL_USER_OIDC}`; + updateOidcGroup: function () { + let url = `${this.$api.BASE_URL}/${this.$api.URL_OIDC_GROUP}`; this.axios - .delete(url, { - data: { - username: this.username, - }, + .post(url, { + uuid: this.oidcGroup.uuid, + name: this.oidcGroup.name, }) .then((response) => { - EventBus.$emit('admin:oidcusers:rowDeleted', index); - this.$toastr.s(this.$t('admin.user_deleted')); + this.team = response.data; + EventBus.$emit( + 'admin:oidcgroups:rowUpdate', + index, + this.team, + ); + this.$toastr.s(this.$t('message.updated')); }) .catch((error) => { this.$toastr.w(this.$t('condition.unsuccessful_action')); }); }, - updateTeamSelection: function (selections) { - this.$root.$emit('bv::hide::modal', 'selectTeamModal'); - for (let i = 0; i < selections.length; i++) { - let selection = selections[i]; - let url = `${this.$api.BASE_URL}/${this.$api.URL_USER}/${this.username}/membership`; - this.axios - .post(url, { - uuid: selection.uuid, - }) - .then((response) => { - this.syncVariables(response.data); - EventBus.$emit( - 'admin:oidcusers:rowUpdate', - index, - this.oidcUser, - ); - this.$toastr.s(this.$t('message.updated')); - }) - .catch((error) => { - if (error.response.status === 304) { - //this.$toastr.w(this.$t('condition.unsuccessful_action')); - } else { - this.$toastr.w( - this.$t('condition.unsuccessful_action'), - ); - } - }); - } + deleteOidcGroup: function () { + let url = `${this.$api.BASE_URL}/${this.$api.URL_OIDC_GROUP}/${this.oidcGroup.uuid}`; + this.axios + .delete(url) + .then((response) => { + EventBus.$emit('admin:oidcgroups:rowDeleted', index); + this.$toastr.s(this.$t('admin.oidc_group_deleted')); + }) + .catch((error) => { + this.$toastr.w(this.$t('condition.unsuccessful_action')); + }); }, - removeTeamMembership: function (teamUuid) { - let url = `${this.$api.BASE_URL}/${this.$api.URL_USER}/${this.username}/membership`; + getMappedTeams: function () { + let url = `${this.$api.BASE_URL}/${this.$api.URL_OIDC_GROUP}/${this.oidcGroup.uuid}/team`; this.axios - .delete(url, { data: { uuid: teamUuid } }) + .get(url) .then((response) => { - this.syncVariables(response.data); - EventBus.$emit( - 'admin:oidcusers:rowUpdate', - index, - this.oidcUser, - ); - this.$toastr.s(this.$t('message.updated')); + this.mappedTeams = response.data; }) .catch((error) => { this.$toastr.w(this.$t('condition.unsuccessful_action')); }); }, - updatePermissionSelection: function (selections) { - this.$root.$emit('bv::hide::modal', 'selectPermissionModal'); + updateTeamSelection: function (selections) { + this.$root.$emit('bv::hide::modal', 'selectTeamModal'); for (let i = 0; i < selections.length; i++) { let selection = selections[i]; - let url = `${this.$api.BASE_URL}/${this.$api.URL_PERMISSION}/${selection.name}/user/${this.username}`; + let url = `${this.$api.BASE_URL}/${this.$api.URL_OIDC_MAPPING}`; this.axios - .post(url) + .put(url, { + group: this.oidcGroup.uuid, + team: selection.uuid, + }) .then((response) => { - this.syncVariables(response.data); + this.mappedTeams.push(selection); + this.mappedTeams.sort(); this.$toastr.s(this.$t('message.updated')); }) .catch((error) => { - console.log(error); - if (error.response.status === 304) { - //this.$toastr.w(this.$t('condition.unsuccessful_action')); - } else { - this.$toastr.w( - this.$t('condition.unsuccessful_action'), - ); - } + this.$toastr.w(this.$t('condition.unsuccessful_action')); }); } }, - removePermission: function (permission) { - let url = `${this.$api.BASE_URL}/${this.$api.URL_PERMISSION}/${permission.name}/user/${this.username}`; + removeOidcGroupMapping: function (team) { + let url = `${this.$api.BASE_URL}/${this.$api.URL_OIDC_GROUP}/${this.oidcGroup.uuid}/team/${team.uuid}/mapping`; this.axios .delete(url) .then((response) => { - this.syncVariables(response.data); + let remainingTeams = []; + for (let i = 0; i < this.mappedTeams.length; i++) { + if (this.mappedTeams[i].uuid !== team.uuid) { + remainingTeams.push(this.mappedTeams[i]); + } + } + this.mappedTeams = remainingTeams; this.$toastr.s(this.$t('message.updated')); }) .catch((error) => { this.$toastr.w(this.$t('condition.unsuccessful_action')); }); }, - syncVariables: function (oidcUser) { - this.oidcUser = oidcUser; - this.username = oidcUser.username; - this.teams = oidcUser.teams; - this.permissions = oidcUser.permissions; - }, + }, + mounted: function () { + this.getMappedTeams(); }, }); }, @@ -276,7 +216,7 @@ export default { res.total = xhr.getResponseHeader('X-Total-Count'); return res; }, - url: `${this.$api.BASE_URL}/${this.$api.URL_USER_OIDC}`, + url: `${this.$api.BASE_URL}/${this.$api.URL_OIDC_GROUP}`, }, }; }, diff --git a/src/views/administration/accessmanagement/ProjectRoleListGroupItem.vue b/src/views/administration/accessmanagement/ProjectRoleListGroupItem.vue new file mode 100644 index 00000000..d9a0d7b2 --- /dev/null +++ b/src/views/administration/accessmanagement/ProjectRoleListGroupItem.vue @@ -0,0 +1,54 @@ + + + + + diff --git a/src/views/administration/accessmanagement/SelectRoleModal.vue b/src/views/administration/accessmanagement/SelectRoleModal.vue index 481dab1d..b771daba 100644 --- a/src/views/administration/accessmanagement/SelectRoleModal.vue +++ b/src/views/administration/accessmanagement/SelectRoleModal.vue @@ -12,7 +12,12 @@ @@ -21,7 +26,12 @@ @@ -95,10 +105,7 @@ export default { this.axios .get(url) .then((response) => { - this.availableRoles = response.data.map((d) => ({ - value: d.uuid, - text: d.name, - })); + this.availableRoles = response.data; }) .catch((error) => { this.$toastr.w(this.$t('condition.unsuccessful_action')); @@ -109,10 +116,7 @@ export default { this.axios .get(url) .then((response) => { - this.availableProjects = response.data.map((d) => ({ - value: d.uuid, - text: d.name, - })); + this.availableProjects = response.data; }) .catch((error) => { this.$toastr.w(this.$t('condition.unsuccessful_action')); From e1ffcb875199dfb275503acc8488c39035f7429b Mon Sep 17 00:00:00 2001 From: Allen Shearin Date: Wed, 19 Mar 2025 13:58:24 -0600 Subject: [PATCH 29/53] working projectRoleListGroupItem, delete and edit buttons do not work Signed-off-by: Allen Shearin --- .../accessmanagement/LdapUsers.vue | 18 ++----- .../ProjectRoleListGroupItem.vue | 50 +++++++++++++------ 2 files changed, 39 insertions(+), 29 deletions(-) diff --git a/src/views/administration/accessmanagement/LdapUsers.vue b/src/views/administration/accessmanagement/LdapUsers.vue index cf500d9f..806e4a8b 100644 --- a/src/views/administration/accessmanagement/LdapUsers.vue +++ b/src/views/administration/accessmanagement/LdapUsers.vue @@ -123,7 +123,7 @@ export default {
- +
@@ -288,22 +288,11 @@ export default { }); }, loadUserRoles: function () { - if (this.projectRoles && this.projectRoles.length > 0) { - // Roles are already cached, no need to fetch again - return Promise.resolve(this.projectRoles); - } - - const url = `${this.$api.BASE_URL}/${this.$api.URL_ROLE}/${this.username}/roles`; + let url = `${this.$api.BASE_URL}/${this.$api.URL_ROLE}/${this.username}/roles`; return this.axios .get(url) .then((response) => { - console.log(response); - this.projectRoles = Array.isArray(response.data) - ? response.data - : response.data - ? [response.data] - : []; - return this.projectRoles; + this.projectRoles = response.data; }) .catch((error) => { console.error('Error loading user roles:', error); @@ -319,6 +308,7 @@ export default { }, updateRoleSelection: function () { this.$root.$emit('bv::hide::modal', 'selectRoleModal'); + this.$toastr.s(this.$t('message.updated')); this.syncVariables(this.username); this.refreshTable(); }, diff --git a/src/views/administration/accessmanagement/ProjectRoleListGroupItem.vue b/src/views/administration/accessmanagement/ProjectRoleListGroupItem.vue index d9a0d7b2..d667fa17 100644 --- a/src/views/administration/accessmanagement/ProjectRoleListGroupItem.vue +++ b/src/views/administration/accessmanagement/ProjectRoleListGroupItem.vue @@ -1,42 +1,54 @@