3434from vulnerabilities .data_source import Advisory
3535from vulnerabilities .data_source import Reference
3636
37+
3738class ElixirSecurityDataSource (GitDataSource ):
3839 def __enter__ (self ):
3940 super (ElixirSecurityDataSource , self ).__enter__ ()
4041
4142 if not getattr (self , "_added_files" , None ):
4243 self ._added_files , self ._updated_files = self .file_changes (
43- recursive = True , file_ext = "yml" ,subdir = "./packages"
44+ recursive = True , file_ext = "yml" , subdir = "./packages"
4445 )
4546
46-
4747 def updated_advisories (self ) -> Set [Advisory ]:
4848 files = self ._updated_files
4949 advisories = []
@@ -62,61 +62,67 @@ def added_advisories(self) -> Set[Advisory]:
6262 advisories .append (processed_data )
6363 return self .batch_advisories (advisories )
6464
65- @staticmethod
65+ @staticmethod
6666 def generate_all_versions_list (pkg_name ):
6767 resp = requests .get (f"https://hex.pm/api/packages/{ pkg_name } " )
6868 resp = resp .content
6969 json_resp = json .loads (resp )
7070 versions_list = []
71- for release in json_resp [' releases' ]:
72- versions_list .append (release [' version' ])
71+ for release in json_resp [" releases" ]:
72+ versions_list .append (release [" version" ])
7373 return versions_list
7474
75-
76- def get_pkg_from_range (self ,versions_list ,pkg_name ):
75+ def get_pkg_from_range (self , versions_list , pkg_name ):
7776 pkg_versions = []
7877 all_versions_list = self .generate_all_versions_list (pkg_name )
7978 if versions_list is None :
8079 return
8180 for version in versions_list :
82- if re .match (' ^>=' , version ):
81+ if re .match (" ^>=" , version ):
8382 index = all_versions_list .index (version [3 :])
84- pkg_versions = pkg_versions + all_versions_list [0 :index + 1 ]
85- elif re .match ('^>' , version ):
83+ pkg_versions = pkg_versions + all_versions_list [0 : index + 1 ]
84+ elif re .match ("^>" , version ):
8685 index = all_versions_list .index (version [2 :])
8786 pkg_versions = pkg_versions + all_versions_list [0 :index ]
88- elif re .match ('^<' , version ):
87+ elif re .match ("^<" , version ):
8988 index = all_versions_list .index (version [2 :])
90- pkg_versions = pkg_versions + all_versions_list [index + 1 : - 1 ]
91- else :
89+ pkg_versions = pkg_versions + all_versions_list [index + 1 : - 1 ]
90+ else :
9291 pkg_versions .append (version [3 :])
9392 return pkg_versions
94-
95-
96- def process_file (self ,path ):
93+
94+ def process_file (self , path ):
9795 with open (path ) as f :
9896 yaml_file = yaml .safe_load (f )
99- pkg_name = yaml_file ['package' ]
100- safe_pkg_versions = []
101- if yaml_file .get ('unaffected_versions' ):
102- safe_pkg_versions = self .get_pkg_from_range (yaml_file ['patched_versions' ]+ yaml_file ['unaffected_versions' ],pkg_name )
97+ pkg_name = yaml_file ["package" ]
98+ safe_pkg_versions = []
99+ if yaml_file .get ("unaffected_versions" ):
100+ safe_pkg_versions = self .get_pkg_from_range (
101+ yaml_file ["patched_versions" ] + yaml_file ["unaffected_versions" ],
102+ pkg_name ,
103+ )
103104 else :
104- safe_pkg_versions = self .get_pkg_from_range (yaml_file ['patched_versions' ],pkg_name )
105- cve_id = yaml_file ['cve' ]
105+ safe_pkg_versions = self .get_pkg_from_range (
106+ yaml_file ["patched_versions" ], pkg_name
107+ )
108+ cve_id = yaml_file ["cve" ]
106109 safe_purls = []
107110 if safe_pkg_versions is not None :
108- safe_purls = { PackageURL (name = pkg_name ,
109- type = 'hex' ,
110- version = version )
111- for version in safe_pkg_versions }
112-
113- vuln_reference = [Reference (
114- url = yaml_file ['link' ],
115- )]
111+ safe_purls = {
112+ PackageURL (name = pkg_name , type = "hex" , version = version )
113+ for version in safe_pkg_versions
114+ }
115+
116+ vuln_reference = [
117+ Reference (
118+ url = yaml_file ["link" ],
119+ )
120+ ]
116121
117122 return Advisory (
118- summary = yaml_file [' description' ],
123+ summary = yaml_file [" description" ],
119124 impacted_package_urls = [],
120125 resolved_package_urls = safe_purls ,
121126 cve_id = cve_id ,
122- vuln_references = vuln_reference )
127+ vuln_references = vuln_reference ,
128+ )
0 commit comments