package-audit 0.2.0 → 0.4.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.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/lib/package/audit/cli.rb +42 -42
  3. data/lib/package/audit/const/cmd.rb +3 -3
  4. data/lib/package/audit/const/fields.rb +4 -4
  5. data/lib/package/audit/const/file.rb +1 -0
  6. data/lib/package/audit/const/yaml.rb +13 -0
  7. data/lib/package/audit/enum/option.rb +13 -0
  8. data/lib/package/audit/enum/report.rb +12 -0
  9. data/lib/package/audit/enum/technology.rb +14 -0
  10. data/lib/package/audit/formatter/risk.rb +1 -1
  11. data/lib/package/audit/formatter/version.rb +1 -1
  12. data/lib/package/audit/formatter/version_date.rb +1 -1
  13. data/lib/package/audit/formatter/vulnerability.rb +1 -1
  14. data/lib/package/audit/{package.rb → models/package.rb} +8 -7
  15. data/lib/package/audit/npm/node_collection.rb +25 -14
  16. data/lib/package/audit/npm/vulnerability_finder.rb +4 -3
  17. data/lib/package/audit/npm/yarn_lock_parser.rb +10 -6
  18. data/lib/package/audit/ruby/bundler_specs.rb +16 -9
  19. data/lib/package/audit/ruby/gem_collection.rb +36 -15
  20. data/lib/package/audit/ruby/gem_meta_data.rb +1 -1
  21. data/lib/package/audit/ruby/vulnerability_finder.rb +4 -3
  22. data/lib/package/audit/services/command_parser.rb +103 -0
  23. data/lib/package/audit/services/package_filter.rb +39 -0
  24. data/lib/package/audit/services/package_finder.rb +58 -0
  25. data/lib/package/audit/{printer.rb → services/package_printer.rb} +12 -11
  26. data/lib/package/audit/{risk_calculator.rb → services/risk_calculator.rb} +8 -4
  27. data/lib/package/audit/technology/detector.rb +40 -0
  28. data/lib/package/audit/technology/validator.rb +56 -0
  29. data/lib/package/audit/util/summary_printer.rb +22 -11
  30. data/lib/package/audit/version.rb +1 -1
  31. data/sig/package/audit/cli.rbs +2 -0
  32. data/sig/package/audit/const/fields.rbs +2 -1
  33. data/sig/package/audit/const/file.rbs +1 -0
  34. data/sig/package/audit/const/yaml.rbs +13 -0
  35. data/sig/package/audit/enum/option.rbs +13 -0
  36. data/sig/package/audit/enum/report.rbs +12 -0
  37. data/sig/package/audit/enum/technology.rbs +12 -0
  38. data/sig/package/audit/{package.rbs → models/package.rbs} +3 -1
  39. data/sig/package/audit/{risk.rbs → models/risk.rbs} +1 -1
  40. data/sig/package/audit/npm/node_collection.rbs +4 -5
  41. data/sig/package/audit/npm/vulnerability_finder.rbs +3 -2
  42. data/sig/package/audit/npm/yarn_lock_parser.rbs +1 -0
  43. data/sig/package/audit/ruby/bundler_specs.rbs +2 -2
  44. data/sig/package/audit/ruby/gem_collection.rbs +11 -4
  45. data/sig/package/audit/ruby/vulnerability_finder.rbs +3 -0
  46. data/sig/package/audit/services/command_parser.rbs +31 -0
  47. data/sig/package/audit/services/package_filter.rbs +19 -0
  48. data/sig/package/audit/services/package_finder.rbs +23 -0
  49. data/sig/package/audit/{printer.rbs → services/package_printer.rbs} +3 -3
  50. data/sig/package/audit/technology/detector.rbs +19 -0
  51. data/sig/package/audit/technology/validator.rbs +19 -0
  52. data/sig/package/audit/util/summary_printer.rbs +5 -5
  53. metadata +30 -14
  54. data/lib/package/audit/command_service.rb +0 -187
  55. data/sig/package/audit/command_service.rbs +0 -29
  56. /data/lib/package/audit/{risk.rb → models/risk.rb} +0 -0
  57. /data/lib/package/audit/{duplicate_package_merger.rb → services/duplicate_package_merger.rb} +0 -0
  58. /data/sig/package/audit/{duplicate_package_merger.rbs → services/duplicate_package_merger.rbs} +0 -0
  59. /data/sig/package/audit/{risk_calculator.rbs → services/risk_calculator.rbs} +0 -0
