//- //- Copyright 2023 highstreet technologies and others //- //- 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. //- extends layout block content h1= title p Date: #{date} h2 Images table(class='table table-striped table-hover') thead(class='thead-dark') tr th(scope=col, class='text-left') Name th(scope=col, class='text-right') Version th(scope=col, class='text-center') SBOM th(scope=col, class='text-right') # Files th(scope=col, class='text-right') # Packages th(scope=col, class='text-right') Created th(scope=col, class='text-center') VEX th(scope=col, class='text-right') # Components th(scope=col, class='text-right') # Vulnerabilities th(scope=col, class='text-right') # Critical th(scope=col, class='text-right') # High th(scope=col, class='text-right') # Medium th(scope=col, class='text-right') # Low th(scope=col, class='text-right') # Unknown th(scope=col, class='text-right') # None th(scope=col, class='text-center') Chart th(scope=col, class='text-right') Created tbody each image in images tr td(scope=col, class='text-left')= image.name td(scope=col, class='text-right')= image.version td(scope=col, class='text-center') a(href=image.sbom.url, title=image.sbom.url) link td(scope=col, class='text-right')= image.sbom.files td(scope=col, class='text-right')= image.sbom.packages td(scope=col, class='text-right')= image.sbom.created td(scope=col, class='text-center') a(href=image.vex.url,title=image.vex.url) link td(scope=col, class='text-right')= image.vex.components td(scope=col, class='text-right')= image.vex.vulnerabilities.count td(scope=col, class='text-right')= image.vex.vulnerabilities.critical td(scope=col, class='text-right')= image.vex.vulnerabilities.high td(scope=col, class='text-right')= image.vex.vulnerabilities.medium td(scope=col, class='text-right')= image.vex.vulnerabilities.low td(scope=col, class='text-right')= image.vex.vulnerabilities.unknown td(scope=col, class='text-right')= image.vex.vulnerabilities.none td(scope=col, class='text-center') svg( width=`${10 * image.vex.vulnerabilities.scale}`, height=`${10 * image.vex.vulnerabilities.scale}`, viewbox=`${-5 * image.vex.vulnerabilities.scale} ${-5 * image.vex.vulnerabilities.scale} ${10 * image.vex.vulnerabilities.scale} ${10 * image.vex.vulnerabilities.scale}`, transform=`scale( ${image.vex.vulnerabilities.scale} ) rotate(180 0 0)`) circle(cx='0', cy='0', r='5', fill='white', stroke='black', stroke-width='0') each slice, i in image.vex.vulnerabilities.slices path(d=`M0,0 L${0 + 5 * Math.cos(slice.startAngle)},${0 + 5 * Math.sin(slice.startAngle)} A5,5 0 ${slice.arc}, 1${0 + 5 * Math.cos(slice.endAngle)},${0 + 5 * Math.sin(slice.endAngle)} Z`, fill=slice.color) title= slice.name + ': ' + slice.count circle(cx='0', cy='0', r='2', fill='white', stroke='black', stroke-width='0') td(scope=col, class='text-right')= image.vex.created