66 lines
1.5 KiB
Go
66 lines
1.5 KiB
Go
|
|
// Copyright 2023 The Go Authors. All rights reserved.
|
||
|
|
// Use of this source code is governed by a BSD-style
|
||
|
|
// license that can be found in the LICENSE file.
|
||
|
|
|
||
|
|
package govulncheck
|
||
|
|
|
||
|
|
import (
|
||
|
|
"encoding/json"
|
||
|
|
"io"
|
||
|
|
|
||
|
|
"golang.org/x/vuln/internal/osv"
|
||
|
|
)
|
||
|
|
|
||
|
|
// Handler handles messages to be presented in a vulnerability scan output
|
||
|
|
// stream.
|
||
|
|
type Handler interface {
|
||
|
|
// Config communicates introductory message to the user.
|
||
|
|
Config(config *Config) error
|
||
|
|
|
||
|
|
// SBOM shows information about what govulncheck is scanning.
|
||
|
|
SBOM(sbom *SBOM) error
|
||
|
|
|
||
|
|
// Progress is called to display a progress message.
|
||
|
|
Progress(progress *Progress) error
|
||
|
|
|
||
|
|
// OSV is invoked for each osv Entry in the stream.
|
||
|
|
OSV(entry *osv.Entry) error
|
||
|
|
|
||
|
|
// Finding is called for each vulnerability finding in the stream.
|
||
|
|
Finding(finding *Finding) error
|
||
|
|
}
|
||
|
|
|
||
|
|
// HandleJSON reads the json from the supplied stream and hands the decoded
|
||
|
|
// output to the handler.
|
||
|
|
func HandleJSON(from io.Reader, to Handler) error {
|
||
|
|
dec := json.NewDecoder(from)
|
||
|
|
for dec.More() {
|
||
|
|
msg := Message{}
|
||
|
|
// decode the next message in the stream
|
||
|
|
if err := dec.Decode(&msg); err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
// dispatch the message
|
||
|
|
var err error
|
||
|
|
if msg.Config != nil {
|
||
|
|
err = to.Config(msg.Config)
|
||
|
|
}
|
||
|
|
if msg.Progress != nil {
|
||
|
|
err = to.Progress(msg.Progress)
|
||
|
|
}
|
||
|
|
if msg.SBOM != nil {
|
||
|
|
err = to.SBOM(msg.SBOM)
|
||
|
|
}
|
||
|
|
if msg.OSV != nil {
|
||
|
|
err = to.OSV(msg.OSV)
|
||
|
|
}
|
||
|
|
if msg.Finding != nil {
|
||
|
|
err = to.Finding(msg.Finding)
|
||
|
|
}
|
||
|
|
if err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return nil
|
||
|
|
}
|