@@ -0,0 +1,31 @@
1
+ module Package
2
+ module Audit
3
+ class CommandParser
4
+ @config: Hash[String, untyped]?
5
+ @dir: String
6
+ @options: Hash[String, untyped]
7
+ @report: Symbol
8
+ @technologies: Array[String]
9
+
10
+ def initialize: (String, Hash[String, untyped], Symbol) -> void
11
+
12
+ def run: -> bool
13
+
14
+ private
15
+
16
+ def learn_more_command: (String) -> String?
17
+
18
+ def parse_config_file: -> Hash[String, untyped]?
19
+
20
+ def parse_technologies: -> Array[String]
21
+
22
+ def print_disclaimer: (String) -> void
23
+
24
+ def print_results: (String, Array[Package], Array[Package]) -> void
25
+
26
+ def print_summary: (String, Array[Package], Array[Package]) -> void
27
+
28
+ def report_fields: -> Array[Symbol]
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,19 @@
1
+ module Package
2
+ module Audit
3
+ class PackageFilter
4
+ @config: Hash[String, untyped]?
5
+
6
+ def initialize: (Hash[String, untyped]?) -> void
7
+
8
+ def ignored?: (Package) -> bool
9
+
10
+ private
11
+
12
+ def ignore_package?: (Package, Hash[String, untyped]?) -> bool
13
+
14
+ def pkg_version_in_config?: (Package, Hash[String, untyped]?) -> bool
15
+
16
+ def pkg_yaml_from_config: (Package) -> Hash[String, untyped]?
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,23 @@
1
+ module Package
2
+ module Audit
3
+ class PackageFinder
4
+ @config: Hash[String, untyped]?
5
+ @dir: String
6
+ @report: Symbol
7
+
8
+ def initialize: (Hash[String, untyped]?, String, Symbol) -> void
9
+
10
+ def run: (String) -> Array[Array[Package]]
11
+
12
+ private
13
+
14
+ def filter_pkgs_based_on_config: (Array[Package]) -> Array[Package]
15
+
16
+ def find_by_technology: (String) -> Array[Package]
17
+
18
+ def find_node: -> Array[Package]
19
+
20
+ def find_ruby: -> Array[Package]
21
+ end
22
+ end
23
+ end
@@ -1,14 +1,14 @@
1
1
  module Package
2
2
  module Audit
3
- class Printer
3
+ class PackagePrinter
4
4
  BASH_FORMATTING_REGEX: Regexp
5
5
  COLUMN_GAP: Integer
6
6
  CSV_HEADERS: Hash[Symbol, String]
7
7
 
8
8
  @pkgs: Array[Package]
9
- @options: Hash[Symbol, untyped]
9
+ @options: Hash[String, untyped]
10
10
 
11
- def initialize: (Array[Package], Hash[Symbol, untyped]) -> void
11
+ def initialize: (Hash[String, untyped], Array[Package]) -> void
12
12
 
13
13
  def print: (Array[Symbol]) -> void
14
14
 
@@ -0,0 +1,19 @@
1
+ module Package
2
+ module Audit
3
+ module Technology
4
+ class Detector
5
+ @dir: String
6
+
7
+ def initialize: (String) -> void
8
+
9
+ def detect: -> Array[String]
10
+
11
+ private
12
+
13
+ def node?: -> bool
14
+
15
+ def ruby?: -> bool
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ module Package
2
+ module Audit
3
+ module Technology
4
+ class Validator
5
+ @dir: String
6
+
7
+ def initialize: (String) -> void
8
+
9
+ def validate!: (String) -> void
10
+
11
+ private
12
+
13
+ def validate_node!: -> void
14
+
15
+ def validate_ruby!: -> void
16
+ end
17
+ end
18
+ end
19
+ end
@@ -2,17 +2,17 @@ module Package
2
2
  module Audit
3
3
  module Util
4
4
  module SummaryPrinter
5
- def self.deprecated: -> void
5
+ def self.all: -> void
6
6
 
7
- def self.report: -> void
7
+ def self.deprecated: -> void
8
8
 
9
9
  def self.risk: -> void
10
10
 
11
- def self.statistics: (String, Array[Package]) -> void
11
+ def self.statistics: (String, Symbol, Array[Package], Array[Package]) -> void
12
12
 
13
- def self.total: (String, Array[Package]) -> void
13
+ def self.total: (String, Symbol, Array[Package], Array[Package]) -> void
14
14
 
