github.com/khulnasoft-lab/tunnel-db@v0.0.0-20231117205118-74e1113bd007/pkg/db/advisory.go (about) 1 package db 2 3 import ( 4 "encoding/json" 5 6 bolt "go.etcd.io/bbolt" 7 "golang.org/x/xerrors" 8 9 "github.com/khulnasoft-lab/tunnel-db/pkg/types" 10 ) 11 12 func (dbc Config) PutAdvisory(tx *bolt.Tx, bktNames []string, key string, advisory interface{}) error { 13 if err := dbc.put(tx, bktNames, key, advisory); err != nil { 14 return xerrors.Errorf("failed to put advisory: %w", err) 15 } 16 return nil 17 } 18 19 func (dbc Config) ForEachAdvisory(sources []string, pkgName string) (map[string]Value, error) { 20 return dbc.forEach(append(sources, pkgName)) 21 } 22 23 func (dbc Config) GetAdvisories(source, pkgName string) ([]types.Advisory, error) { 24 advisories, err := dbc.ForEachAdvisory([]string{source}, pkgName) 25 if err != nil { 26 return nil, xerrors.Errorf("advisory foreach error: %w", err) 27 } 28 if len(advisories) == 0 { 29 return nil, nil 30 } 31 32 var results []types.Advisory 33 for vulnID, v := range advisories { 34 var advisory types.Advisory 35 if err = json.Unmarshal(v.Content, &advisory); err != nil { 36 return nil, xerrors.Errorf("failed to unmarshal advisory JSON: %w", err) 37 } 38 39 advisory.VulnerabilityID = vulnID 40 if v.Source != (types.DataSource{}) { 41 advisory.DataSource = &types.DataSource{ 42 ID: v.Source.ID, 43 Name: v.Source.Name, 44 URL: v.Source.URL, 45 } 46 } 47 48 results = append(results, advisory) 49 } 50 return results, nil 51 }