예제 #1
0
def review(ctx, full_report, output, file):
    """
    Show an output from a previous exported JSON report.
    """
    LOG.info('Running check command')
    announcements = safety.get_announcements(key=None,
                                             proxy=None,
                                             telemetry=ctx.parent.telemetry)
    report = {}

    try:
        report = read_vulnerabilities(file)
    except SafetyError as e:
        LOG.exception('Expected SafetyError happened: %s', e)
        output_exception(e, exit_code_output=True)
    except Exception as e:
        LOG.exception('Unexpected Exception happened: %s', e)
        exception = e if isinstance(e, SafetyException) else SafetyException(
            info=e)
        output_exception(exception, exit_code_output=True)

    params = {'file': file}
    vulns, remediations, packages = safety.review(report, params=params)

    output_report = SafetyFormatter(output=output).render_vulnerabilities(
        announcements, vulns, remediations, full_report, packages)

    found_vulns = list(filter(lambda v: not v.ignored, vulns))
    click.secho(output_report,
                nl=should_add_nl(output, found_vulns),
                file=sys.stdout)
    sys.exit(EXIT_CODE_OK)
예제 #2
0
    def test_review_from_file(self):
        dirname = os.path.dirname(__file__)
        path_to_report = os.path.join(dirname, "test_db", "example_report.json")
        with open(path_to_report) as insecure:
            input_vulns = read_vulnerabilities(insecure)

        vulns = safety.review(input_vulns)
        self.assertEqual(len(vulns), 3)
예제 #3
0
파일: cli.py 프로젝트: nim65s/safety
def review(full_report, bare, file):
    if full_report and bare:
        click.secho("Can't choose both --bare and --full-report/--short-report", fg="red")
        sys.exit(-1)

    try:
        input_vulns = read_vulnerabilities(file)
    except JSONDecodeError:
        click.secho("Not a valid JSON file", fg="red")
        sys.exit(-1)

    vulns = safety.review(input_vulns)
    output_report = report(vulns=vulns, full=full_report, bare_report=bare)
    click.secho(output_report, nl=False if bare and not vulns else True)
예제 #4
0
    def test_report_with_recommended_fix(self):
        REMEDIATIONS_WITH_FIX = {
            'django': {
                'version': '4.0.1',
                'vulns_found': 4,
                'secure_versions': ['2.2.28', '3.2.13', '4.0.4'],
                'closest_secure_version': {
                    'major': parse('4.0.4'),
                    'minor': None
                },
                'more_info_url': 'https://pyup.io/packages/pypi/django/'
            }
        }

        with open(
                os.path.join(self.dirname, "test_db",
                             "report_with_recommended_fix.json")) as f:
            vulns, remediations, packages = safety.review(
                read_vulnerabilities(f))
            self.assertDictEqual(remediations, REMEDIATIONS_WITH_FIX)
예제 #5
0
 def test_review_without_recommended_fix(self):
     vulns, remediations, packages = safety.review(self.report)
     self.assertListEqual(packages, list(self.report_packages.values()))
     self.assertDictEqual(remediations, self.report_remediations)
     self.assertListEqual(vulns, self.report_vulns)