@@ -35,6 +35,10 @@ def advisory_data(self) -> Iterable[AdvisoryData]:
3535
3636
3737def parse_advisory_data (file ):
38+ """
39+ Parse a GSD advisory file and return an AdvisoryData.
40+ Each advisory file contains the advisory information in JSON format.
41+ """
3842 raw_data = json .loads (file )
3943
4044 namespaces = raw_data .get ("namespaces" ) or {}
@@ -64,29 +68,72 @@ def parse_advisory_data(file):
6468
6569
6670def get_summary (cve ) -> str :
71+ """
72+ Args:
73+ cve: json object have a CVE_data_meta key
74+ {"CVE_data_meta": {"TITLE": "DoS vulnerability: Invalid Accent Colors"}
75+ Returns:
76+ a TITLE value as summary
77+ """
6778 CVE_data_meta = cve .get ("CVE_data_meta" ) or {}
6879 return CVE_data_meta .get ("TITLE" ) or ""
6980
7081
7182def get_cvss_str_v_cve_org (cve ) -> str :
83+ """
84+ Args:
85+ cve: a json object have impact key , CVSS key and vectorString
86+ {"impact": {"cvss": {"vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:N/I:N/A:H"}}}
87+ Returns:
88+ vectorString of cvss "CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:N/I:N/A:H"
89+ """
7290 impact = cve .get ("impact" ) or {}
7391 cvss = impact .get ("cvss" ) or {}
7492 return cvss .get ("vectorString" )
7593
7694
7795def get_description (cve ) -> [str ]:
96+ """
97+ Get a list description value from description object
98+ >>> get_description({"description": {"description_data": [{"lang": "eng","value": "the description"}]}})
99+ ['the description']
100+
101+ """
78102 description = cve .get ("description" ) or {}
79103 description_data = description .get ("description_data" ) or []
80104 return [desc ["value" ] for desc in description_data if desc ["value" ]]
81105
82106
83107def get_references (cve ):
108+ """
109+ Args:
110+ cve: json object with a references key
111+ Returns:
112+ list of Reference assigned with url
113+ >>> get_references({"references": {
114+ ... "reference_data": [{
115+ ... "name": "https://kc.mcafee.com/corporate/index?page=content&id=SB10198",
116+ ... "refsource": "CONFIRM",
117+ ... "tags": ["Vendor Advisory"],
118+ ... "url": "https://kc.mcafee.com/corporate/index?page=content&id=SB10198"}]}})
119+ [Reference(reference_id='', url='https://kc.mcafee.com/corporate/index?page=content&id=SB10198', severities=[])]
120+
121+ """
84122 references = cve .get ("references" ) or {}
85123 reference_data = references .get ("reference_data" ) or []
86124 return [Reference (url = ref ["url" ]) for ref in reference_data if ref ["url" ]]
87125
88126
89127def get_aliases (cve ) -> [str ]:
128+ """
129+ Args:
130+ cve:
131+ Returns:
132+ list of aliases
133+
134+ >>> get_aliases({"CVE_data_meta": {"ID": "CVE-2017-4017"},"source": {"advisory": "GHSA-v8x6-59g4-5g3w"}})
135+ ['CVE-2017-4017', 'GHSA-v8x6-59g4-5g3w']
136+ """
90137 CVE_data_meta = cve .get ("CVE_data_meta" ) or {}
91138 alias = CVE_data_meta .get ("ID" )
92139
@@ -102,6 +149,15 @@ def get_aliases(cve) -> [str]:
102149
103150
104151def get_published_date_nvd_nist_gov (nvd_nist_gov ):
152+ """
153+ Args:
154+ nvd_nist_gov: json object have a publishedDate as a key
155+ Returns:
156+ a published date
157+ >>> get_published_date_nvd_nist_gov({"publishedDate": "2022-06-23T07:15Z"})
158+ datetime.datetime(2022, 6, 23, 7, 15, tzinfo=<StaticTzInfo 'Z'>)
159+
160+ """
105161 publishedDate = nvd_nist_gov .get ("publishedDate" )
106162 return publishedDate and dateparser .parse (publishedDate )
107163
0 commit comments