Compute a unique content_id for an advisory by normalizing its data and hashing it. :param advisory_data: An AdvisoryDataV2 or AdvisoryV2 object :return: SHA-256 hash digest as content_id
(advisory_data)
| 692 | |
| 693 | |
| 694 | def compute_content_id_v2(advisory_data): |
| 695 | """ |
| 696 | Compute a unique content_id for an advisory by normalizing its data and hashing it. |
| 697 | |
| 698 | :param advisory_data: An AdvisoryDataV2 or AdvisoryV2 object |
| 699 | :return: SHA-256 hash digest as content_id |
| 700 | """ |
| 701 | from vulnerabilities.importer import AdvisoryDataV2 |
| 702 | from vulnerabilities.models import AdvisoryV2 |
| 703 | |
| 704 | if not isinstance(advisory_data, (AdvisoryV2, AdvisoryDataV2)): |
| 705 | raise ValueError("Unsupported advisory data type for content ID computation") |
| 706 | |
| 707 | if isinstance(advisory_data, AdvisoryV2): |
| 708 | advisory_data = advisory_data.to_advisory_data() |
| 709 | |
| 710 | normalized_data = { |
| 711 | "advisory_id": normalize_text(advisory_data.advisory_id), |
| 712 | "aliases": normalize_list(advisory_data.aliases), |
| 713 | "summary": normalize_text(advisory_data.summary), |
| 714 | "affected_packages": [ |
| 715 | pkg.to_dict() for pkg in normalize_list(advisory_data.affected_packages) if pkg |
| 716 | ], |
| 717 | "references": [ref.to_dict() for ref in normalize_list(advisory_data.references) if ref], |
| 718 | "severities": [sev.to_dict() for sev in normalize_list(advisory_data.severities) if sev], |
| 719 | "weaknesses": normalize_list(advisory_data.weaknesses), |
| 720 | "patches": [patch.to_dict() for patch in normalize_list(advisory_data.patches)], |
| 721 | } |
| 722 | normalized_data["url"] = advisory_data.url |
| 723 | |
| 724 | return sha256_digest(normalized_data) |
| 725 | |
| 726 | |
| 727 | def create_registry(pipelines): |
no test coverage detected