diff --git a/src/App.vue b/src/App.vue index fdb2b3f37..f9ce893c6 100644 --- a/src/App.vue +++ b/src/App.vue @@ -23,6 +23,16 @@ export default { } }; + const preloadCustomizationIfAuthenticated = (jwt) => { + if ( + jwt && + this.$customization && + typeof this.$customization.preloadAll === 'function' + ) { + this.$customization.preloadAll(); + } + }; + EventBus.$on('authenticated', (jwt) => { if (jwt) { sessionStorage.setItem('token', jwt); @@ -30,6 +40,7 @@ export default { sessionStorage.removeItem('token'); } setJwtForAjax(jwt); + preloadCustomizationIfAuthenticated(jwt); }); // ensure $.ajaxSettings.headers exists @@ -37,7 +48,9 @@ export default { headers: {}, }); - setJwtForAjax(getToken()); + const existingToken = getToken(); + setJwtForAjax(existingToken); + preloadCustomizationIfAuthenticated(existingToken); // Send XHR cross-site cookie credentials if (this.$api.WITH_CREDENTIALS) { diff --git a/src/i18n/locales/de.json b/src/i18n/locales/de.json index f784d22ea..0aded5d9a 100644 --- a/src/i18n/locales/de.json +++ b/src/i18n/locales/de.json @@ -6,6 +6,7 @@ }, "admin": { "access_management": "Zugriffsverwaltung", + "add_source": "Add Source", "alert_created": "Alarm erstellt", "alert_deleted": "Alarm gelöscht", "alert_log_successful_publish": "Erfolgreiche Alarmierung protokollieren", @@ -78,6 +79,7 @@ "create_team": "Team erstellen", "create_template": "Vorlage erstellen", "create_user": "Benutzer erstellen", + "customization": "Customization", "default": "Standard", "default_language": "Standardsprache", "default_language_desc": "Standardsprache, die für alle verwendet wird, wenn sie keine angegeben haben. \nWenn dies deaktiviert ist, wird die Sprache des Browsers verwendet.", @@ -251,7 +253,12 @@ "select_project": "Projekt auswählen", "select_team": "Team auswählen", "select_team_as_recipient": "Team als Empfänger auswählen", + "show_source_of_discovery_badge": "Show Source of Discovery badge on the vulnerability page", "snyk": "Snyk (Beta)", + "source_label": "Source Label", + "source_label_duplicate": "A source with this name already exists. Please use a unique name.", + "source_of_discovery": "Source of Discovery", + "source_of_discovery_placeholder": "Select source...", "subject_identifier": "Betreffkennung", "submit": "Einreichen", "suspended": "Ausgesetzt", @@ -294,6 +301,7 @@ "username": "Benutzername", "vuln_sources": "Schwachstellenquellen", "vulndb": "VulnDB", + "vulnerability_sources_desc": "Configure the selectable sources of discovery for internal vulnerabilities. When enabled, a Source of Discovery dropdown is shown on the create and edit forms and a badge on the vulnerability page.", "vulnsource_alias_sync_enable": "Synchronisierung von Schwachstellenaliasen aktivieren", "vulnsource_alias_sync_enable_tooltip": "Alias-Daten können dabei helfen, identische Schwachstellen in mehreren Datenbanken zu identifizieren. Wenn die Quelle diese Daten bereitstellt, synchronisieren Sie sie mit der Datenbank von Dependency-Track.", "vulnsource_github_advisories_desc": "GitHub Advisories (GHSA) ist eine Datenbank mit CVEs und von GitHub stammenden Sicherheitshinweisen, die die Open-Source-Welt betreffen. Dependency-Track integriert sich in GHSA, indem Hinweise über die öffentliche GraphQL-API von GitHub gespiegelt werden. Der Spiegel wird täglich oder beim Neustart der Dependency-Track-Instanz aktualisiert. Zur Authentifizierung bei GitHub ist ein persönlicher Zugriffstoken (PAT) erforderlich, ihm müssen jedoch keine Bereiche zugewiesen werden.", diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index 12975b978..2f8ff725d 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -6,6 +6,7 @@ }, "admin": { "access_management": "Access Management", + "add_source": "Add Source", "alert_created": "Alert created", "alert_deleted": "Alert deleted", "alert_log_successful_publish": "Log successful publish", @@ -78,6 +79,7 @@ "create_team": "Create Team", "create_template": "Create Template", "create_user": "Create User", + "customization": "Customization", "default": "Default", "default_language": "Default Language", "default_language_desc": "Default language, which is used for everyone, when they didn't specify one. Language from Browser will be used, when this is disabled.", @@ -251,7 +253,12 @@ "select_project": "Select Project", "select_team": "Select Team", "select_team_as_recipient": "Select team as recipient", + "show_source_of_discovery_badge": "Show Source of Discovery badge on the vulnerability page", "snyk": "Snyk (Beta)", + "source_label": "Source Label", + "source_label_duplicate": "A source with this name already exists. Please use a unique name.", + "source_of_discovery": "Source of Discovery", + "source_of_discovery_placeholder": "Select source...", "subject_identifier": "Subject Identifier", "submit": "Submit", "suspended": "Suspended", @@ -294,6 +301,7 @@ "username": "Username", "vuln_sources": "Vulnerability Sources", "vulndb": "VulnDB", + "vulnerability_sources_desc": "Configure the selectable sources of discovery for internal vulnerabilities. When enabled, a Source of Discovery dropdown is shown on the create and edit forms and a badge on the vulnerability page.", "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.", diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json index 2599f8132..033ed540b 100644 --- a/src/i18n/locales/es.json +++ b/src/i18n/locales/es.json @@ -6,6 +6,7 @@ }, "admin": { "access_management": "Gestión de Acceso", + "add_source": "Add Source", "alert_created": "Alerta creada", "alert_deleted": "Alerta eliminada", "alert_log_successful_publish": "Registrar publicación exitosa", @@ -78,6 +79,7 @@ "create_team": "Crear equipo", "create_template": "Crear plantilla", "create_user": "Crear usuario", + "customization": "Customization", "default": "Por defecto", "default_language": "Idioma predeterminado", "default_language_desc": "Idioma predeterminado, que se usa para todos, cuando no especificaron uno. \nSe utilizará el idioma del navegador cuando esté deshabilitado.", @@ -251,7 +253,12 @@ "select_project": "Seleccionar Proyecto", "select_team": "Selecciona un equipo", "select_team_as_recipient": "Seleccionar equipo como destinatario", + "show_source_of_discovery_badge": "Show Source of Discovery badge on the vulnerability page", "snyk": "Snyk (Beta)", + "source_label": "Source Label", + "source_label_duplicate": "A source with this name already exists. Please use a unique name.", + "source_of_discovery": "Source of Discovery", + "source_of_discovery_placeholder": "Select source...", "subject_identifier": "Identificador de sujeto", "submit": "Entregar", "suspended": "Suspendido", @@ -294,6 +301,7 @@ "username": "Nombre de usuario", "vuln_sources": "Fuentes de vulnerabilidad", "vulndb": "VulnDB", + "vulnerability_sources_desc": "Configure the selectable sources of discovery for internal vulnerabilities. When enabled, a Source of Discovery dropdown is shown on the create and edit forms and a badge on the vulnerability page.", "vulnsource_alias_sync_enable": "Habilitar la sincronización de alias de vulnerabilidad", "vulnsource_alias_sync_enable_tooltip": "Los datos de alias pueden ayudar a identificar vulnerabilidades idénticas en múltiples bases de datos. Si la fuente proporciona estos datos, sincronícelos con la base de datos de Dependency-Track.", "vulnsource_github_advisories_desc": "GitHub Advisories (GHSA) es una base de datos de CVE y avisos de seguridad originados en GitHub que afectan al mundo del código abierto. Dependency-Track se integra con GHSA reflejando avisos a través de la API pública GraphQL de GitHub. El espejo se actualiza diariamente o al reiniciar la instancia de Dependency-Track. Se requiere un token de acceso personal (PAT) para autenticarse con GitHub, pero no es necesario asignarle ámbitos.", diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json index 939293a25..e5dbd9802 100644 --- a/src/i18n/locales/fr.json +++ b/src/i18n/locales/fr.json @@ -6,6 +6,7 @@ }, "admin": { "access_management": "Gestion des accès", + "add_source": "Add Source", "alert_created": "Alerte créée", "alert_deleted": "Alerte supprimée", "alert_log_successful_publish": "Journaliser les publications réussies", @@ -78,6 +79,7 @@ "create_team": "Créer une équipe", "create_template": "Créer un modèle", "create_user": "Créer un utilisateur", + "customization": "Customization", "default": "Défaut", "default_language": "Langue par défaut", "default_language_desc": "Langue par défaut, qui est utilisée par tout le monde, lorsqu'ils n'en ont pas spécifié. \nLa langue du navigateur sera utilisée lorsqu'elle est désactivée.", @@ -251,7 +253,12 @@ "select_project": "Sélectionner un projet", "select_team": "Sélectionner une équipe", "select_team_as_recipient": "Sélectionner une équipe comme destinataire", + "show_source_of_discovery_badge": "Show Source of Discovery badge on the vulnerability page", "snyk": "Snyk (bêta)", + "source_label": "Source Label", + "source_label_duplicate": "A source with this name already exists. Please use a unique name.", + "source_of_discovery": "Source of Discovery", + "source_of_discovery_placeholder": "Select source...", "subject_identifier": "Identifiant du sujet", "submit": "Soumettre", "suspended": "Suspendu", @@ -294,6 +301,7 @@ "username": "Nom d'utilisateur", "vuln_sources": "Sources de vulnérabilité", "vulndb": "VulnDB", + "vulnerability_sources_desc": "Configure the selectable sources of discovery for internal vulnerabilities. When enabled, a Source of Discovery dropdown is shown on the create and edit forms and a badge on the vulnerability page.", "vulnsource_alias_sync_enable": "Activer la synchronisation des alias de vulnérabilité", "vulnsource_alias_sync_enable_tooltip": "Les données d'alias peuvent aider à identifier des vulnérabilités identiques dans plusieurs bases de données. Si la source fournit ces données, synchronisez-les avec la base de données de Dependency-Track.", "vulnsource_github_advisories_desc": "GitHub Advisories (GHSA) est une base de données de CVE et d'avis de sécurité provenant de GitHub affectant le monde open source. Dependency-Track s'intègre à GHSA en reflétant les avis via l'API publique GraphQL de GitHub. Le miroir est actualisé quotidiennement ou au redémarrage de l'instance Dependency-Track. Un jeton d'accès personnel (PAT) est requis pour s'authentifier auprès de GitHub, mais aucun périmètre ne doit lui être attribuée.", diff --git a/src/i18n/locales/hi.json b/src/i18n/locales/hi.json index 2f94d72e6..6569dc4ce 100644 --- a/src/i18n/locales/hi.json +++ b/src/i18n/locales/hi.json @@ -6,6 +6,7 @@ }, "admin": { "access_management": "उपयोग प्रबंधन", + "add_source": "Add Source", "alert_created": "अलर्ट बनाया गया", "alert_deleted": "अलर्ट हटा दिया गया", "alert_log_successful_publish": "लॉग सफल प्रकाशन", @@ -78,6 +79,7 @@ "create_team": "टीम बनाएं", "create_template": "टेम्पलेट बनाएं", "create_user": "उपयोगकर्ता बनाइये", + "customization": "Customization", "default": "गलती करना", "default_language": "डिफ़ॉल्ट भाषा", "default_language_desc": "डिफ़ॉल्ट भाषा, जिसका उपयोग सभी के लिए किया जाता है, जब उन्होंने किसी एक को निर्दिष्ट नहीं किया हो। \nइसे अक्षम करने पर ब्राउज़र से लैंग्वेज का उपयोग किया जाएगा।", @@ -251,7 +253,12 @@ "select_project": "प्रोजेक्ट चुनें", "select_team": "टीम का चयन", "select_team_as_recipient": "प्राप्तकर्ता के रूप में टीम का चयन करें", + "show_source_of_discovery_badge": "Show Source of Discovery badge on the vulnerability page", "snyk": "स्निक (बीटा)", + "source_label": "Source Label", + "source_label_duplicate": "A source with this name already exists. Please use a unique name.", + "source_of_discovery": "Source of Discovery", + "source_of_discovery_placeholder": "Select source...", "subject_identifier": "विषय पहचानकर्ता", "submit": "जमा करना", "suspended": "निलंबित", @@ -294,6 +301,7 @@ "username": "उपयोगकर्ता नाम", "vuln_sources": "भेद्यता स्रोत", "vulndb": "वुल्नडीबी", + "vulnerability_sources_desc": "Configure the selectable sources of discovery for internal vulnerabilities. When enabled, a Source of Discovery dropdown is shown on the create and edit forms and a badge on the vulnerability page.", "vulnsource_alias_sync_enable": "भेद्यता उपनाम सिंक्रनाइज़ेशन सक्षम करें", "vulnsource_alias_sync_enable_tooltip": "उपनाम डेटा कई डेटाबेस में समान कमजोरियों की पहचान करने में मदद कर सकता है। यदि स्रोत यह डेटा प्रदान करता है, तो इसे डिपेंडेंसी-ट्रैक के डेटाबेस के साथ सिंक्रनाइज़ करें।", "vulnsource_github_advisories_desc": "GitHub एडवाइज़रीज (GHSA) CVE और GitHub द्वारा उत्पन्न सुरक्षा सलाह का एक डेटाबेस है जो ओपन सोर्स दुनिया को प्रभावित करता है। डिपेंडेंसी-ट्रैक GitHub के सार्वजनिक GraphQL API के माध्यम से सलाह को मिरर करके GHSA के साथ एकीकृत होता है। मिरर को प्रतिदिन या डिपेंडेंसी-ट्रैक इंस्टेंस के पुनरारंभ होने पर रिफ्रेश किया जाता है। GitHub के साथ प्रमाणीकरण के लिए एक व्यक्तिगत एक्सेस टोकन (PAT) की आवश्यकता होती है, लेकिन इसके लिए कोई स्कोप असाइन करने की आवश्यकता नहीं होती है।", diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json index a1ca33752..e1789f3f8 100644 --- a/src/i18n/locales/it.json +++ b/src/i18n/locales/it.json @@ -6,6 +6,7 @@ }, "admin": { "access_management": "gestione degli accessi", + "add_source": "Add Source", "alert_created": "Avviso creato", "alert_deleted": "Avviso eliminato", "alert_log_successful_publish": "Registra la pubblicazione riuscita", @@ -78,6 +79,7 @@ "create_team": "Crea squadra", "create_template": "Crea modello", "create_user": "Creare un utente", + "customization": "Customization", "default": "Predefinito", "default_language": "Lingua predefinita", "default_language_desc": "Lingua predefinita, utilizzata da tutti quando non ne è stata specificata una. \nQuando questa opzione è disabilitata, verrà utilizzata la lingua del browser.", @@ -251,7 +253,12 @@ "select_project": "Seleziona Progetto", "select_team": "Selezionare squadra", "select_team_as_recipient": "Seleziona la squadra come destinatario", + "show_source_of_discovery_badge": "Show Source of Discovery badge on the vulnerability page", "snyk": "Snyk (Beta)", + "source_label": "Source Label", + "source_label_duplicate": "A source with this name already exists. Please use a unique name.", + "source_of_discovery": "Source of Discovery", + "source_of_discovery_placeholder": "Select source...", "subject_identifier": "Identificatore del soggetto", "submit": "Invia", "suspended": "Sospeso", @@ -294,6 +301,7 @@ "username": "Nome utente", "vuln_sources": "Fonti di vulnerabilità", "vulndb": "VulnDB", + "vulnerability_sources_desc": "Configure the selectable sources of discovery for internal vulnerabilities. When enabled, a Source of Discovery dropdown is shown on the create and edit forms and a badge on the vulnerability page.", "vulnsource_alias_sync_enable": "Abilita la sincronizzazione degli alias di vulnerabilità", "vulnsource_alias_sync_enable_tooltip": "I dati alias possono aiutare a identificare vulnerabilità identiche su più database. Se la fonte fornisce questi dati, sincronizzali con il database di Dependency-Track.", "vulnsource_github_advisories_desc": "GitHub Advisories (GHSA) è un database di CVE e avvisi di sicurezza originati da GitHub che interessano il mondo open source. Dependency-Track si integra con GHSA eseguendo il mirroring degli avvisi tramite l'API GraphQL pubblica di GitHub. Il mirror viene aggiornato quotidianamente o al riavvio dell'istanza Dependency-Track. Per eseguire l'autenticazione con GitHub è necessario un token di accesso personale (PAT), ma non è necessario assegnargli alcun ambito.", diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json index 121191c2e..62004769e 100644 --- a/src/i18n/locales/ja.json +++ b/src/i18n/locales/ja.json @@ -6,6 +6,7 @@ }, "admin": { "access_management": "アクセス管理", + "add_source": "Add Source", "alert_created": "アラートを作成しました", "alert_deleted": "アラートを削除しました", "alert_log_successful_publish": "発行成功のログ", @@ -78,6 +79,7 @@ "create_team": "チームを作成", "create_template": "テンプレートを作成", "create_user": "ユーザーを作成", + "customization": "Customization", "default": "デフォルト", "default_language": "デフォルトの言語", "default_language_desc": "デフォルトの言語。指定しなかった場合に全員に使用されます。\nこれを無効にすると、ブラウザの言語が使用されます。", @@ -251,7 +253,12 @@ "select_project": "プロジェクトを選択", "select_team": "チームを選ぶ", "select_team_as_recipient": "受信者としてチームを選択", + "show_source_of_discovery_badge": "Show Source of Discovery badge on the vulnerability page", "snyk": "Snyk (ベータ版)", + "source_label": "Source Label", + "source_label_duplicate": "A source with this name already exists. Please use a unique name.", + "source_of_discovery": "Source of Discovery", + "source_of_discovery_placeholder": "Select source...", "subject_identifier": "サブジェクト識別子", "submit": "登録", "suspended": "一時停止中", @@ -294,6 +301,7 @@ "username": "ユーザー名", "vuln_sources": "脆弱性情報源", "vulndb": "VulnDB", + "vulnerability_sources_desc": "Configure the selectable sources of discovery for internal vulnerabilities. When enabled, a Source of Discovery dropdown is shown on the create and edit forms and a badge on the vulnerability page.", "vulnsource_alias_sync_enable": "脆弱性エイリアスの同期を有効にする", "vulnsource_alias_sync_enable_tooltip": "エイリアス データは、複数のデータベース間で同一の脆弱性を識別するのに役立ちます。ソースがこのデータを提供する場合は、Dependency-Track のデータベースと同期します。", "vulnsource_github_advisories_desc": "GitHub Advisories (GHSA) は、オープンソースの世界に影響を与える CVE と GitHub 発のセキュリティ アドバイザリのデータベースです。Dependency-Track は、GitHub のパブリック GraphQL API を介してアドバイザリをミラーリングすることで GHSA と統合します。ミラーは毎日、または Dependency-Track インスタンスの再起動時に更新されます。GitHub で認証するには個人アクセス トークン (PAT) が必要ですが、スコープを割り当てる必要はありません。", diff --git a/src/i18n/locales/pl.json b/src/i18n/locales/pl.json index 8385a63a5..4c46bdb80 100644 --- a/src/i18n/locales/pl.json +++ b/src/i18n/locales/pl.json @@ -6,6 +6,7 @@ }, "admin": { "access_management": "Zarządzanie dostępem", + "add_source": "Add Source", "alert_created": "Alert został utworzony", "alert_deleted": "Alert usunięty", "alert_log_successful_publish": "Zaloguj pomyślną publikację", @@ -78,6 +79,7 @@ "create_team": "Utwórz zespół", "create_template": "Utwórz szablon", "create_user": "Stwórz użytkownika", + "customization": "Customization", "default": "Domyślny", "default_language": "Domyślny język", "default_language_desc": "Domyślny język, którego używają wszyscy, jeśli go nie określili. \nJeśli ta opcja jest wyłączona, używany będzie język z przeglądarki.", @@ -251,7 +253,12 @@ "select_project": "Wybierz Projekt", "select_team": "Wybierz drużynę", "select_team_as_recipient": "Wybierz zespół jako odbiorcę", + "show_source_of_discovery_badge": "Show Source of Discovery badge on the vulnerability page", "snyk": "Snyk (beta)", + "source_label": "Source Label", + "source_label_duplicate": "A source with this name already exists. Please use a unique name.", + "source_of_discovery": "Source of Discovery", + "source_of_discovery_placeholder": "Select source...", "subject_identifier": "Identyfikator podmiotu", "submit": "Składać", "suspended": "Zawieszony", @@ -294,6 +301,7 @@ "username": "Nazwa użytkownika", "vuln_sources": "Źródła podatności", "vulndb": "VulnDB", + "vulnerability_sources_desc": "Configure the selectable sources of discovery for internal vulnerabilities. When enabled, a Source of Discovery dropdown is shown on the create and edit forms and a badge on the vulnerability page.", "vulnsource_alias_sync_enable": "Włącz synchronizację aliasów luk w zabezpieczeniach", "vulnsource_alias_sync_enable_tooltip": "Dane aliasów mogą pomóc w identyfikacji identycznych luk w zabezpieczeniach wielu baz danych. Jeśli źródło dostarcza te dane, zsynchronizuj je z bazą danych Depency-Track.", "vulnsource_github_advisories_desc": "GitHub Advisories (GHSA) to baza danych CVE i porad bezpieczeństwa pochodzących z GitHub, mających wpływ na świat open source. Zależność-Track integruje się z GHSA, odzwierciedlając porady za pośrednictwem publicznego API GraphQL GitHuba. Lustro jest odświeżane codziennie lub po ponownym uruchomieniu instancji Depency-Track. Do uwierzytelnienia w GitHub wymagany jest osobisty token dostępu (PAT), ale nie trzeba do niego przypisywać żadnych zakresów.", diff --git a/src/i18n/locales/pt-BR.json b/src/i18n/locales/pt-BR.json index 589515643..e5caa6fab 100644 --- a/src/i18n/locales/pt-BR.json +++ b/src/i18n/locales/pt-BR.json @@ -6,6 +6,7 @@ }, "admin": { "access_management": "Gerenciamento de acesso", + "add_source": "Add Source", "alert_created": "Alerta criado", "alert_deleted": "Alerta excluído", "alert_log_successful_publish": "Registrar publicação bem-sucedida", @@ -78,6 +79,7 @@ "create_team": "Criar equipe", "create_template": "Criar modelo", "create_user": "Criar usuário", + "customization": "Customization", "default": "Padrão", "default_language": "Idioma padrão", "default_language_desc": "Idioma padrão, que é usado por todos, quando não especificam um. \nO idioma do navegador será usado quando estiver desabilitado.", @@ -251,7 +253,12 @@ "select_project": "Selecione o projeto", "select_team": "Selecionar time", "select_team_as_recipient": "Selecione a equipe como destinatário", + "show_source_of_discovery_badge": "Show Source of Discovery badge on the vulnerability page", "snyk": "Snyk (beta)", + "source_label": "Source Label", + "source_label_duplicate": "A source with this name already exists. Please use a unique name.", + "source_of_discovery": "Source of Discovery", + "source_of_discovery_placeholder": "Select source...", "subject_identifier": "Identificador do Assunto", "submit": "Enviar", "suspended": "Suspenso", @@ -294,6 +301,7 @@ "username": "Nome de usuário", "vuln_sources": "Fontes de vulnerabilidade", "vulndb": "VulnDB", + "vulnerability_sources_desc": "Configure the selectable sources of discovery for internal vulnerabilities. When enabled, a Source of Discovery dropdown is shown on the create and edit forms and a badge on the vulnerability page.", "vulnsource_alias_sync_enable": "Habilitar sincronização de alias de vulnerabilidade", "vulnsource_alias_sync_enable_tooltip": "Os dados de alias podem ajudar a identificar vulnerabilidades idênticas em vários bancos de dados. Se a fonte fornecer esses dados, sincronize-os com o banco de dados do Dependency-Track.", "vulnsource_github_advisories_desc": "GitHub Advisories (GHSA) é um banco de dados de CVEs e avisos de segurança originados no GitHub que afetam o mundo do código aberto. Dependency-Track integra-se ao GHSA espelhando avisos por meio da API GraphQL pública do GitHub. O espelho é atualizado diariamente ou na reinicialização da instância Dependency-Track. Um token de acesso pessoal (PAT) é necessário para autenticar no GitHub, mas nenhum escopo precisa ser atribuído a ele.", diff --git a/src/i18n/locales/pt.json b/src/i18n/locales/pt.json index f14ad0565..46feb904a 100644 --- a/src/i18n/locales/pt.json +++ b/src/i18n/locales/pt.json @@ -6,6 +6,7 @@ }, "admin": { "access_management": "Gerir acessos", + "add_source": "Add Source", "alert_created": "Alerta criado", "alert_deleted": "Alerta excluído", "alert_log_successful_publish": "Registrar publicação bem-sucedida", @@ -78,6 +79,7 @@ "create_team": "Criar equipe", "create_template": "Criar modelo", "create_user": "Criar utilizador", + "customization": "Customization", "default": "Padrão", "default_language": "Idioma padrão", "default_language_desc": "Idioma padrão, que é usado por todos, quando não especificam um. \nO idioma do navegador será usado quando estiver desabilitado.", @@ -251,7 +253,12 @@ "select_project": "Selecione o projeto", "select_team": "Selecionar time", "select_team_as_recipient": "Selecione a equipe como destinatário", + "show_source_of_discovery_badge": "Show Source of Discovery badge on the vulnerability page", "snyk": "Snyk (beta)", + "source_label": "Source Label", + "source_label_duplicate": "A source with this name already exists. Please use a unique name.", + "source_of_discovery": "Source of Discovery", + "source_of_discovery_placeholder": "Select source...", "subject_identifier": "Identificador do Assunto", "submit": "Enviar", "suspended": "Suspenso", @@ -294,6 +301,7 @@ "username": "Nome de utilizador", "vuln_sources": "Fontes de vulnerabilidade", "vulndb": "VulnDB", + "vulnerability_sources_desc": "Configure the selectable sources of discovery for internal vulnerabilities. When enabled, a Source of Discovery dropdown is shown on the create and edit forms and a badge on the vulnerability page.", "vulnsource_alias_sync_enable": "Habilitar sincronização de alias de vulnerabilidade", "vulnsource_alias_sync_enable_tooltip": "Os dados de alias podem ajudar a identificar vulnerabilidades idênticas em vários bancos de dados. Se a fonte fornecer esses dados, sincronize-os com o banco de dados do Dependency-Track.", "vulnsource_github_advisories_desc": "GitHub Advisories (GHSA) é um banco de dados de CVEs e avisos de segurança originados no GitHub que afetam o mundo do código aberto. Dependency-Track integra-se ao GHSA espelhando avisos por meio da API GraphQL pública do GitHub. O espelho é atualizado diariamente ou na reinicialização da instância Dependency-Track. Um token de acesso pessoal (PAT) é necessário para autenticar no GitHub, mas nenhum escopo precisa ser atribuído a ele.", diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json index eac21ab68..bd98b757e 100644 --- a/src/i18n/locales/ru.json +++ b/src/i18n/locales/ru.json @@ -6,6 +6,7 @@ }, "admin": { "access_management": "Управление доступом", + "add_source": "Add Source", "alert_created": "Оповещение создано", "alert_deleted": "Оповещение удалено", "alert_log_successful_publish": "Успешная публикация журнала", @@ -78,6 +79,7 @@ "create_team": "Создать команду", "create_template": "Создать шаблон", "create_user": "Создать пользователя", + "customization": "Customization", "default": "По умолчанию", "default_language": "Язык по умолчанию", "default_language_desc": "Язык по умолчанию, который используется для всех, если они не указали другой. Если отключено, будет использоваться язык браузера.", @@ -251,7 +253,12 @@ "select_project": "Выбрать проект", "select_team": "Выбрать команду", "select_team_as_recipient": "Выбрать команду в качестве получателя", + "show_source_of_discovery_badge": "Show Source of Discovery badge on the vulnerability page", "snyk": "Snyk (бета)", + "source_label": "Source Label", + "source_label_duplicate": "A source with this name already exists. Please use a unique name.", + "source_of_discovery": "Source of Discovery", + "source_of_discovery_placeholder": "Select source...", "subject_identifier": "Идентификатор субъекта", "submit": "Отправить", "suspended": "Приостановлен", @@ -294,6 +301,7 @@ "username": "Имя пользователя", "vuln_sources": "Источники уязвимостей", "vulndb": "VulnDB", + "vulnerability_sources_desc": "Configure the selectable sources of discovery for internal vulnerabilities. When enabled, a Source of Discovery dropdown is shown on the create and edit forms and a badge on the vulnerability page.", "vulnsource_alias_sync_enable": "Включить синхронизацию псевдонимов уязвимостей", "vulnsource_alias_sync_enable_tooltip": "Данные псевдонимов могут помочь в идентификации одинаковых уязвимостей в разных базах данных. Если источник предоставляет такие данные, синхронизируйте их с базой данных Dependency-Track.", "vulnsource_github_advisories_desc": "GitHub Advisories (GHSA) — это база данных CVE и рекомендаций по безопасности, инициированных GitHub, которые затрагивают открытый исходный код. Dependency-Track интегрируется с GHSA, зеркалируя рекомендации через публичный GraphQL API GitHub. Зеркало обновляется ежедневно или при перезапуске экземпляра Dependency-Track. Для аутентификации с GitHub требуется персональный токен доступа (PAT), но ему не нужно присваивать какие-либо права.", diff --git a/src/i18n/locales/uk-UA.json b/src/i18n/locales/uk-UA.json index 9488fd284..fd6cbce77 100644 --- a/src/i18n/locales/uk-UA.json +++ b/src/i18n/locales/uk-UA.json @@ -6,6 +6,7 @@ }, "admin": { "access_management": "Управління доступом", + "add_source": "Add Source", "alert_created": "Сповіщення створено", "alert_deleted": "Сповіщення видалено", "alert_log_successful_publish": "Логувати успішну публікацію", @@ -78,6 +79,7 @@ "create_team": "Створити команду", "create_template": "Створити шаблон", "create_user": "Створити користувача", + "customization": "Customization", "default": "За замовчуванням", "default_language": "Мова за замовчуванням", "default_language_desc": "Мова за замовчуванням, яка використовується для всіх, якщо вони не вказали іншу. Мова з браузера буде використовуватися, якщо це вимкнено.", @@ -251,7 +253,12 @@ "select_project": "Вибрати проєкт", "select_team": "Вибрати команду", "select_team_as_recipient": "Вибрати команду як отримувача", + "show_source_of_discovery_badge": "Show Source of Discovery badge on the vulnerability page", "snyk": "Snyk (бета)", + "source_label": "Source Label", + "source_label_duplicate": "A source with this name already exists. Please use a unique name.", + "source_of_discovery": "Source of Discovery", + "source_of_discovery_placeholder": "Select source...", "subject_identifier": "Ідентифікатор суб'єкта", "submit": "Надіслати", "suspended": "Призупинено", @@ -294,6 +301,7 @@ "username": "Ім'я користувача", "vuln_sources": "Джерела уразливостей", "vulndb": "VulnDB", + "vulnerability_sources_desc": "Configure the selectable sources of discovery for internal vulnerabilities. When enabled, a Source of Discovery dropdown is shown on the create and edit forms and a badge on the vulnerability page.", "vulnsource_alias_sync_enable": "Увімкнути синхронізацію псевдонімів уразливостей", "vulnsource_alias_sync_enable_tooltip": "Дані псевдонімів можуть допомогти в ідентифікації однакових уразливостей у кількох базах даних. Якщо джерело надає ці дані, синхронізуйте їх з базою даних Dependency-Track.", "vulnsource_github_advisories_desc": "GitHub Advisories (GHSA) – це база даних CVE та рекомендацій з безпеки, створених GitHub, що стосуються відкритого програмного забезпечення. Dependency-Track інтегрується з GHSA, дзеркалюючи рекомендації через публічний GraphQL API GitHub. Дзеркало оновлюється щодня або після перезапуску екземпляра Dependency-Track. Для автентифікації на GitHub потрібен особистий токен доступу (PAT), але йому не потрібно призначати жодних областей дії.", diff --git a/src/i18n/locales/zh-TW.json b/src/i18n/locales/zh-TW.json index 9e57e2b76..e65669bf6 100644 --- a/src/i18n/locales/zh-TW.json +++ b/src/i18n/locales/zh-TW.json @@ -6,6 +6,7 @@ }, "admin": { "access_management": "使用者與權限", + "add_source": "Add Source", "alert_created": "已建立警示", "alert_deleted": "已刪除警示", "alert_log_successful_publish": "成功發佈時記錄日誌", @@ -78,6 +79,7 @@ "create_team": "建立團隊", "create_template": "建立範本", "create_user": "建立使用者", + "customization": "Customization", "default": "預設", "default_language": "預設語言", "default_language_desc": "預設語言,使用者未指定語言時皆會使用。停用時將使用瀏覽器語言。", @@ -251,7 +253,12 @@ "select_project": "選擇專案", "select_team": "選擇團隊", "select_team_as_recipient": "選擇團隊作為收件人", + "show_source_of_discovery_badge": "Show Source of Discovery badge on the vulnerability page", "snyk": "Snyk(測試版)", + "source_label": "Source Label", + "source_label_duplicate": "A source with this name already exists. Please use a unique name.", + "source_of_discovery": "Source of Discovery", + "source_of_discovery_placeholder": "Select source...", "subject_identifier": "主題識別碼", "submit": "送出", "suspended": "暫停", @@ -294,6 +301,7 @@ "username": "使用者名稱", "vuln_sources": "漏洞來源", "vulndb": "漏洞資料庫", + "vulnerability_sources_desc": "Configure the selectable sources of discovery for internal vulnerabilities. When enabled, a Source of Discovery dropdown is shown on the create and edit forms and a badge on the vulnerability page.", "vulnsource_alias_sync_enable": "啟用漏洞別名同步", "vulnsource_alias_sync_enable_tooltip": "別名資料有助於識別多個資料庫中的相同漏洞。如果來源提供此資料,請將其與 Dependency-Track 的資料庫同步。", "vulnsource_github_advisories_desc": "GitHub 公告 (GHSA) 是一個 CVE 資料庫,其中包含影響開源世界的 GitHub 安全公告。Dependency-Track 透過 GitHub 的公開 GraphQL API 鏡像公告,與 GHSA 整合。鏡像每天重新整理一次,或在重新啟動 Dependency-Track 執行個體時重新整理。需要個人存取權杖 (PAT) 才能透過 GitHub 進行身分驗證,但無需為其分配範圍。", diff --git a/src/i18n/locales/zh.json b/src/i18n/locales/zh.json index 19f3e5781..33770353c 100644 --- a/src/i18n/locales/zh.json +++ b/src/i18n/locales/zh.json @@ -6,6 +6,7 @@ }, "admin": { "access_management": "用户和权限", + "add_source": "Add Source", "alert_created": "已创建告警", "alert_deleted": "已删除告警", "alert_log_successful_publish": "告警日志成功发送", @@ -78,6 +79,7 @@ "create_team": "创建团队", "create_template": "创建模板", "create_user": "创建用户", + "customization": "Customization", "default": "默认", "default_language": "默认语言", "default_language_desc": "默认语言,当他们没有指定一种语言时,每个人都使用它。\n禁用时,将使用浏览器中的语言。", @@ -251,7 +253,12 @@ "select_project": "选择项目", "select_team": "选择团队", "select_team_as_recipient": "选择团队作为收件人", + "show_source_of_discovery_badge": "Show Source of Discovery badge on the vulnerability page", "snyk": "Snyk(测试版)", + "source_label": "Source Label", + "source_label_duplicate": "A source with this name already exists. Please use a unique name.", + "source_of_discovery": "Source of Discovery", + "source_of_discovery_placeholder": "Select source...", "subject_identifier": "主题标识符", "submit": "提交", "suspended": "已停用", @@ -294,6 +301,7 @@ "username": "用户名", "vuln_sources": "漏洞来源", "vulndb": "漏洞数据库", + "vulnerability_sources_desc": "Configure the selectable sources of discovery for internal vulnerabilities. When enabled, a Source of Discovery dropdown is shown on the create and edit forms and a badge on the vulnerability page.", "vulnsource_alias_sync_enable": "启用漏洞别名同步", "vulnsource_alias_sync_enable_tooltip": "别名数据有助于识别多个数据库中的相同漏洞。如果来源提供了此数据,请将其与 Dependency-Track 的数据库同步。", "vulnsource_github_advisories_desc": "GitHub 安全公告 (GHSA) 是一个 CVE 数据库,其中包含影响开源世界的 GitHub 安全公告。Dependency-Track 通过 GitHub 的公共 GraphQL API 镜像公告,与 GHSA 集成。镜像每天刷新一次,或在重新启动 Dependency-Track 实例时刷新。需要个人访问令牌 (PAT) 才能通过 GitHub 进行身份验证,但无需为其分配范围。", diff --git a/src/main.js b/src/main.js index 1fdfa468c..e89405a98 100644 --- a/src/main.js +++ b/src/main.js @@ -9,6 +9,7 @@ import router from './router'; import i18n from './i18n'; import './validation'; import './plugins/table.js'; +import customizationPlugin from './plugins/customization.js'; import axios from 'axios'; import VueAxios from 'vue-axios'; import vueDebounce from 'vue-debounce'; @@ -30,6 +31,7 @@ Vue.use(VueToastr, { defaultCloseOnHover: false, }); Vue.use(vueDebounce, { defaultTime: '750ms' }); +Vue.use(customizationPlugin); Vue.use(VuePageTitle, { prefix: 'Dependency-Track -', router }); Vue.prototype.$api = api; diff --git a/src/plugins/customization.js b/src/plugins/customization.js new file mode 100644 index 000000000..0189e2314 --- /dev/null +++ b/src/plugins/customization.js @@ -0,0 +1,154 @@ +/** + * This file is part of Dependency-Track. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * Copyright (c) OWASP Foundation. All Rights Reserved. + */ + +import axios from 'axios'; + +/** + * Plugin for the Customization API endpoints. + * Provides methods for interacting with customization settings with in-memory + * caching so settings are fetched once and shared across components. + */ +export default { + install(vueApp) { + // Cache for vulnerability source of discovery options + let cachedVulnSourceConfig = null; + let vulnSourceLoaded = false; + let vulnSourceLoadingPromise = null; + + const defaultVulnSourceConfig = () => ({ + enabled: false, + values: [], + }); + + const customizationService = { + /** + * Get cached vulnerability source of discovery options (instant access). + * Returns cached config or defaults if not yet loaded. + * @returns {Object} Cached config object with enabled flag and values + */ + getCachedVulnSourceConfig() { + if (cachedVulnSourceConfig) { + return cachedVulnSourceConfig; + } + return defaultVulnSourceConfig(); + }, + + /** + * Preload vulnerability source options (call after authentication). + * @returns {Promise} Resolves when the config is loaded + */ + async preloadVulnSourceConfig() { + if (vulnSourceLoaded) { + return cachedVulnSourceConfig; + } + if (vulnSourceLoadingPromise) { + return vulnSourceLoadingPromise; + } + vulnSourceLoadingPromise = this.getVulnerabilitySourceOptions() + .then((response) => { + if (response && response.data) { + cachedVulnSourceConfig = response.data; + vulnSourceLoaded = true; + } + return cachedVulnSourceConfig; + }) + .catch((error) => { + console.warn( + 'Failed to preload vulnerability source options, using defaults:', + error, + ); + cachedVulnSourceConfig = defaultVulnSourceConfig(); + vulnSourceLoaded = true; + return cachedVulnSourceConfig; + }) + .finally(() => { + vulnSourceLoadingPromise = null; + }); + return vulnSourceLoadingPromise; + }, + + /** + * Preload all customization settings after authentication succeeds. + * Uses allSettled so one failing endpoint does not block the rest. + * @returns {Promise} + */ + async preloadAll() { + await Promise.allSettled([this.preloadVulnSourceConfig()]); + }, + + /** + * Invalidate the vulnerability source options cache. + */ + invalidateVulnSourceCache() { + cachedVulnSourceConfig = null; + vulnSourceLoaded = false; + }, + + /** + * Get the vulnerability source of discovery options. + * @returns {Promise} Response containing the enabled flag and source values + */ + getVulnerabilitySourceOptions() { + return axios.get( + vueApp.prototype.$api.BASE_URL + + '/' + + vueApp.prototype.$api.URL_CUSTOMIZATION + + '/vulnerability-source', + { + withCredentials: vueApp.prototype.$api.WITH_CREDENTIALS, + headers: { + 'Content-Type': vueApp.prototype.$api.CONTENT_TYPE_JSON, + }, + }, + ); + }, + + /** + * Update the vulnerability source of discovery options. + * @param {Object} config - Object with enabled flag and values array + * @returns {Promise} Response from update operation + */ + updateVulnerabilitySourceOptions(config) { + this.invalidateVulnSourceCache(); + return axios + .put( + vueApp.prototype.$api.BASE_URL + + '/' + + vueApp.prototype.$api.URL_CUSTOMIZATION + + '/vulnerability-source', + config, + { + withCredentials: vueApp.prototype.$api.WITH_CREDENTIALS, + headers: { + 'Content-Type': vueApp.prototype.$api.CONTENT_TYPE_JSON, + }, + }, + ) + .then((response) => { + cachedVulnSourceConfig = config; + vulnSourceLoaded = true; + return response; + }); + }, + }; + + // Register customization service as Vue plugin property + vueApp.prototype.$customization = customizationService; + }, +}; diff --git a/src/router/index.js b/src/router/index.js index cf90116c4..988c870b9 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -40,6 +40,8 @@ const TaskScheduler = () => const Telemetry = () => import('@/views/administration/configuration/Telemetry'); const Search = () => import('@/views/administration/configuration/Search'); +const Customization = () => + import('@/views/administration/configuration/Customization'); const Experimental = () => import('@/views/administration/configuration/Experimental'); @@ -387,6 +389,17 @@ function configRoutes() { permission: 'SYSTEM_CONFIGURATION', }, }, + { + path: 'configuration/customization', + component: Customization, + meta: { + title: i18n.t('message.administration'), + i18n: 'message.administration', + sectionPath: '/admin', + sectionName: 'Admin', + permission: 'SYSTEM_CONFIGURATION', + }, + }, { path: 'configuration/welcomeMessage', component: WelcomeMessage, diff --git a/src/shared/api.json b/src/shared/api.json index b3b39f426..99c095e68 100644 --- a/src/shared/api.json +++ b/src/shared/api.json @@ -19,6 +19,7 @@ "URL_CALCULATOR_OWASP": "api/v1/calculator/owasp", "URL_COMPONENT": "api/v1/component", "URL_CONFIG_PROPERTY": "api/v1/configProperty", + "URL_CUSTOMIZATION": "api/v1/customization", "URL_CWE": "api/v1/cwe", "URL_DEPENDENCY_GRAPH": "api/v1/dependencyGraph", "URL_FINDING": "api/v1/finding", diff --git a/src/views/administration/AdminMenu.vue b/src/views/administration/AdminMenu.vue index eeea710df..e114d72de 100644 --- a/src/views/administration/AdminMenu.vue +++ b/src/views/administration/AdminMenu.vue @@ -121,6 +121,11 @@ export default { name: this.$t('message.search'), route: 'configuration/search', }, + { + component: 'Customization', + name: this.$t('admin.customization'), + route: 'configuration/customization', + }, { component: 'Experimental', name: this.$t('admin.experimental'), diff --git a/src/views/administration/configuration/Customization.vue b/src/views/administration/configuration/Customization.vue new file mode 100644 index 000000000..394b8892e --- /dev/null +++ b/src/views/administration/configuration/Customization.vue @@ -0,0 +1,18 @@ + + + diff --git a/src/views/administration/configuration/VulnerabilitySource.vue b/src/views/administration/configuration/VulnerabilitySource.vue new file mode 100644 index 000000000..abe09cd30 --- /dev/null +++ b/src/views/administration/configuration/VulnerabilitySource.vue @@ -0,0 +1,249 @@ + + + + + diff --git a/src/views/portfolio/vulnerabilities/Vulnerability.vue b/src/views/portfolio/vulnerabilities/Vulnerability.vue index eca98beac..2293c1c14 100644 --- a/src/views/portfolio/vulnerabilities/Vulnerability.vue +++ b/src/views/portfolio/vulnerabilities/Vulnerability.vue @@ -9,6 +9,16 @@
{{ sourceLabel }}
+
+ {{ + vulnerability.sourceOfDiscovery + }} +
{{ vulnerability.title }}
@@ -308,6 +318,12 @@ export default { }, title: '', computed: { + sourceOfDiscoveryBadgeEnabled() { + const config = this.$customization + ? this.$customization.getCachedVulnSourceConfig() + : null; + return !!(config && config.enabled === true); + }, vulnLabel() { return `${this.vulnId} (${this.source})`; }, diff --git a/src/views/portfolio/vulnerabilities/VulnerabilityCreateVulnerabilityModal.vue b/src/views/portfolio/vulnerabilities/VulnerabilityCreateVulnerabilityModal.vue index 025ae9273..497ea9816 100644 --- a/src/views/portfolio/vulnerabilities/VulnerabilityCreateVulnerabilityModal.vue +++ b/src/views/portfolio/vulnerabilities/VulnerabilityCreateVulnerabilityModal.vue @@ -77,6 +77,22 @@ /> + + + + + + + + +
@@ -1139,6 +1155,7 @@ export default { vulnerability: { vulnId: null, // This has to be null on initial load so that the vulnId gets populated. source: 'INTERNAL', + sourceOfDiscovery: null, affectedComponents: [], }, severities: [ @@ -1731,6 +1748,28 @@ export default { } return severity; }, + sourceOfDiscoveryEnabled() { + const config = this.$customization + ? this.$customization.getCachedVulnSourceConfig() + : null; + return !!(config && config.enabled === true); + }, + sourceOfDiscoveryOptions() { + const config = this.$customization + ? this.$customization.getCachedVulnSourceConfig() + : null; + if (config && Array.isArray(config.values)) { + const seen = new Set(); + return config.values + .filter((s) => { + if (seen.has(s.label)) return false; + seen.add(s.label); + return true; + }) + .map((s) => ({ value: s.label, text: s.label })); + } + return []; + }, computedOwaspRRSeverity() { let severity = 'UNASSIGNED'; if ( @@ -1782,6 +1821,7 @@ export default { cvssV4Vector: this.generateCvssV4Vector(), owaspRRVector: this.generateOwaspRRVector(), cwes: this.selectableCwes, + sourceOfDiscovery: this.vulnerability.sourceOfDiscovery || null, affectedComponents: this.vulnerability.affectedComponents, }) .then((response) => { @@ -2128,6 +2168,7 @@ export default { }; this.vulnerability = { vulnId: null, // This has to be null on initial load so that the vulnId gets populated. + sourceOfDiscovery: null, }; }, }, diff --git a/src/views/portfolio/vulnerabilities/VulnerabilityDetailsModal.vue b/src/views/portfolio/vulnerabilities/VulnerabilityDetailsModal.vue index 502c6d05c..d4a3d4f80 100644 --- a/src/views/portfolio/vulnerabilities/VulnerabilityDetailsModal.vue +++ b/src/views/portfolio/vulnerabilities/VulnerabilityDetailsModal.vue @@ -79,6 +79,23 @@ /> + + + + + + + + +
@@ -1854,6 +1871,28 @@ export default { }, }, computed: { + sourceOfDiscoveryEnabled() { + const config = this.$customization + ? this.$customization.getCachedVulnSourceConfig() + : null; + return !!(config && config.enabled === true); + }, + sourceOfDiscoveryOptions() { + const config = this.$customization + ? this.$customization.getCachedVulnSourceConfig() + : null; + if (config && Array.isArray(config.values)) { + const seen = new Set(); + return config.values + .filter((s) => { + if (seen.has(s.label)) return false; + seen.add(s.label); + return true; + }) + .map((s) => ({ value: s.label, text: s.label })); + } + return []; + }, columns() { let columns = [ { @@ -2053,6 +2092,7 @@ export default { cvssV4Vector: this.generateCvssV4Vector(), owaspRRVector: this.generateOwaspRRVector(), cwes: this.selectableCwes, + sourceOfDiscovery: this.vulnerability.sourceOfDiscovery || null, affectedComponents: this.vulnerability.affectedComponents, }) .then((response) => {