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
|
# File 'lib/parsers/prowler.rb', line 4
def parse(file,threshold)
grouped_data = {}
data = JSON.parse(file)
data.each do |item|
title = item['CheckTitle']
if grouped_data[title].nil?
grouped_data[title] = []
end
grouped_data[title] << item
end
merged_data = {}
grouped_data.each do |title, items|
fail_items = items.select { |item| item['Status'] == 'FAIL' }
if fail_items.length > 0
merged_data[title] = {
'AccountId' =>fail_items[0]['AccountId'],
'ServiceName' => fail_items[0]['ServiceName'],
'SubServiceName' =>fail_items[0]['SubServiceName'],
'StatusExtended' => fail_items.map { |item| item['StatusExtended'] }.join("\r\n"),
'Severity' => fail_items[0]['Severity'],
'Risk' => fail_items[0]['Risk'],
'Region' => fail_items.map { |item| item['Region'] }.join("\r\n"),
'ResourceId' => fail_items.map { |item| item['ResourceId'] }.join("\r\n"),
'Remediation' => fail_items[0]['Remediation']['Code'],
'Recommendation' => fail_items[0]['Remediation']['Recommendation'],
'Scale' => if fail_items[0]['Severity'] == 'critical'
10.to_i
elsif fail_items[0]['Severity'] == 'high'
8.to_i
elsif fail_items[0]['Severity'] == 'medium'
6.to_i
elsif fail_items[0]['Severity'] == 'low'
3.to_i
end
}
end
end
merged_data.transform_values! do |value|
value['ServiceName'] = value['ServiceName'].upcase if value['ServiceName']
value['Severity'] = value['Severity'].upcase if value['Severity']
value
end
data = merged_data.sort_by { |_, value| value["Scale"] }
return data.to_json
end
|