15
- def self.vulnerable: (String, String) -> void
15
+ def self.vulnerable: (String, String?) -> void
16
16
  end
17
17
  end
18
18
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: package-audit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vadim Kononov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-05-03 00:00:00.000000000 Z
11
+ date: 2023-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler-audit
@@ -49,64 +49,80 @@ extra_rdoc_files: []
49
49
  files:
50
50
  - exe/package-audit
51
51
  - lib/package/audit/cli.rb
52
- - lib/package/audit/command_service.rb
53
52
  - lib/package/audit/const/cmd.rb
54
53
  - lib/package/audit/const/fields.rb
55
54
  - lib/package/audit/const/file.rb
56
55
  - lib/package/audit/const/time.rb
57
- - lib/package/audit/duplicate_package_merger.rb
56
+ - lib/package/audit/const/yaml.rb
58
57
  - lib/package/audit/enum/environment.rb
58
+ - lib/package/audit/enum/option.rb
59
+ - lib/package/audit/enum/report.rb
59
60
  - lib/package/audit/enum/risk_explanation.rb
60
61
  - lib/package/audit/enum/risk_type.rb
62
+ - lib/package/audit/enum/technology.rb
61
63
  - lib/package/audit/enum/vulnerability_type.rb
62
64
  - lib/package/audit/formatter/base.rb
63
65
  - lib/package/audit/formatter/risk.rb
64
66
  - lib/package/audit/formatter/version.rb
65
67
  - lib/package/audit/formatter/version_date.rb
66
68
  - lib/package/audit/formatter/vulnerability.rb
69
+ - lib/package/audit/models/package.rb
70
+ - lib/package/audit/models/risk.rb
67
71
  - lib/package/audit/npm/node_collection.rb
68
72
  - lib/package/audit/npm/npm_meta_data.rb
69
73
  - lib/package/audit/npm/vulnerability_finder.rb
70
74
  - lib/package/audit/npm/yarn_lock_parser.rb
71
- - lib/package/audit/package.rb
72
- - lib/package/audit/printer.rb
73
- - lib/package/audit/risk.rb
74
- - lib/package/audit/risk_calculator.rb
75
75
  - lib/package/audit/ruby/bundler_specs.rb
76
76
  - lib/package/audit/ruby/gem_collection.rb
77
77
  - lib/package/audit/ruby/gem_meta_data.rb
78
78
  - lib/package/audit/ruby/vulnerability_finder.rb
79
+ - lib/package/audit/services/command_parser.rb
80
+ - lib/package/audit/services/duplicate_package_merger.rb
81
+ - lib/package/audit/services/package_filter.rb
82
+ - lib/package/audit/services/package_finder.rb
83
+ - lib/package/audit/services/package_printer.rb
84
+ - lib/package/audit/services/risk_calculator.rb
85
+ - lib/package/audit/technology/detector.rb
86
+ - lib/package/audit/technology/validator.rb
79
87
  - lib/package/audit/util/bash_color.rb
80
88
  - lib/package/audit/util/summary_printer.rb
81
89
  - lib/package/audit/version.rb
82
90
  - sig/package/audit/cli.rbs
83
- - sig/package/audit/command_service.rbs
84
91
  - sig/package/audit/const/cmd.rbs
85
92
  - sig/package/audit/const/fields.rbs
86
93
  - sig/package/audit/const/file.rbs
87
94
  - sig/package/audit/const/time.rbs
88
- - sig/package/audit/duplicate_package_merger.rbs
95
+ - sig/package/audit/const/yaml.rbs
89
96
  - sig/package/audit/enum/environment.rbs
97
+ - sig/package/audit/enum/option.rbs
98
+ - sig/package/audit/enum/report.rbs
90
99
  - sig/package/audit/enum/risk_explanation.rbs
91
100
  - sig/package/audit/enum/risk_type.rbs
101
+ - sig/package/audit/enum/technology.rbs
92
102
  - sig/package/audit/enum/vulnerability_type.rbs
93
103
  - sig/package/audit/formatter/base.rbs
94
104
  - sig/package/audit/formatter/risk_printer.rbs
95
105
  - sig/package/audit/formatter/version_date.rbs
96
106
  - sig/package/audit/formatter/version_printer.rbs
97
107
  - sig/package/audit/formatter/vulnerability.rbs
108
+ - sig/package/audit/models/package.rbs
109
+ - sig/package/audit/models/risk.rbs
98
110
  - sig/package/audit/npm/node_collection.rbs
