github.com/khulnasoft-lab/tunnel-db@v0.0.0-20231117205118-74e1113bd007/pkg/db/vulnerability_detail.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 const ( 13 vulnerabilityDetailBucket = "vulnerability-detail" 14 ) 15 16 func (dbc Config) PutVulnerabilityDetail(tx *bolt.Tx, cveID string, source types.SourceID, vuln types.VulnerabilityDetail) error { 17 if err := dbc.put(tx, []string{vulnerabilityDetailBucket, cveID}, string(source), vuln); err != nil { 18 return xerrors.Errorf("failed to put vulnerability detail: %w", err) 19 } 20 return nil 21 } 22 23 func (dbc Config) GetVulnerabilityDetail(cveID string) (map[types.SourceID]types.VulnerabilityDetail, error) { 24 values, err := dbc.forEach([]string{vulnerabilityDetailBucket, cveID}) 25 if err != nil { 26 return nil, xerrors.Errorf("error in NVD get: %w", err) 27 } 28 if len(values) == 0 { 29 return nil, nil 30 } 31 32 vulns := map[types.SourceID]types.VulnerabilityDetail{} 33 for source, value := range values { 34 var vuln types.VulnerabilityDetail 35 if err = json.Unmarshal(value.Content, &vuln); err != nil { 36 return nil, xerrors.Errorf("failed to unmarshal Vulnerability JSON: %w", err) 37 } 38 vulns[types.SourceID(source)] = vuln 39 } 40 return vulns, nil 41 } 42 43 func (dbc Config) DeleteVulnerabilityDetailBucket() error { 44 return dbc.deleteBucket(vulnerabilityDetailBucket) 45 }