1212from typing import Iterable
1313
1414from dateutil .parser import parse
15- from django .db .models import QuerySet
1615from packageurl import PackageURL
1716from pytz import UTC
1817from univers .version_range import GemVersionRange
19- from univers .versions import RubygemsVersion
2018
2119from vulnerabilities .importer import AdvisoryData
2220from vulnerabilities .importer import AffectedPackage
23- from vulnerabilities .importer import GitImporter
21+ from vulnerabilities .importer import Importer
2422from vulnerabilities .importer import Reference
2523from vulnerabilities .importer import VulnerabilitySeverity
26- from vulnerabilities .improver import Improver
27- from vulnerabilities .improver import Inference
28- from vulnerabilities .improvers .valid_versions import ValidVersionImprover
29- from vulnerabilities .models import Advisory
30- from vulnerabilities .package_managers import RubyVersionAPI
3124from vulnerabilities .severity_systems import SCORING_SYSTEMS
3225from vulnerabilities .utils import build_description
33- from vulnerabilities .utils import evolve_purl
3426from vulnerabilities .utils import load_yaml
3527
3628logger = logging .getLogger (__name__ )
3729
3830
39- class RubyImporter (GitImporter ):
31+ class RubyImporter (Importer ):
4032 license_url = "https://github.com/rubysec/ruby-advisory-db/blob/master/LICENSE.txt"
4133 spdx_license_expression = "unknown"
42-
43- def __init__ (self ):
44- super ().__init__ (repo_url = "git+https://github.com/rubysec/ruby-advisory-db" )
34+ repo_url = "git+https://github.com/rubysec/ruby-advisory-db"
4535
4636 def advisory_data (self ) -> Iterable [AdvisoryData ]:
47- self .clone ()
37+ self .clone (self . repo_url )
4838 base_path = Path (self .vcs_response .dest_dir )
4939 supported_subdir = ["rubies" , "gems" ]
5040 for subdir in supported_subdir :
@@ -63,9 +53,9 @@ def parse_ruby_advisory(record, schema_type):
6353 """
6454 if schema_type == "gems" :
6555 package_name = record .get ("gem" )
66- library = record .get ("library" )
67- framework = record .get ("framework" )
68- platform = record .get ("platform" )
56+ library = record .get ("library" ) # not used
57+ framework = record .get ("framework" ) # not used
58+ platform = record .get ("platform" ) # not used
6959 purl = PackageURL (type = "gem" , name = package_name )
7060
7161 return AdvisoryData (
@@ -160,39 +150,3 @@ def get_summary(record):
160150 title = record .get ("title" )
161151 description = record .get ("description" , "" )
162152 return build_description (summary = title , description = description )
163-
164-
165- class RubyImprover (Improver ):
166- pkg_manager_api = RubyVersionAPI ()
167-
168- @property
169- def interesting_advisories (self ) -> QuerySet :
170- return Advisory .objects .filter (created_by = RubyImporter .qualified_name )
171-
172- def get_inferences (self , advisory_data ) -> Iterable [Inference ]:
173- for affected_package in advisory_data .affected_packages :
174- purl = affected_package .package
175- pkg_name = purl .name
176- all_vers_pkgs = self .pkg_manager_api .fetch (pkg_name )
177-
178- safe_versions = []
179- affected_purls = []
180- for pkg_version in all_vers_pkgs :
181- vobj = RubygemsVersion (pkg_version .value )
182- try :
183- if vobj in affected_package .affected_version_range :
184- new_purl = evolve_purl (purl = purl , version = str (pkg_version .value ))
185- affected_purls .append (new_purl )
186- else :
187- safe_versions .append (pkg_version .value )
188- except Exception as e :
189- logger .error (f"{ e } " )
190-
191- for fixed_version in safe_versions :
192- fixed_purl = evolve_purl (purl = purl , version = str (fixed_version ))
193- yield Inference .from_advisory_data (
194- advisory_data ,
195- confidence = 90 ,
196- affected_purls = affected_purls ,
197- fixed_purl = fixed_purl ,
198- )
0 commit comments