def __build_announcements_section(self, announcements): announcements_section = [] basic_announcements = get_basic_announcements(announcements) if basic_announcements: announcements_content = build_announcements_section_content(basic_announcements) announcements_section = [add_empty_line(), self.ANNOUNCEMENTS_HEADING, add_empty_line(), announcements_content, add_empty_line(), self.DIVIDER_SECTIONS] return announcements_section
def render_licenses(self, announcements, licenses): unique_license_types = set([lic['license'] for lic in licenses]) report = get_report_brief_info( as_dict=True, report_type=2, licenses_found=len(unique_license_types)) template = { "report_meta": report, "announcements": get_basic_announcements(announcements), "licenses": licenses, } return json_parser.dumps(template, indent=4)
def render_licenses(self, announcements, packages_licenses): parsed_announcements = [] for announcement in get_basic_announcements(announcements): normalized_message = "-".join( announcement.get('message', 'none').lower().split()) parsed_announcements.append({'license': normalized_message}) announcements_to_render = [ announcement.get('license') for announcement in parsed_announcements ] licenses = list( set([pkg_li.get('license') for pkg_li in packages_licenses])) sorted_licenses = sorted(licenses) return " ".join(announcements_to_render + sorted_licenses)
def render_vulnerabilities(self, announcements, vulnerabilities, remediations, full, packages): parsed_announcements = [] Announcement = namedtuple("Announcement", ["name"]) for announcement in get_basic_announcements(announcements): normalized_message = "-".join( announcement.get('message', 'none').lower().split()) parsed_announcements.append(Announcement(name=normalized_message)) announcements_to_render = [ announcement.name for announcement in parsed_announcements ] affected_packages = list( set([v.package_name for v in vulnerabilities if not v.ignored])) return " ".join(announcements_to_render + affected_packages)
def __build_announcements_section(self, announcements): announcements_table = [] basic_announcements = get_basic_announcements(announcements) if basic_announcements: announcements_content = click.unstyle( build_announcements_section_content(basic_announcements, columns=80, start_line_decorator=' ' * 2, end_line_decorator='')) announcements_table = [ add_empty_line(), 'ANNOUNCEMENTS', add_empty_line(), announcements_content, add_empty_line(), self.SMALL_DIVIDER_SECTIONS ] return announcements_table
def render_announcements(self, announcements): return json_parser.dumps( {"announcements": get_basic_announcements(announcements)}, indent=4)
def render_vulnerabilities(self, announcements, vulnerabilities, remediations, full, packages): remediations_recommended = len(remediations.keys()) LOG.debug( 'Rendering %s vulnerabilities, %s remediations with full_report: %s', len(vulnerabilities), remediations_recommended, full) vulns_ignored = [ vuln.to_dict() for vuln in vulnerabilities if vuln.ignored ] vulns = [ vuln.to_dict() for vuln in vulnerabilities if not vuln.ignored ] report = get_report_brief_info( as_dict=True, report_type=1, vulnerabilities_found=len(vulns), vulnerabilities_ignored=len(vulns_ignored), remediations_recommended=remediations_recommended) remed = {} for k, v in remediations.items(): if k not in remed: remed[k] = {} closest = v.get('closest_secure_version', {}) upgrade = closest.get('major', None) downgrade = closest.get('minor', None) recommended_version = None if upgrade: recommended_version = str(upgrade) elif downgrade: recommended_version = str(downgrade) remed[k]['current_version'] = v.get('version', None) remed[k]['vulnerabilities_found'] = v.get('vulns_found', 0) remed[k]['recommended_version'] = recommended_version remed[k]['other_recommended_versions'] = [ other_v for other_v in v.get('secure_versions', []) if other_v != recommended_version ] remed[k]['more_info_url'] = v.get('more_info_url', '') template = { "report_meta": report, "scanned_packages": {p.name: p.to_dict(short_version=True) for p in packages}, "affected_packages": {v.pkg.name: v.pkg.to_dict() for v in vulnerabilities}, "announcements": [{ 'type': item.get('type'), 'message': item.get('message') } for item in get_basic_announcements(announcements)], "vulnerabilities": vulns, "ignored_vulnerabilities": vulns_ignored, "remediations": remed } return json_parser.dumps(template, indent=4)