diff --git a/admin/webapp/websrc/app/common/services/containers.service.ts b/admin/webapp/websrc/app/common/services/containers.service.ts index 7ff29bfd..952cba75 100644 --- a/admin/webapp/websrc/app/common/services/containers.service.ts +++ b/admin/webapp/websrc/app/common/services/containers.service.ts @@ -209,6 +209,28 @@ export class ContainersService { return this.risksHttpService.getWorkloadsVulnerabilities(payload); } + private splitImageNameAndTag(imageRef?: string): { + image_name: string; + tags: string; + } { + if (!imageRef) { + return { image_name: '', tags: '' }; + } + + const [nameTagPart] = imageRef.split('@'); + const lastSlash = nameTagPart.lastIndexOf('/'); + const lastColon = nameTagPart.lastIndexOf(':'); + + if (lastColon > lastSlash) { + return { + image_name: nameTagPart.slice(0, lastColon), + tags: nameTagPart.slice(lastColon + 1), + }; + } + + return { image_name: nameTagPart, tags: '' }; + } + private makeWorkloadData(w: Workload | WorkloadBrief, isChild: boolean) { let workload = w as Workload; return { @@ -272,6 +294,7 @@ export class ContainersService { const header = [ 'image_name', 'tags', + 'digest', 'workload_name', 'namespace', 'host_name', @@ -294,8 +317,8 @@ export class ContainersService { ].join(','); const csvRows = vulnerabilities.map(vul => { - const image_name = vul.workload_image?.split(':')[0] || ''; - const tags = vul.workload_image?.split(':')[1] || ''; + const { image_name, tags } = this.splitImageNameAndTag(vul.workload_image); + const digest = vul.workload_image_digest || ''; const workload_name = vul.workload_name || ''; const namespace = vul.workload_domain || ''; const host_name = vul.host_name || vul.workload_host_name || ''; @@ -328,6 +351,7 @@ export class ContainersService { return [ image_name, tags, + digest, workload_name, namespace, host_name,