feat(euvd): link every CVE to its ENISA EUVD record

The EUVD link on the detail page only appeared when enrichment had
stored an euvd_id, which only happens for rows the EUVD KEV feed
covers. Every other CVE showed no EU record at all.

The EUVD resolves a CVE id to the same page as its own EUVD-ID
(/vulnerability/CVE-2026-68820 == /vulnerability/EUVD-2026-56468), so
the link needs no id mapping: use the EUVD-ID when we know it, the CVE
id otherwise. Label keeps the EUVD-ID in parentheses when present.
This commit is contained in:
2026-08-17 10:16:42 +02:00
parent 4daf28113e
commit 04d59d31e6
+17 -15
View File
@@ -757,21 +757,23 @@ export default function VulnerabilityDetailPage() {
>
Exploit-DB
</a>
{/* ENISA EUVD — the EU authoritative record. Only
with a known EUVD-ID: the id is not derivable
from the CVE, so without it there is nothing to
link to that would not be a guess. */}
{vuln.euvd_id && (
<a
href={`https://euvd.enisa.europa.eu/vulnerability/${vuln.euvd_id}`}
target="_blank"
rel="noopener noreferrer"
title={`ENISA EUVD record ${vuln.euvd_id}`}
className="inline-flex items-center gap-2 px-4 py-2 bg-indigo-50 text-indigo-700 rounded-lg hover:bg-indigo-100 transition-colors font-mono text-sm"
>
ENISA EUVD ({vuln.euvd_id})
</a>
)}
{/* ENISA EUVD — the EU authoritative record. The
EUVD resolves a CVE id to the same page as its
own EUVD-ID, so every CVE gets a link: the
EUVD-ID when enrichment knows it (only KEV rows
do), the CVE id otherwise. No mapping table
needed. */}
<a
href={`https://euvd.enisa.europa.eu/vulnerability/${vuln.euvd_id || vuln.cve_id}`}
target="_blank"
rel="noopener noreferrer"
title={vuln.euvd_id
? `ENISA EUVD record ${vuln.euvd_id}`
: `ENISA EUVD record for ${vuln.cve_id}`}
className="inline-flex items-center gap-2 px-4 py-2 bg-indigo-50 text-indigo-700 rounded-lg hover:bg-indigo-100 transition-colors font-mono text-sm"
>
ENISA EUVD{vuln.euvd_id ? ` (${vuln.euvd_id})` : ''}
</a>
{/* Always offered: the repo advisory search when the
product maps to a repo that publishes its own
(the only place those records exist), otherwise