1212from vulnerabilities .data_source import GitDataSource
1313
1414
15-
1615class rubyDataSource (GitDataSource ):
1716
1817 def __enter__ (self ):
@@ -23,24 +22,22 @@ def __enter__(self):
2322 recursive = True , file_ext = 'yml' , subdir = './gems' )
2423
2524 self .pkg_manager_api = rubyAPI ()
25+
2626 def updated_advisories (self ) -> Set [Advisory ]:
27- print ("called" )
2827 files = self ._updated_files .union (self ._added_files )
2928 advisories = []
30- for f in files :
31- if self ._process_file (f ) :
29+ for f in files :
30+ if self ._process_file (f ):
3231 advisories .append (self ._process_file (f ))
33- print (advisories [- 1 ])
3432 return self .batch_advisories (advisories )
35-
3633
3734 def _process_file (self , path ) -> List [Advisory ]:
3835 advisories = []
3936
4037 with open (path ) as f :
4138 record = yaml .safe_load (f )
4239 package_name = record .get (
43- 'gem' )
40+ 'gem' )
4441
4542 if not package_name :
4643 return
@@ -49,78 +46,69 @@ def _process_file(self, path) -> List[Advisory]:
4946 cve_id = 'CVE-{}' .format (record ['cve' ])
5047 else :
5148 return
52-
53- patched_version_ranges = record .get ('patched_versions' , [])
49+
50+ patched_version_ranges = record .get ('patched_versions' , [])
5451 # this case happens when the advisory contain 'patched_versions' field
5552 # and it has value None(i.e it is empty :( )
5653 if not patched_version_ranges :
5754 return
58- affected_versions = self .pkg_manager_api .get_all_version_of_package (package_name )
55+ affected_versions = self .pkg_manager_api .get_all_version_of_package (
56+ package_name )
5957 patched_versions = set ()
60- for version_range in patched_version_ranges :
58+ for version_range in patched_version_ranges :
6159 try :
6260 spec = RangeSpecifier (version_range )
63- patched_versions .update (set (filter (lambda x : x in spec ,affected_versions )))
61+ patched_versions .update (
62+ set (filter (lambda x : x in spec , affected_versions )))
6463 affected_versions -= patched_versions
6564 if not affected_versions :
66- break
65+ break
6766 except InvalidSpecifier :
6867 continue
69-
70-
68+
7169 impacted_purls = {
7270 PackageURL (
7371 name = package_name ,
7472 type = 'gem' ,
7573 version = version ,
76- ) for version in affected_versions }
77-
74+ ) for version in affected_versions }
75+
7876 resolved_purls = {
7977 PackageURL (
8078 name = package_name ,
8179 type = 'gem' ,
8280 version = version ,
83- ) for version in patched_versions }
84-
81+ ) for version in patched_versions }
82+
8583 return Advisory (
86- summary = record .get ('description' ,'' ),
84+ summary = record .get ('description' , '' ),
8785 impacted_package_urls = impacted_purls ,
8886 resolved_package_urls = resolved_purls ,
89- reference_urls = record .get ('url' ,'' ),
87+ reference_urls = record .get ('url' , '' ),
9088 cve_id = cve_id
9189 )
9290 return advisories
9391
9492
95- class rubyAPI :
93+ class rubyAPI :
9694
9795 base_endpt = 'https://rubygems.org/api/v1/versions/{}.json'
96+
9897 def __init__ (self ):
99- self .client = requests .Session ()
100-
98+ self .client = requests .Session ()
99+
101100 def call_api (self , pkg_name ) -> List :
102101 end_pt = self .base_endpt .format (pkg_name )
103102 try :
104103 resp = self .client .get (end_pt )
105104 return resp .json ()
106- #this covers 404 alright
105+ # this covers 404 alright
107106 except JSONDecodeError :
108107 return []
109-
110-
108+
111109 def get_all_version_of_package (self , pkg_name ) -> Set [str ]:
112110 all_versions = set ()
113111 json_resp = self .call_api (pkg_name )
114112 for release in json_resp :
115113 all_versions .add (release ['number' ])
116114 return all_versions
117-
118-
119-
120-
121-
122-
123-
124-
125-
126-
0 commit comments