Exemplo n.º 1
0
    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
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
    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)
Exemplo n.º 5
0
    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
Exemplo n.º 6
0
 def render_announcements(self, announcements):
     return json_parser.dumps(
         {"announcements": get_basic_announcements(announcements)},
         indent=4)
Exemplo n.º 7
0
    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)