func getCVSSValue[T comparable]()

in internal/vulnerability/events_creator.go [416:447]


func getCVSSValue[T comparable](vul trivyTypes.DetectedVulnerability, value func(cvss dbTypes.CVSS) T, zeroVal T) T {
	// Get all the sources
	sources := slices.Collect(maps.Keys(vul.CVSS))
	if len(sources) == 0 {
		return zeroVal
	}

	// Detect the data source
	var source dbTypes.SourceID
	if vul.DataSource != nil {
		source = vul.DataSource.ID
	}

	// Attempt to pull detected data source
	if cvss, ok := vul.CVSS[source]; ok {
		return value(cvss)
	}

	// Try NVD as a fallback if it exists
	if cvss, ok := vul.CVSS[trivyVul.NVD]; ok {
		return value(cvss)
	}

	// Attempt to pull any other data source
	for _, s := range sources {
		if cvss, ok := vul.CVSS[s]; ok {
			return value(cvss)
		}
	}

	return zeroVal
}