def check_for_update(cve_json, task): cve_id = cve_json["cve"]["CVE_data_meta"]["ID"] cve_obj = Cve.query.filter_by(cve_id=cve_id).first() events = [] # A new CVE has been added if not cve_obj: cve_obj = CveUtil.create_cve(cve_json) logger.info("{} created (ID: {})".format(cve_id, cve_obj.id)) events = [CveUtil.create_event(cve_obj, cve_json, "new_cve", {})] # Existing CVE has changed elif CveUtil.cve_has_changed(cve_obj, cve_json): logger.info("{} has changed, parsing it...".format(cve_obj.cve_id)) events = [] checks = BaseCheck.__subclasses__() # Loop on each kind of check for check in checks: c = check(cve_obj, cve_json) event = c.execute() if event: events.append(event) # Change the last updated date cve_obj.updated_at = arrow.get(cve_json["lastModifiedDate"]).datetime cve_obj.json = cve_json db.session.commit() # Create the change if events: CveUtil.create_change(cve_obj, cve_json, task, events)
def test_create_change(open_file): task = Task() db.session.add(task) db.session.commit() cve_json = open_file("cves/CVE-2020-26116.json") cve = CveUtil.create_cve(cve_json) change = CveUtil.create_change(cve, cve_json, task, []) assert Change.query.first().id == change.id assert change.json == cve_json assert change.cve_id == cve.id assert change.cve.id == cve.id assert change.task_id == task.id assert change.task.id == task.id assert change.events == []