github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/internal/runners/manifest/vulnerabilities.go (about)

     1  package manifest
     2  
     3  import (
     4  	"fmt"
     5  	"strconv"
     6  	"strings"
     7  
     8  	"github.com/ActiveState/cli/internal/locale"
     9  	"github.com/ActiveState/cli/pkg/platform/api/vulnerabilities/model"
    10  )
    11  
    12  type requirementVulnerabilities struct {
    13  	Count         map[string]int `json:"count,omitempty"`
    14  	authenticated bool
    15  }
    16  
    17  func (v *requirementVulnerabilities) String() string {
    18  	if v != nil && !v.authenticated {
    19  		return locale.Tl("manifest_vulnerability_no_auth", "[DISABLED]Authenticate to view[/RESET]")
    20  	}
    21  
    22  	if v == nil || v.Count == nil {
    23  		return locale.Tl("manifest_vulnerability_none", "[DISABLED]None detected[/RESET]")
    24  	}
    25  
    26  	var report []string
    27  	severities := []string{
    28  		model.SeverityCritical,
    29  		model.SeverityHigh,
    30  		model.SeverityMedium,
    31  		model.SeverityLow,
    32  	}
    33  
    34  	for _, severity := range severities {
    35  		count, ok := v.Count[severity]
    36  		if !ok || count == 0 {
    37  			continue
    38  		}
    39  
    40  		report = append(
    41  			report,
    42  			locale.Tr(fmt.Sprintf("vulnerability_%s", severity), strconv.Itoa(count)),
    43  		)
    44  	}
    45  
    46  	return strings.Join(report, ", ")
    47  }
    48  
    49  type vulnerabilities map[string]*requirementVulnerabilities
    50  
    51  func (v vulnerabilities) getVulnerability(name, namespace string) *requirementVulnerabilities {
    52  	return v[fmt.Sprintf("%s/%s", namespace, name)]
    53  }
    54  
    55  func (v vulnerabilities) addVulnerability(name, namespace string, vulns *requirementVulnerabilities) {
    56  	v[fmt.Sprintf("%s/%s", namespace, name)] = vulns
    57  }