@@ -55,17 +55,39 @@ func osvEntryToMaliciousPackageTransformer(entry *dtos.OSV) (models.MaliciousPac
5555 return pkg , components
5656}
5757
58- func gobOSVToVulnAndMalFilterTransformer (ctx context.Context , lastImportTime time.Time , existing map [int64 ][]int64 ) func ([]OSVEntry ) (vulndbRows , malRows ) {
58+ func gobOSVToMalFilterTransformer (lastImportTime time.Time ) func ([]OSVEntry ) malRows {
59+ return func (elements []OSVEntry ) malRows {
60+ malPkgs := make ([]models.MaliciousPackage , 0 )
61+ malComps := make ([]models.MaliciousAffectedComponent , 0 )
62+
63+ for i := range elements {
64+ if ! lastImportTime .IsZero () && ! elements [i ].ModifiedTimestamp .After (lastImportTime ) {
65+ continue
66+ }
67+
68+ // check if malicious package or vulnerability
69+ if strings .HasPrefix (elements [i ].OSV .ID , "MAL-" ) {
70+ pkg , comps := osvEntryToMaliciousPackageTransformer (elements [i ].OSV )
71+ malPkgs = append (malPkgs , pkg )
72+ malComps = append (malComps , comps ... )
73+ continue
74+ }
75+ }
76+ return malRows {
77+ pkgs : malPkgs ,
78+ comps : malComps ,
79+ }
80+ }
81+ }
82+ func gobOSVToVulnFilterTransformer (lastImportTime time.Time , existing map [int64 ][]int64 ) func ([]OSVEntry ) vulndbRows {
5983 if existing == nil {
6084 existing = make (map [int64 ][]int64 )
6185 }
62- return func (elements []OSVEntry ) ( vulndbRows , malRows ) {
86+ return func (elements []OSVEntry ) vulndbRows {
6387 cves := make ([]models.CVE , 0 , len (elements ))
6488 cveRelationships := make ([]models.CVERelationship , 0 , len (elements )* 2 )
6589 affectedComponents := make ([]models.AffectedComponent , 0 , len (elements )* 12 )
6690 cveAffectedComponents := make ([]cveAffectedComponentRow , 0 , len (elements )* 55 )
67- malPkgs := make ([]models.MaliciousPackage , 0 )
68- malComps := make ([]models.MaliciousAffectedComponent , 0 )
6991
7092 for i := range elements {
7193 if ! lastImportTime .IsZero () && ! elements [i ].ModifiedTimestamp .After (lastImportTime ) {
@@ -74,9 +96,6 @@ func gobOSVToVulnAndMalFilterTransformer(ctx context.Context, lastImportTime tim
7496
7597 // check if malicious package or vulnerability
7698 if strings .HasPrefix (elements [i ].OSV .ID , "MAL-" ) {
77- pkg , comps := osvEntryToMaliciousPackageTransformer (elements [i ].OSV )
78- malPkgs = append (malPkgs , pkg )
79- malComps = append (malComps , comps ... )
8099 continue
81100 }
82101 relationships := transformer .OSVToCVERelationships (elements [i ].OSV )
@@ -107,28 +126,33 @@ func gobOSVToVulnAndMalFilterTransformer(ctx context.Context, lastImportTime tim
107126 }
108127 }
109128 return vulndbRows {
110- CVEs : cves ,
111- CVERelationships : cveRelationships ,
112- AffectedComponents : affectedComponents ,
113- CVEAffectedComponents : cveAffectedComponents ,
114- }, malRows {
115- pkgs : malPkgs ,
116- comps : malComps ,
117- }
129+ CVEs : cves ,
130+ CVERelationships : cveRelationships ,
131+ AffectedComponents : affectedComponents ,
132+ CVEAffectedComponents : cveAffectedComponents ,
133+ }
118134 }
119135}
120136
121- func gobOSVEntryStreamer (ctx context.Context , lastImportTime time.Time , existing map [int64 ][]int64 , vulndbChan chan <- vulndbRows , malPkgsChan chan <- malRows ) func ([]OSVEntry ) error {
122- transform := gobOSVToVulnAndMalFilterTransformer ( ctx , lastImportTime , existing )
137+ func gobOSVStreamer (ctx context.Context , lastImportTime time.Time , existing map [int64 ][]int64 , vulndbChan chan <- vulndbRows ) func ([]OSVEntry ) error {
138+ transform := gobOSVToVulnFilterTransformer ( lastImportTime , existing )
123139 return func (elements []OSVEntry ) error {
124- vulndbRows , malRows := transform (elements )
140+ vulndbRows := transform (elements )
125141 select {
126- case malPkgsChan <- malRows :
142+ case vulndbChan <- vulndbRows :
127143 case <- ctx .Done ():
128144 return ctx .Err ()
129145 }
146+ return nil
147+ }
148+ }
149+
150+ func gobOSVMalPkgStreamer (ctx context.Context , lastImportTime time.Time , malPkgsChan chan <- malRows ) func ([]OSVEntry ) error {
151+ transform := gobOSVToMalFilterTransformer (lastImportTime )
152+ return func (elements []OSVEntry ) error {
153+ malRows := transform (elements )
130154 select {
131- case vulndbChan <- vulndbRows :
155+ case malPkgsChan <- malRows :
132156 case <- ctx .Done ():
133157 return ctx .Err ()
134158 }
0 commit comments