hrw 0.2.3 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 81e42c96aba4df5cd502c91d7a3a25915370f2ae1e8061859f7bd9cc7f53a37c
4
- data.tar.gz: 2fd961abdc269078ad76e14cc1ef9eb4394ba326a234c456973461822c340ea3
3
+ metadata.gz: 8cabda6b327c8534533ce19127ad8ef171b1aa98daafb12d1123285e4c100eef
4
+ data.tar.gz: 3727dab2676b9412906cfe9606dbd8bb4f77e1ef63d56e2e3ec2b30108927d03
5
5
  SHA512:
6
- metadata.gz: 2ecb22650fffc06c764530b76aa303adf22e9c2538b0639fc0b6a13bfa641a329efcf3bcd491d4fe8b04ce7b0ab24e612376c10a73818a115474bf9c7447246d
7
- data.tar.gz: df63bdc4146b2905a14c722e809ac3542084640ee3d8716a2fed2d3ef4991aac02f77fc7c52aa0a20ee1067bb71ef2cf4cd30ba5602e604fd1b452aa529302dd
6
+ metadata.gz: 363c6d96c9ea9822f7dd05dd9f577c4e800418150cee5338889080ff9336aa7973fc12856c5967b379855804adceb90377cd644b8ff42676bcfa556d94b36e9b
7
+ data.tar.gz: f12bc6139b20c57cd485e13bb3298407c881c6162aaaddc2f7e95b3ad206487518f7047a49bd5e21d2203e5d1c62468c1b449468a55afc65b69f67b776f6bf91
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- hrw (0.2.3)
4
+ hrw (0.3.0)
5
5
  http (~> 4.1, >= 4.1.1)
6
6
  rainbow (~> 3.0)
7
7
 
data/exe/hrw CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  require 'ostruct'
3
3
  require 'optparse'
4
+
4
5
  require 'hrw'
5
6
 
6
7
  ARGV << '--help' if ARGV.empty?
@@ -31,9 +32,8 @@ hash = api.submit(specs, scanner.package_manager)
31
32
  result = api.retrieve(hash)
32
33
 
33
34
  formatter = Hrw::Formatter.new
34
- vulnerable_deps = formatter.format(result)
35
-
36
- unless vulnerable_deps.empty?
37
- formatter.print_vulnerable_deps(vulnerable_deps)
35
+ if formatter.pretty_print(result)
38
36
  exit(1)
37
+ else
38
+ exit(0)
39
39
  end
data/lib/hrw/formatter.rb CHANGED
@@ -14,15 +14,22 @@ module Hrw
14
14
  # Format result and pretty print it
15
15
  #
16
16
  class Formatter
17
- # Format result
17
+ # Class constructor
18
+ #
19
+ def initialize
20
+ @count = 0
21
+ end
22
+
23
+ # Filter result
18
24
  #
19
25
  # @param [Hash] result scan result
20
- # @return [Boolean] vulnerable or not
21
- def format(result)
26
+ # @return [Array] vulnerable or not
27
+ def filter(result)
22
28
  deps = []
23
29
 
24
30
  result['ancestry']['layers'].each do |layer|
25
31
  layer['detected_features'].each do |feature|
32
+ @count += 1
26
33
  deps << feature if feature.key?('vulnerabilities')
27
34
  end
28
35
  end
@@ -32,20 +39,83 @@ module Hrw
32
39
 
33
40
  # Pretty print result
34
41
  #
35
- def print_vulnerable_deps(deps)
42
+ # @param [Hash] result scan result
43
+ # @return [Boolean] true if has vulnerability
44
+ def pretty_print(result)
45
+ high = medium = low = unknown = 0
46
+
47
+ puts
48
+ puts("scanning #{Dir.pwd} ...".foreground(:aliceblue))
49
+ puts
50
+
51
+ deps = filter(result)
36
52
  deps.each do |dep|
37
53
  dep['vulnerabilities'].each do |vuln|
38
54
  patched_version = JSON.parse(vuln['fixed_by'])
39
55
 
40
- puts "Name: #{dep['name']}"
41
- puts "Version: #{dep['version']}"
42
- puts "Advisory: #{vuln['name']}"
43
- puts "Severity: #{vuln['severity']}"
44
- puts "Link: #{vuln['link']}"
45
- puts "Patched: #{patched_version['spec'].join(', ')}"
56
+ case vuln['severity']
57
+ when 'Defcon1', 'Critical', 'High'
58
+ color = :red
59
+ high += 1
60
+ when 'Medium'
61
+ color = :yellow
62
+ medium += 1
63
+ when 'Unknown'
64
+ color = :magenta
65
+ unknown += 1
66
+ else
67
+ color = :aliceblue
68
+ low += 1
69
+ end
70
+
71
+ pkg = "#{dep['name']}@#{dep['version']}"
72
+ puts "✗ #{vuln['severity']} severity vulnerability found in #{pkg.underline.bright}".foreground(color)
73
+ puts 'Name:'
74
+ puts " #{vuln['name']}"
75
+ puts
76
+ puts 'Description:'
77
+ puts vuln['description'].gsub(/^/, ' ')
78
+ puts
79
+ puts 'Severity:'
80
+ puts " #{vuln['severity']}"
81
+ puts
82
+ puts 'Link:'
83
+ puts " #{vuln['link']}"
84
+ puts
85
+ puts 'Patched version:'
86
+ puts " #{patched_version['spec'].join(', ')}"
87
+ puts
46
88
  puts
47
89
  end
48
90
  end
91
+
92
+ puts "Tested #{@count} dependencies for known vulnerabilities".foreground(:aliceblue)
93
+ puts
94
+
95
+ if deps.empty?
96
+ puts '✓ no vulnerabilities found.'.foreground(:green)
97
+ puts
98
+
99
+ false
100
+ else
101
+ puts "✗ found #{high + medium + low + unknown} vulnerabilities:".foreground(:red)
102
+ puts
103
+
104
+ color = high > 0 ? :red : :aliceblue
105
+ puts " high: #{high}".foreground(color)
106
+
107
+ color = medium > 0 ? :yellow : :aliceblue
108
+ puts " medium: #{medium}".foreground(color)
109
+
110
+ puts " low: #{low}".foreground(:aliceblue)
111
+
112
+ color = unknown > 0 ? :magenta : :aliceblue
113
+ puts " unknown: #{unknown}".foreground(color)
114
+
115
+ puts
116
+
117
+ true
118
+ end
49
119
  end
50
120
  end
51
121
  end
data/lib/hrw/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Hrw
2
- VERSION = '0.2.3'.freeze
2
+ VERSION = '0.3.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hrw
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - hi_ztz