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  }