github.com/khulnasoft-lab/tunnel-db@v0.0.0-20231117205118-74e1113bd007/pkg/db/vulnerability.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  	vulnerabilityBucket = "vulnerability"
    14  )
    15  
    16  func (dbc Config) PutVulnerability(tx *bolt.Tx, cveID string, vuln types.Vulnerability) error {
    17  	if err := dbc.put(tx, []string{vulnerabilityBucket}, cveID, vuln); err != nil {
    18  		return xerrors.Errorf("failed to put severity: %w", err)
    19  	}
    20  	return nil
    21  }
    22  
    23  func (dbc Config) GetVulnerability(cveID string) (vuln types.Vulnerability, err error) {
    24  	err = db.View(func(tx *bolt.Tx) error {
    25  		bucket := tx.Bucket([]byte(vulnerabilityBucket))
    26  		value := bucket.Get([]byte(cveID))
    27  		if value == nil {
    28  			return xerrors.Errorf("no vulnerability details for %s", cveID)
    29  		}
    30  		if err = json.Unmarshal(value, &vuln); err != nil {
    31  			return xerrors.Errorf("failed to unmarshal JSON: %w", err)
    32  		}
    33  		return nil
    34  	})
    35  	if err != nil {
    36  		return types.Vulnerability{}, xerrors.Errorf("failed to get the vulnerability %q: %w", cveID, err)
    37  	}
    38  	return vuln, nil
    39  }