1
0
Fork 0
mirror of https://github.com/gocsaf/csaf.git synced 2025-12-22 11:55:40 +01:00

Do not silence errors when fetching a pmd

This commit is contained in:
Sascha L. Teichmann 2022-07-26 12:06:14 +02:00
parent 490fe4a589
commit bed44e5e87

View file

@ -34,18 +34,38 @@ type LoadedProviderMetadata struct {
Messages []string Messages []string
} }
// defaultLogging generates a logging function if given is nil.
func defaultLogging(
logging func(format string, args ...interface{}),
prefix, suffix string,
) func(format string, args ...interface{}) {
if logging != nil {
return logging
}
return func(format string, args ...interface{}) {
log.Printf(prefix+format+suffix, args...)
}
}
// LoadProviderMetadataFromURL loads a provider metadata from a given URL. // LoadProviderMetadataFromURL loads a provider metadata from a given URL.
// Returns nil if the document was not found. // Returns nil if the document was not found.
func LoadProviderMetadataFromURL( func LoadProviderMetadataFromURL(
client util.Client, client util.Client,
url string, url string,
already map[string]*LoadedProviderMetadata, already map[string]*LoadedProviderMetadata,
logging func(format string, args ...interface{}),
) *LoadedProviderMetadata { ) *LoadedProviderMetadata {
res, err := client.Get(url) logging = defaultLogging(logging, "LoadProviderMetadataFromURL: ", "\n")
if err != nil || res.StatusCode != http.StatusOK { res, err := client.Get(url)
// Treat as not found. if err != nil {
logging("Fetching %q failed: %v", url, err)
return nil
}
if res.StatusCode != http.StatusOK {
logging("Fetching %q failed: %s (%d)", url, res.Status, res.StatusCode)
return nil return nil
} }
@ -112,12 +132,18 @@ func LoadProviderMetadatasFromSecurity(
client util.Client, client util.Client,
path string, path string,
already map[string]*LoadedProviderMetadata, already map[string]*LoadedProviderMetadata,
logging func(format string, args ...interface{}),
) []*LoadedProviderMetadata { ) []*LoadedProviderMetadata {
res, err := client.Get(path) logging = defaultLogging(logging, "LoadProviderMetadataFromSecurity: ", "\n")
if err != nil || res.StatusCode != http.StatusOK { res, err := client.Get(path)
// Treat as not found. if err != nil {
logging("Fetching %q failed: %v", path, err)
return nil
}
if res.StatusCode != http.StatusOK {
logging("Fetching %q failed: %s (%d)", path, res.Status, res.StatusCode)
return nil return nil
} }
@ -136,7 +162,9 @@ func LoadProviderMetadatasFromSecurity(
// Load the URLs // Load the URLs
for _, url := range urls { for _, url := range urls {
if result := LoadProviderMetadataFromURL(client, url, already); result != nil { if result := LoadProviderMetadataFromURL(
client, url, already, logging,
); result != nil {
results = append(results, result) results = append(results, result)
} }
} }
@ -155,11 +183,7 @@ func LoadProviderMetadataForDomain(
logging func(format string, args ...interface{}), logging func(format string, args ...interface{}),
) *LoadedProviderMetadata { ) *LoadedProviderMetadata {
if logging == nil { logging = defaultLogging(logging, "LoadProviderMetadataForDomain: ", "\n")
logging = func(format string, args ...interface{}) {
log.Printf("LoadProviderMetadataForDomain: "+format+"\n", args...)
}
}
// As many URLs may lead to the same content only log once per content. // As many URLs may lead to the same content only log once per content.
alreadyLogged := map[*LoadedProviderMetadata]string{} alreadyLogged := map[*LoadedProviderMetadata]string{}
@ -184,7 +208,8 @@ func LoadProviderMetadataForDomain(
// check direct path // check direct path
if strings.HasPrefix(domain, "https://") { if strings.HasPrefix(domain, "https://") {
result := LoadProviderMetadataFromURL(client, domain, already) result := LoadProviderMetadataFromURL(
client, domain, already, logging)
lg(result, domain) lg(result, domain)
return result return result
} }
@ -194,7 +219,8 @@ func LoadProviderMetadataForDomain(
// First try well-know path // First try well-know path
wellknownURL := "https://" + domain + "/.well-known/csaf/provider-metadata.json" wellknownURL := "https://" + domain + "/.well-known/csaf/provider-metadata.json"
wellknownResult := LoadProviderMetadataFromURL(client, wellknownURL, already) wellknownResult := LoadProviderMetadataFromURL(
client, wellknownURL, already, logging)
lg(wellknownResult, wellknownURL) lg(wellknownResult, wellknownURL)
// We have a candidate. // We have a candidate.
@ -204,7 +230,8 @@ func LoadProviderMetadataForDomain(
// Next load the PMDs from security.txt // Next load the PMDs from security.txt
secURL := "https://" + domain + "/.well-known/security.txt" secURL := "https://" + domain + "/.well-known/security.txt"
secResults := LoadProviderMetadatasFromSecurity(client, secURL, already) secResults := LoadProviderMetadatasFromSecurity(
client, secURL, already, logging)
if secResults == nil { if secResults == nil {
logging("%s failed to load.", secURL) logging("%s failed to load.", secURL)
@ -259,7 +286,8 @@ func LoadProviderMetadataForDomain(
// Last resort: fall back to DNS. // Last resort: fall back to DNS.
dnsURL := "https://csaf.data.security." + domain dnsURL := "https://csaf.data.security." + domain
dnsResult := LoadProviderMetadataFromURL(client, dnsURL, already) dnsResult := LoadProviderMetadataFromURL(
client, dnsURL, already, logging)
lg(dnsResult, dnsURL) lg(dnsResult, dnsURL)
return dnsResult return dnsResult
} }