99
111
  - sig/package/audit/npm/npm_meta_data.rbs
100
112
  - sig/package/audit/npm/vulnerability_finder.rbs
101
113
  - sig/package/audit/npm/yarn_lock_parser.rbs
102
- - sig/package/audit/package.rbs
103
- - sig/package/audit/printer.rbs
104
- - sig/package/audit/risk.rbs
105
- - sig/package/audit/risk_calculator.rbs
106
114
  - sig/package/audit/ruby/bundler_specs.rbs
107
115
  - sig/package/audit/ruby/gem_collection.rbs
108
116
  - sig/package/audit/ruby/gem_meta_data.rbs
109
117
  - sig/package/audit/ruby/vulnerability_finder.rbs
118
+ - sig/package/audit/services/command_parser.rbs
119
+ - sig/package/audit/services/duplicate_package_merger.rbs
120
+ - sig/package/audit/services/package_filter.rbs
121
+ - sig/package/audit/services/package_finder.rbs
122
+ - sig/package/audit/services/package_printer.rbs
123
+ - sig/package/audit/services/risk_calculator.rbs
124
+ - sig/package/audit/technology/detector.rbs
125
+ - sig/package/audit/technology/validator.rbs
110
126
  - sig/package/audit/util/bash_color.rbs
111
127
  - sig/package/audit/util/summary_printer.rbs
112
128
  - sig/package/audit/version.rbs
