-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathjsonToOutput.php
executable file
·89 lines (73 loc) · 2.16 KB
/
jsonToOutput.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?php
renderFlavoredMarkdown($argv[1]);
function renderFlavoredMarkdown(string $filename): void
{
$json = file_get_contents($filename);
$data = json_decode($json, true);
echo renderAdvisories($data['advisories']);
echo "\n\n";
echo renderAbandonedPackages($data['abandoned'] ?? []);
echo "\n";
}
/**
* @param array<string, array<array{advisoryId: string, packageName: string, affectedVersions: string, title: string, cve: string, link: string, reportedAt: string}>> $advisories
* @return string
*/
function renderAdvisories(array $advisories): string
{
$output = <<<MARKDOWN
## :exclamation: Security vulnerability advisories :exclamation:
MARKDOWN;
if (empty($advisories)) {
$output .= 'No security vulnerability advisories found.';
return $output;
}
$output .= <<<MARKDOWN
| Package | CVE | Affected versions | Reported at |
| ------- | --- | ----------------- | ----------- |
MARKDOWN;
foreach ($advisories as $issues) {
foreach ($issues as $issue){
$cve = sprintf(
'[%s](%s): %s',
$issue['cve'],
$issue['link'],
$issue['title'],
);
$output .= sprintf(
"\n| %s | %s | %s | %s |",
$issue['packageName'],
$cve,
$issue['affectedVersions'],
DateTime::createFromFormat(DATE_ATOM, $issue['reportedAt'])->format('Y-m-d H:i:s'),
);
}
}
return $output;
}
/**
* @param array<string, string> $abandonedPackages
* @return string
*/
function renderAbandonedPackages(array $abandonedPackages): string
{
$output = <<<MARKDOWN
## :warning: Abandoned :warning:
MARKDOWN;
if (empty($abandonedPackages)) {
$output .= 'No abandoned packages';
return $output;
}
$output .= <<<MARKDOWN
| Abandoned Package | Suggested Replacement |
| ----------------- | --------------------- |
MARKDOWN;
foreach ($abandonedPackages as $abandoned => $replacement) {
$output .= sprintf(
"\n| %s | %s |",
$abandoned,
$replacement
);
}
return $output;
}