Parse a GSD advisory file and return an AdvisoryData. Each advisory file contains the advisory information in JSON format.
(raw_data, file_name)
| 49 | |
| 50 | |
| 51 | def parse_advisory_data(raw_data, file_name): |
| 52 | """ |
| 53 | Parse a GSD advisory file and return an AdvisoryData. |
| 54 | Each advisory file contains the advisory information in JSON format. |
| 55 | """ |
| 56 | |
| 57 | namespaces = raw_data.get("namespaces") or {} |
| 58 | cve_org = namespaces.get("cve.org") or {} |
| 59 | nvd_nist_gov = namespaces.get("nvd.nist.gov") or {} |
| 60 | |
| 61 | gsd = raw_data.get("GSD") or {} |
| 62 | gsd_id = gsd.get("id") or file_name |
| 63 | gsd_alias = gsd.get("alias") or [] |
| 64 | gsd_description = gsd.get("description") or "" |
| 65 | |
| 66 | gsd_reference_data = gsd.get("") or [] |
| 67 | gsd_references = [Reference(url=ref) for ref in gsd_reference_data] |
| 68 | |
| 69 | details = gsd_description or "".join(get_description(cve_org)) |
| 70 | |
| 71 | aliases_cve_org = get_aliases(cve_org) |
| 72 | aliases_nvd_nist_gov = get_aliases(nvd_nist_gov) |
| 73 | |
| 74 | aliases = [gsd_alias, gsd_id] + aliases_cve_org + aliases_nvd_nist_gov |
| 75 | aliases = [alias for alias in aliases if alias is not None] |
| 76 | |
| 77 | summary = build_description(summary=get_summary(cve_org), description=details) |
| 78 | |
| 79 | severities = get_severities(cve_org) |
| 80 | configurations = nvd_nist_gov.get("configurations") or {} |
| 81 | nodes = configurations.get("nodes") or [] |
| 82 | cpes = get_cpe(nodes) |
| 83 | |
| 84 | references = get_references(cve_org) + gsd_references |
| 85 | |
| 86 | date_published = get_published_date_nvd_nist_gov(nvd_nist_gov) |
| 87 | |
| 88 | return AdvisoryData( |
| 89 | aliases=dedupe(aliases), |
| 90 | summary=summary, |
| 91 | references=references, |
| 92 | date_published=date_published, |
| 93 | ) |
| 94 | |
| 95 | |
| 96 | def get_summary(cve) -> str: |