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

Fill typed messages for pmd loading

This commit is contained in:
Sascha L. Teichmann 2023-05-12 11:05:05 +02:00
parent d9fe7488d3
commit dd15eea48e
2 changed files with 37 additions and 8 deletions

View file

@ -23,6 +23,25 @@ type ProviderMetadataLoader struct {
logging func(string, ...any)
}
// ProviderMetadataLoadMessageType is the type of the message.
type ProviderMetadataLoadMessageType int
const (
//JSONDecodingFailed indicates problems with JSON decoding
JSONDecodingFailed ProviderMetadataLoadMessageType = iota
// SchemaValidationFailed indicates a general problem with schema validation.
SchemaValidationFailed
// SchemaValidationFailedDetail is a failure detail in schema validation.
SchemaValidationFailedDetail
)
// ProviderMetadataLoadMessage is a message generated while loading
// a provider meta data file.
type ProviderMetadataLoadMessage struct {
Type ProviderMetadataLoadMessageType
Message string
}
// LoadedProviderMetadata represents a loaded provider metadata.
type LoadedProviderMetadata struct {
// URL is location where the document was found.
@ -32,7 +51,7 @@ type LoadedProviderMetadata struct {
// Hash is a SHA256 sum over the document.
Hash []byte
// Messages are the error message happened while loading.
Messages []string
Messages []ProviderMetadataLoadMessage
}
// Valid returns true if the loaded document is valid.

View file

@ -93,21 +93,31 @@ func loadProviderMetadataFromURL(
// We have loaded it the first time.
if err != nil {
result.Messages = []string{fmt.Sprintf("%s: Decoding JSON failed: %v", url, err)}
result.Messages = []ProviderMetadataLoadMessage{{
Type: JSONDecodingFailed,
Message: fmt.Sprintf("%s: Decoding JSON failed: %v", url, err),
}}
storeLoaded()
return &result
}
switch errors, err := ValidateProviderMetadata(doc); {
case err != nil:
result.Messages = []string{
fmt.Sprintf("%s: Validating against JSON schema failed: %v", url, err)}
result.Messages = []ProviderMetadataLoadMessage{{
Type: SchemaValidationFailed,
Message: fmt.Sprintf("%s: Validating against JSON schema failed: %v", url, err),
}}
case len(errors) > 0:
result.Messages = []string{
fmt.Sprintf("%s: Validating against JSON schema failed: %v", url, err)}
result.Messages = []ProviderMetadataLoadMessage{{
Type: SchemaValidationFailed,
Message: fmt.Sprintf("%s: Validating against JSON schema failed: %v", url, err),
}}
for _, msg := range errors {
result.Messages = append(result.Messages, strings.ReplaceAll(msg, `%`, `%%`))
result.Messages = append(result.Messages, ProviderMetadataLoadMessage{
Type: SchemaValidationFailedDetail,
Message: strings.ReplaceAll(msg, `%`, `%%`),
})
}
default:
// Only store in result if validation passed.
@ -193,7 +203,7 @@ func LoadProviderMetadataForDomain(
}
alreadyLogged[result] = url
for _, msg := range result.Messages {
logging(msg)
logging(msg.Message)
}
}