@@ -1,187 +0,0 @@
1
- require_relative './const/cmd'
2
- require_relative './const/file'
3
-
4
- module Package
5
- module Audit
6
- class CommandService # rubocop:disable Metrics/ClassLength
7
- RUBY_GEM = 'ruby gem'
8
- NODE_MODULE = 'node module'
9
-
10
- def initialize(dir, options)
11
- @dir = dir
12
- @options = options
13
- end
14
-
15
- def all # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/PerceivedComplexity
16
- pkgs = []
17
-
18
- if ruby?
19
- gems = Ruby::GemCollection.all
20
- pkgs += gems
21
- Printer.new(gems, @options).print(Const::Fields::REPORT)
22
-
23
- unless @options[:csv]
24
- if gems.any?
25
- Util::SummaryPrinter.statistics(RUBY_GEM, gems)
26
- Util::SummaryPrinter.vulnerable(RUBY_GEM, Const::Cmd::BUNDLE_AUDIT)
27
- else
28
- print_success_message "There are no deprecated, outdated or vulnerable #{RUBY_GEM}s!"
29
- end
30
- end
31
- end
32
-
33
- if node?
34
- npms = Npm::NodeCollection.new(@dir).all
35
- pkgs += npms
36
- Printer.new(npms, @options).print(Const::Fields::REPORT)
37
-
38
- unless @options[:csv]
39
- if npms.any?
40
- Util::SummaryPrinter.statistics(NODE_MODULE, npms)
41
- Util::SummaryPrinter.vulnerable(NODE_MODULE, Const::Cmd::YARN_AUDIT)
42
- else
43
- print_success_message "There are no deprecated, outdated or vulnerable #{NODE_MODULE}s!"
44
- end
45
- end
46
- end
47
-
48
- pkgs.any?
49
- end
50
-
51
- def vulnerable # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/PerceivedComplexity
52
- pkgs = []
53
-
54
- if ruby?
55
- gems = Ruby::GemCollection.vulnerable
56
- pkgs += gems
57
- Printer.new(gems, @options).print(Const::Fields::VULNERABLE)
58
-
59
- unless @options[:csv]
60
- if gems.any?
61
- Util::SummaryPrinter.total(RUBY_GEM, gems)
62
- Util::SummaryPrinter.vulnerable(RUBY_GEM, Const::Cmd::BUNDLE_AUDIT)
63
- else
64
- print_success_message "There are no #{RUBY_GEM} vulnerabilities!"
65
- end
66
- end
67
- end
68
-
69
- if node?
70
- npms = Npm::NodeCollection.new(@dir).vulnerable
71
- pkgs += npms
72
- Printer.new(npms, @options).print(Const::Fields::VULNERABLE)
73
-
74
- unless @options[:csv]
75
- if npms.any?
76
- Util::SummaryPrinter.total(NODE_MODULE, npms)
77
- Util::SummaryPrinter.vulnerable(NODE_MODULE, Const::Cmd::YARN_AUDIT)
78
- else
79
- print_success_message "There are no #{NODE_MODULE} vulnerabilities!"
80
- end
81
- end
82
- end
83
-
84
- pkgs.any?
85
- end
86
-
87
- def outdated # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/PerceivedComplexity
88
- pkgs = []
89
-
90
- if ruby?
91
- gems = Ruby::GemCollection.outdated
92
- pkgs += gems
93
- Printer.new(gems, @options).print(Const::Fields::OUTDATED)
94
-
95
- unless @options[:csv]
96
- if gems.any?
97
- Util::SummaryPrinter.total(RUBY_GEM, gems)
98
- else
99
- print_success_message "There are no outdated #{RUBY_GEM}s!"
100
- end
101
- end
102
- end
103
-
104
- if node?
105
- npms = Npm::NodeCollection.new(@dir).outdated
106
- pkgs += npms
107
- Printer.new(npms, @options).print(Const::Fields::OUTDATED)
108
-
109
- unless @options[:csv]
110
- if npms.any?
111
- Util::SummaryPrinter.total(NODE_MODULE, npms)
112
- else
113
- print_success_message "There are no outdated #{NODE_MODULE}s!"
114
- end
115
- end
116
- end
117
-
118
- pkgs.any?
119
- end
120
-
121
- def deprecated # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/PerceivedComplexity
122
- pkgs = []
123
-
124
- if ruby?
125
- gems = Ruby::GemCollection.deprecated
126
- pkgs += gems
127
- Printer.new(gems, @options).print(Const::Fields::OUTDATED)
128
-
129
- unless @options[:csv]
130
- if gems.any?
131
- Util::SummaryPrinter.total(RUBY_GEM, gems)
132
- Util::SummaryPrinter.deprecated
133
- else
134
- print_success_message "There are no potentially deprecated #{RUBY_GEM}s!"
135
- end
136
- end
137
- end
138
-
139
- if node?
140
- npms = Npm::NodeCollection.new(@dir).deprecated
141
- pkgs += npms
142
- Printer.new(npms, @options).print(Const::Fields::OUTDATED)
143
-
144
- unless @options[:csv]
145
- if npms.any?
146
- Util::SummaryPrinter.total(NODE_MODULE, npms)
147
- Util::SummaryPrinter.deprecated
148
- else
149
- print_success_message "There are no potentially deprecated #{NODE_MODULE}s!"
150
- end
151
- end
152
- end
153
-
154
- pkgs.any?
155
- end
156
-
157
- private
158
-
159
- def ruby?
160
- gemfile_present = File.exist?("#{@dir}/#{Const::File::GEMFILE}")
161
- gemfile_lock_present = File.exist?("#{@dir}/#{Const::File::GEMFILE_LOCK}")
162
-
163
- if gemfile_present && gemfile_lock_present
164
- true
165
- elsif gemfile_present
166
- raise "#{Const::File::GEMFILE_LOCK} was not found in #{@dir}/"
167
- end
168
- end
169
-
170
- def node?
171
- package_json_present = File.exist?("#{@dir}/#{Const::File::PACKAGE_JSON}")
172
- package_lock_json_present = File.exist?("#{@dir}/#{Const::File::PACKAGE_LOCK_JSON}")
173
- yarn_lock_present = File.exist?("#{@dir}/#{Const::File::YARN_LOCK}")
174
-
175
- if package_json_present && (package_lock_json_present || yarn_lock_present)
176
- true
177
- elsif package_json_present
178
- raise "#{Const::File::PACKAGE_LOCK_JSON} or #{Const::File::YARN_LOCK} was not found in #{@dir}/"
179
- end
180
- end
181
-
182
- def print_success_message(msg)
183
- puts Util::BashColor.green msg
184
- end
185
- end
186
- end
187
- end
@@ -1,29 +0,0 @@
1
- module Package
2
- module Audit
3
- class CommandService
4
- NODE_MODULE: String
5
- RUBY_GEM: String
6
-
7
- @dir: String
8
- @options: Hash[Symbol, untyped]
9
-
10
- def initialize: (String, Hash[Symbol, untyped]) -> void
11
-
12
- def all: -> bool
13
-
14
- def deprecated: -> bool
15
-
16
- def outdated: -> bool
17
-
18
- def vulnerable: -> bool
19
-
20
- private
21
-
22
- def node?: -> bool?
23
-
24
- def print_success_message: (String) -> void
25
-
26
- def ruby?: -> bool?
27
- end
28
- end
29
- end
File without changes