コード例 #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
コード例 #2
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
コード例 #3
0
    def render_licenses(self, announcements, licenses):
        unique_license_types = set([lic['license'] for lic in licenses])

        report_brief_section = click.unstyle(
            build_report_brief_section(
                columns=80,
                primary_announcement=get_primary_announcement(announcements),
                licenses_found=len(unique_license_types)))

        packages_licenses = licenses
        announcements_table = self.__build_announcements_section(announcements)

        final_brief = click.unstyle(
            get_final_brief_license(unique_license_types,
                                    kwargs={'columns': 80}))

        table = [self.TEXT_REPORT_BANNER] + announcements_table + [
            report_brief_section,
            self.SMALL_DIVIDER_SECTIONS,
            " LICENSES",
            self.SMALL_DIVIDER_SECTIONS,
            add_empty_line(),
        ]

        if not packages_licenses:
            table.append("  No packages licenses found.")
            table += [
                final_brief,
                add_empty_line(), self.SMALL_DIVIDER_SECTIONS
            ]

            return "\n".join(table)

        for pkg_license in packages_licenses:
            text = "  {0}, version {1}, license {2}\n".format(
                pkg_license['package'], pkg_license['version'],
                pkg_license['license'])
            table.append(text)

        table += [final_brief, add_empty_line(), self.SMALL_DIVIDER_SECTIONS]

        return "\n".join(table)
コード例 #4
0
    def render_licenses(self, announcements, licenses):
        unique_license_types = set([lic['license'] for lic in licenses])

        report_brief_section = build_report_brief_section(primary_announcement=get_primary_announcement(announcements),
                                                          report_type=2, licenses_found=len(unique_license_types))
        announcements_section = self.__build_announcements_section(announcements)

        if not licenses:
            content = format_long_text(click.style("No packages licenses found.", bold=True, fg='red'))
            return "\n".join(
                [ScreenReport.REPORT_BANNER] + announcements_section + [report_brief_section,
                                                                        self.DIVIDER_SECTIONS,
                                                                        add_empty_line(),
                                                                        content,
                                                                        add_empty_line(),
                                                                        self.DIVIDER_SECTIONS]
            )

        table = []
        for license in licenses:
            table.append(format_license(license))

        final_brief = get_final_brief_license(unique_license_types)

        return "\n".join(
            [ScreenReport.REPORT_BANNER] + announcements_section + [report_brief_section,
                                                                    add_empty_line(),
                                                                    self.DIVIDER_SECTIONS,
                                                                    format_long_text(
                                                                        click.style('LICENSES FOUND',
                                                                                    bold=True, fg='yellow')),
                                                                    self.DIVIDER_SECTIONS,
                                                                    add_empty_line(),
                                                                    "\n".join(table),
                                                                    final_brief,
                                                                    add_empty_line(),
                                                                    self.DIVIDER_SECTIONS]
        )
コード例 #5
0
    def render_vulnerabilities(self, announcements, vulnerabilities, remediations, full, packages):
        announcements_section = self.__build_announcements_section(announcements)
        primary_announcement = get_primary_announcement(announcements)
        remediation_section = build_remediation_section(remediations)
        end_content = []

        if primary_announcement:
            end_content = [add_empty_line(),
                           build_primary_announcement(primary_announcement, columns=get_terminal_size().columns),
                           self.DIVIDER_SECTIONS]

        table = []
        ignored = {}
        total_ignored = 0

        for n, vuln in enumerate(vulnerabilities):
            if vuln.ignored:
                total_ignored += 1
                ignored[vuln.package_name] = ignored.get(vuln.package_name, 0) + 1
            table.append(format_vulnerability(vuln, full))

        report_brief_section = build_report_brief_section(primary_announcement=primary_announcement, report_type=1,
                                                          vulnerabilities_found=max(0, len(vulnerabilities)-total_ignored),
                                                          vulnerabilities_ignored=total_ignored,
                                                          remediations_recommended=len(remediations))

        if vulnerabilities:

            final_brief = get_final_brief(len(vulnerabilities), len(remediations), ignored, total_ignored)

            return "\n".join(
                [ScreenReport.REPORT_BANNER] + announcements_section + [report_brief_section,
                                                                        add_empty_line(),
                                                                        self.DIVIDER_SECTIONS,
                                                                        format_long_text(
                                                                            click.style('VULNERABILITIES FOUND',
                                                                                        bold=True, fg='red')),
                                                                        self.DIVIDER_SECTIONS,
                                                                        add_empty_line(),
                                                                        "\n\n".join(table),
                                                                        final_brief,
                                                                        add_empty_line(),
                                                                        self.DIVIDER_SECTIONS] +
                remediation_section + end_content
            )
        else:
            content = format_long_text(click.style("No known security vulnerabilities found.", bold=True, fg='green'))
            return "\n".join(
                [ScreenReport.REPORT_BANNER] + announcements_section + [report_brief_section,
                                                                        self.DIVIDER_SECTIONS,
                                                                        add_empty_line(),
                                                                        content,
                                                                        add_empty_line(),
                                                                        self.DIVIDER_SECTIONS] +
                end_content
            )
コード例 #6
0
    def render_vulnerabilities(self, announcements, vulnerabilities,
                               remediations, full, packages):
        primary_announcement = get_primary_announcement(announcements)
        remediation_section = [
            click.unstyle(rem)
            for rem in build_remediation_section(remediations, columns=80)
        ]
        end_content = []

        if primary_announcement:
            end_content = [
                add_empty_line(),
                build_primary_announcement(primary_announcement,
                                           columns=80,
                                           only_text=True),
                self.SMALL_DIVIDER_SECTIONS
            ]

        announcement_section = self.__build_announcements_section(
            announcements)

        ignored = {}
        total_ignored = 0

        for n, vuln in enumerate(vulnerabilities):
            if vuln.ignored:
                total_ignored += 1
                ignored[vuln.package_name] = ignored.get(vuln.package_name,
                                                         0) + 1

        report_brief_section = click.unstyle(
            build_report_brief_section(
                columns=80,
                primary_announcement=primary_announcement,
                vulnerabilities_found=max(0,
                                          len(vulnerabilities) -
                                          total_ignored),
                vulnerabilities_ignored=total_ignored,
                remediations_recommended=len(remediations)))

        table = [self.TEXT_REPORT_BANNER] + announcement_section + [
            report_brief_section,
            '',
            self.SMALL_DIVIDER_SECTIONS,
        ]

        if vulnerabilities:
            table += [" VULNERABILITIES FOUND", self.SMALL_DIVIDER_SECTIONS]

            for vuln in vulnerabilities:
                table.append('\n' + format_vulnerability(
                    vuln, full, only_text=True, columns=80))

            final_brief = click.unstyle(
                get_final_brief(len(vulnerabilities),
                                len(remediations),
                                ignored,
                                total_ignored,
                                kwargs={'columns': 80}))
            table += [
                final_brief,
                add_empty_line(), self.SMALL_DIVIDER_SECTIONS
            ] + remediation_section + end_content

        else:
            table += [
                add_empty_line(), " No known security vulnerabilities found.",
                add_empty_line(), self.SMALL_DIVIDER_SECTIONS
            ] + end_content

        return "\n".join(table)