def add_or_update_cve()

in bedrock/security/management/commands/update_security_advisories.py [0:0]


def add_or_update_cve(data):
    for cve_id, advisory in data["advisories"].items():
        if not cve_id.startswith("CVE-"):
            # skip advisories that are not CVE
            continue

        if not advisory.get("feed", True):
            # skip advisories with `feed: false`
            continue

        cve_year, cve_order = parse_cve_id(cve_id)
        update_advisory_bugs(advisory)
        cve_title = advisory.get("cve_problemtype", advisory.get("title")) or ""
        cve_data = {
            "id": cve_id,
            "year": cve_year,
            "order": cve_order,
            "title": cve_title,
            "impact": advisory["impact"] or "",
            "reporter": advisory["reporter"] or "",
            "description": advisory["description"] or "",
            "bugs": advisory["bugs"],
        }
        try:
            cve = MitreCVE.objects.get(id=cve_id)
        except MitreCVE.DoesNotExist:
            cve = MitreCVE(**cve_data)
            cve.products = data["fixed_in"]
            cve.mfsa_ids.append(data["mfsa_id"])
        else:
            cve.products = list(set(cve.products).union(data["fixed_in"]))
            cve.mfsa_ids = list(set(cve.mfsa_ids).union([data["mfsa_id"]]))
            for prop, value in cve_data.items():
                if value:
                    setattr(cve, prop, value)

        cve.save()