Parse a ruby advisory file and return an AdvisoryData or None. Each advisory file contains the advisory information in YAML format. Schema: https://github.com/rubysec/ruby-advisory-db/tree/master/spec/schemas
(record, schema_type, advisory_url)
| 74 | |
| 75 | |
| 76 | def parse_ruby_advisory(record, schema_type, advisory_url): |
| 77 | """ |
| 78 | Parse a ruby advisory file and return an AdvisoryData or None. |
| 79 | Each advisory file contains the advisory information in YAML format. |
| 80 | Schema: https://github.com/rubysec/ruby-advisory-db/tree/master/spec/schemas |
| 81 | """ |
| 82 | if schema_type == "gems": |
| 83 | package_name = record.get("gem") |
| 84 | |
| 85 | if not package_name: |
| 86 | logger.error("Invalid package name") |
| 87 | else: |
| 88 | purl = PackageURL(type="gem", name=package_name) |
| 89 | |
| 90 | return AdvisoryData( |
| 91 | aliases=get_aliases(record), |
| 92 | summary=get_summary(record), |
| 93 | affected_packages=get_affected_packages(record, purl), |
| 94 | references=get_references(record), |
| 95 | date_published=get_publish_time(record), |
| 96 | url=advisory_url, |
| 97 | ) |
| 98 | |
| 99 | elif schema_type == "rubies": |
| 100 | engine = record.get("engine") # engine enum: [jruby, rbx, ruby] |
| 101 | if not engine: |
| 102 | logger.error("Invalid engine name") |
| 103 | else: |
| 104 | purl = PackageURL(type="ruby", name=engine) |
| 105 | return AdvisoryData( |
| 106 | aliases=get_aliases(record), |
| 107 | summary=get_summary(record), |
| 108 | affected_packages=get_affected_packages(record, purl), |
| 109 | references=get_references(record), |
| 110 | date_published=get_publish_time(record), |
| 111 | url=advisory_url, |
| 112 | ) |
| 113 | |
| 114 | |
| 115 | def get_affected_packages(record, purl): |