mirror of
https://github.com/ysoftdevs/odc-analyzer.git
synced 2026-04-10 02:53:47 +02:00
Another set of UI improvements
This commit is contained in:
@@ -203,6 +203,13 @@ h3.library-identification{
|
|||||||
.dependencies-table .identifiers .explained{
|
.dependencies-table .identifiers .explained{
|
||||||
border-bottom: none;
|
border-bottom: none;
|
||||||
}
|
}
|
||||||
|
.dependencies-table .vulnerabilities-details > li{
|
||||||
|
display: block;
|
||||||
|
list-style-type: none;
|
||||||
|
padding-left: 0;
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
.expandable:before{
|
.expandable:before{
|
||||||
font-family: 'Glyphicons Halflings';
|
font-family: 'Glyphicons Halflings';
|
||||||
content: "\e114";
|
content: "\e114";
|
||||||
@@ -212,4 +219,19 @@ h3.library-identification{
|
|||||||
}
|
}
|
||||||
.expandable.expandable-right.collapsed:before{
|
.expandable.expandable-right.collapsed:before{
|
||||||
content: "\e079";
|
content: "\e079";
|
||||||
}
|
}
|
||||||
|
.cvss .tooltip-inner table {
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
.cvss .tooltip-inner {
|
||||||
|
max-width: 250px;
|
||||||
|
width: 250px;
|
||||||
|
}
|
||||||
|
.vulnerability-expandable{
|
||||||
|
margin-left: 15px;
|
||||||
|
}
|
||||||
|
.vulnerability-expandable .more{
|
||||||
|
margin: 10px;
|
||||||
|
}
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ final case class TeamFilter(team: Team) extends Filter{
|
|||||||
object NoFilter extends Filter{
|
object NoFilter extends Filter{
|
||||||
override def filters: Boolean = false
|
override def filters: Boolean = false
|
||||||
override val descriptionHtml: Html = views.html.filters.all()
|
override val descriptionHtml: Html = views.html.filters.all()
|
||||||
override def descriptionText: String = "no filter selected"
|
override def descriptionText: String = "all projects"
|
||||||
override def subReports(r: Result): Option[Result] = Some(r)
|
override def subReports(r: Result): Option[Result] = Some(r)
|
||||||
override def selector: Option[String] = None
|
override def selector: Option[String] = None
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<p>
|
<p>
|
||||||
@for(line <- descriptionParagraphLines) {
|
@for(line <- descriptionParagraphLines) {
|
||||||
@line<br>
|
@line<br>
|
||||||
}
|
}
|
||||||
</p>
|
</p>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
@@ -65,14 +65,13 @@
|
|||||||
<h4 class="expandable" data-toggle="collapse" data-target="#@depPrefix-projects-details">Affected projects (@dep.projects.size)</h4>
|
<h4 class="expandable" data-toggle="collapse" data-target="#@depPrefix-projects-details">Affected projects (@dep.projects.size)</h4>
|
||||||
<ul id="@depPrefix-projects-details" class="collapse in">@for(p <- dep.projects.toIndexedSeq.sorted){<li>@friendlyProjectName(p)</li>}</ul>
|
<ul id="@depPrefix-projects-details" class="collapse in">@for(p <- dep.projects.toIndexedSeq.sorted){<li>@friendlyProjectName(p)</li>}</ul>
|
||||||
<h4 class="expandable" data-toggle="collapse" data-target="#@depPrefix-vulnerabilities-details">Vulnerabilities (@dep.vulnerabilities.size)</h4>
|
<h4 class="expandable" data-toggle="collapse" data-target="#@depPrefix-vulnerabilities-details">Vulnerabilities (@dep.vulnerabilities.size)</h4>
|
||||||
<ul id="@depPrefix-vulnerabilities-details" class="collapse in">
|
<ul id="@depPrefix-vulnerabilities-details" class="collapse in vulnerabilities-details">
|
||||||
@for(vuln <- dep.vulnerabilities.toSeq.sortBy(_.cvssScore.map(-_)); vulnPrefix = s"$depPrefix-vulnerabilities-details-${vuln.name}"){
|
@for(vuln <- dep.vulnerabilities.toSeq.sortBy(_.cvssScore.map(-_)); vulnPrefix = s"$depPrefix-vulnerabilities-details-${vuln.name}"){
|
||||||
<li>
|
<li>
|
||||||
<h5 data-toggle="collapse" data-target="#@vulnPrefix-details">@vuln.name <a href="@routes.Statistics.vulnerability(vuln.name, selectorOption)"><span class="glyphicon glyphicon-log-out"></span></a></h5>
|
<h5 data-toggle="collapse" class="expandable collapsed" data-target="#@vulnPrefix-details">@vuln.name <a href="@routes.Statistics.vulnerability(vuln.name, selectorOption)" target="_blank" onclick="event.stopPropagation();"><span class="glyphicon glyphicon-new-window"></span></a></h5>
|
||||||
<div id="@vulnPrefix-details" class="collapse">
|
<div id="@vulnPrefix-details" class="collapse vulnerability-expandable">
|
||||||
@vulnerability("h6", depPrefix, vuln)
|
@vulnerability("h6", depPrefix+"-"+vuln.name, vuln)
|
||||||
<h6 data-toggle="collapse" data-target="#@(s"$depPrefix-suppression-cve-${vuln.name}")">CVE suppression</h6>
|
<p><a class="btn btn-primary more" target="_blank" href="@routes.Statistics.vulnerability(vuln.name, selectorOption)">Full details about this vulnerability</a></p>
|
||||||
<div id="@(s"$depPrefix-suppression-cve-${vuln.name}")" class="collapse">@SuppressionXml.forVuln(dep, vuln)</div>
|
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
@(idPrefix: String)(ht: String)(name: String, description: String)(content: Html)
|
@(idPrefix: String)(ht: String)(name: String, description: String)(content: Html)
|
||||||
<@ht id="@idPrefix-@name-header" data-toggle="collapse" data-target="#@idPrefix-@name-details">@description</@ht>
|
<@ht id="@idPrefix-@name-header" data-toggle="collapse" data-target="#@idPrefix-@name-details" class="expandable">@description</@ht>
|
||||||
<div id="@idPrefix-@name-details" class="collapse in">@content</div>
|
<div id="@idPrefix-@name-details" class="collapse in">@content</div>
|
||||||
|
|||||||
@@ -7,18 +7,27 @@
|
|||||||
</tr>
|
</tr>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@severityTable(vuln: Vulnerability) = {
|
||||||
|
<p>Rating of severity on scale 0–10. The total score depends on following subscores:</p>
|
||||||
|
<table class="vuln-details">
|
||||||
|
@row("authentication")(vuln.cvss.authenticationr)
|
||||||
|
@row("availability impact")(vuln.cvss.availabilityImpact)
|
||||||
|
@row("access vector")(vuln.cvss.accessVector)
|
||||||
|
@row("integrity impact")(vuln.cvss.integrityImpact)
|
||||||
|
@row("access complexity")(vuln.cvss.accessComplexity)
|
||||||
|
@row("confidential impact")(vuln.cvss.confidentialImpact)
|
||||||
|
@row("total score")(vuln.cvss.score)
|
||||||
|
</table>
|
||||||
|
}
|
||||||
@section = @{views.html.genericSection(idPrefix)(ht) _}
|
@section = @{views.html.genericSection(idPrefix)(ht) _}
|
||||||
<table class="vuln-details">
|
<p class="cvss"><label>CVSS vulnerability score:</label> <span class="explained" title="@severityTable(vuln).toString()" onmouseover="$(this).tooltip({html: true, placement: 'right'}).tooltip('show')">
|
||||||
@row("CWE")(vuln.cweOption)
|
@vuln.cvss.score match{
|
||||||
@row("CVSS: score")(vuln.cvss.score)
|
case None => {<i>unknown</i>}
|
||||||
@row("CVSS: authenticationr")(vuln.cvss.authenticationr)
|
case Some(score) => {<b>@score</b>}
|
||||||
@row("CVSS: availability impact")(vuln.cvss.availabilityImpact)
|
}
|
||||||
@row("CVSS: access vector")(vuln.cvss.accessVector)
|
</span></p>
|
||||||
@row("CVSS: integrity impact")(vuln.cvss.integrityImpact)
|
@vuln.cweOption.map{cwe =><p><label>Category:</label> <span class="explained" title="Vulnerability category according to Common Weakness Enumeration" onmouseover="$(this).tooltip({placement: 'right'}).tooltip('show')"><b>@cwe</b></span></p>}
|
||||||
@row("CVSS: access complexity")(vuln.cvss.accessComplexity)
|
<label>Description:</label> @vuln.description
|
||||||
@row("CVSS: confidential impact")(vuln.cvss.confidentialImpact)
|
|
||||||
</table>
|
|
||||||
@vuln.description
|
|
||||||
@section("vuln-sw", "Vulnerable software"){
|
@section("vuln-sw", "Vulnerable software"){
|
||||||
<ul id="@idPrefix-details">
|
<ul id="@idPrefix-details">
|
||||||
@for(sw <- vuln.vulnerableSoftware){
|
@for(sw <- vuln.vulnerableSoftware){
|
||||||
|
|||||||
Reference in New Issue
Block a user