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 }