Completed
Push — feature/security-checker-5 ( b1af27 )
by Jorijn
05:15
created

SimpleFormatter::displayResults()   B

Complexity

Conditions 8
Paths 14

Size

Total Lines 35
Code Lines 23

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 25.755

Importance

Changes 0
Metric Value
cc 8
eloc 23
nc 14
nop 3
dl 0
loc 35
ccs 8
cts 23
cp 0.3478
crap 25.755
rs 8.4444
c 0
b 0
f 0
1
<?php
2
3
namespace Jorijn\LaravelSecurityChecker\Formatter;
4
5
use Symfony\Component\Console\Output\OutputInterface;
6
7
class SimpleFormatter implements FormatterInterface
8
{
9
    /**
10
     * Displays a security report as simple plain text.
11
     *
12
     * @param OutputInterface $output
13
     * @param string          $lockFilePath    The file path to the checked lock file
14
     * @param array           $vulnerabilities An array of vulnerabilities
15
     */
16 3
    public function displayResults(OutputInterface $output, $lockFilePath, array $vulnerabilities)
17
    {
18 3
        $output->writeln(sprintf('Security Check Report: <comment>%s</>', realpath($lockFilePath)));
19
20 3
        if ($count = count($vulnerabilities)) {
21
            $status = 'CRITICAL';
22
            $style = 'error';
23
        } else {
24 3
            $status = 'OK';
25 3
            $style = 'info';
26
        }
27
28 3
        $output->writeln(sprintf('<%s>[%s] %d %s known vulnerabilities</>', $style, $status, $count,
29 3
            1 === $count ? 'package has' : 'packages have'));
30
31 3
        if (0 !== $count) {
32
            $output->write("\n");
33
34
            foreach ($vulnerabilities as $dependency => $issues) {
35
                $dependencyFullName = $dependency.' ('.$issues['version'].')';
36
                $output->writeln('<info>'.$dependencyFullName."\n".str_repeat('-',
37
                        strlen($dependencyFullName))."</>\n");
38
39
                foreach ($issues['advisories'] as $issue => $details) {
40
                    $output->write(' * ');
41
                    if ($details['cve']) {
42
                        $output->write('<comment>'.$details['cve'].': </comment>');
43
                    }
44
                    $output->writeln($details['title']);
45
46
                    if ('' !== $details['link']) {
47
                        $output->writeln('   '.$details['link']);
48
                    }
49
50
                    $output->writeln('');
51
                }
52
            }
53
        }
54 3
    }
55
}
56