Class: Brakeman::Commandline
- Inherits:
-
Object
- Object
- Brakeman::Commandline
- Defined in:
- lib/brakeman/commandline.rb
Overview
Implements handling of running Brakeman from the command line.
Class Method Summary collapse
-
.check_latest ⇒ Object
Check for the latest version.
-
.compare_results(options) ⇒ Object
Runs a comparison report based on the options provided.
-
.early_exit_options(options) ⇒ Object
Handle options that exit without generating a report.
-
.parse_options(argv) ⇒ Object
Parse ARGV-style array of options.
-
.quit(exit_code = 0, message = nil) ⇒ Object
Exits with the given exit code and prints out the message, if given.
-
.regular_report(options) ⇒ Object
Runs a regular report based on the options provided.
-
.run(options, default_app_path = ".") ⇒ Object
Runs everything:.
-
.run_brakeman(options) ⇒ Object
Actually run Brakeman.
-
.run_report(options) ⇒ Object
Run either a comparison or regular report based on options provided.
-
.set_interrupt_handler(options) ⇒ Object
Sets interrupt handler to gracefully handle Ctrl+C.
-
.set_options(options, default_app_path = ".") ⇒ Object
Modifies options, including setting the app_path if none is given in the options hash.
-
.start(options = nil, app_path = ".") ⇒ Object
Main method to run Brakeman from the command line.
Class Method Details
.check_latest ⇒ Object
Check for the latest version.
If the latest version is newer, quit with a message.
41 42 43 44 45 |
# File 'lib/brakeman/commandline.rb', line 41 def check_latest if error = Brakeman.ensure_latest quit Brakeman::Not_Latest_Version_Exit_Code, error end end |
.compare_results(options) ⇒ Object
Runs a comparison report based on the options provided.
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/brakeman/commandline.rb', line 48 def compare_results require 'json' vulns = Brakeman.compare .merge(:quiet => [:quiet]) if [:comparison_output_file] File.open [:comparison_output_file], "w" do |f| f.puts JSON.pretty_generate(vulns) end Brakeman.notify "Comparison saved in '#{[:comparison_output_file]}'" else puts JSON.pretty_generate(vulns) end if [:exit_on_warn] && vulns[:new].count > 0 quit Brakeman::Warnings_Found_Exit_Code end end |
.early_exit_options(options) ⇒ Object
Handle options that exit without generating a report.
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/brakeman/commandline.rb', line 68 def if [:list_checks] or [:list_optional_checks] Brakeman.list_checks quit elsif [:create_config] Brakeman.dump_config quit elsif [:show_help] puts Brakeman::Options.create_option_parser({}) quit elsif [:show_version] require 'brakeman/version' puts "brakeman #{Brakeman::Version}" quit end end |
.parse_options(argv) ⇒ Object
Parse ARGV-style array of options.
Exits if options are invalid.
Returns an option hash and the app_path.
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/brakeman/commandline.rb', line 90 def argv begin , _ = Brakeman::Options.parse! argv rescue OptionParser::ParseError => e $stderr.puts e. $stderr.puts "Please see `brakeman --help` for valid options" quit(-1) end if argv[-1] app_path = argv[-1] else app_path = "." end if [:ensure_ignore_notes] and [:previous_results_json] warn '[Notice] --ensure-ignore-notes may not be used at the same ' \ 'time as --compare. Deactivating --ensure-ignore-notes. ' \ 'Please see `brakeman --help` for valid options' [:ensure_ignore_notes] = false end return , app_path end |
.quit(exit_code = 0, message = nil) ⇒ Object
Exits with the given exit code and prints out the message, if given.
Override this method for different behavior.
118 119 120 121 |
# File 'lib/brakeman/commandline.rb', line 118 def quit exit_code = 0, = nil warn if exit exit_code end |
.regular_report(options) ⇒ Object
Runs a regular report based on the options provided.
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/brakeman/commandline.rb', line 124 def regular_report tracker = run_brakeman ensure_ignore_notes_failed = false if tracker.[:ensure_ignore_notes] fingerprints = Brakeman::ignore_file_entries_with_empty_notes tracker.ignored_filter&.file unless fingerprints.empty? ensure_ignore_notes_failed = true warn '[Error] Notes required for all ignored warnings when ' \ '--ensure-ignore-notes is set. No notes provided for these ' \ 'warnings: ' fingerprints.each { |f| warn f } end end if tracker.[:exit_on_warn] and not tracker.filtered_warnings.empty? quit Brakeman::Warnings_Found_Exit_Code end if tracker.[:exit_on_error] and tracker.errors.any? quit Brakeman::Errors_Found_Exit_Code end if ensure_ignore_notes_failed quit Brakeman::Empty_Ignore_Note_Exit_Code end end |
.run(options, default_app_path = ".") ⇒ Object
Runs everything:
-
‘set_interrupt_handler`
-
‘early_exit_options`
-
‘set_options`
-
‘check_latest`
-
‘run_report`
30 31 32 33 34 35 36 |
# File 'lib/brakeman/commandline.rb', line 30 def run , default_app_path = "." set_interrupt_handler , default_app_path check_latest if [:ensure_latest] run_report end |
.run_brakeman(options) ⇒ Object
Actually run Brakeman.
Returns a Tracker object.
156 157 158 |
# File 'lib/brakeman/commandline.rb', line 156 def run_brakeman Brakeman.run .merge(:print_report => true, :quiet => [:quiet]) end |
.run_report(options) ⇒ Object
Run either a comparison or regular report based on options provided.
161 162 163 164 165 166 167 168 169 170 171 172 173 |
# File 'lib/brakeman/commandline.rb', line 161 def run_report begin if [:previous_results_json] compare_results else regular_report end rescue Brakeman::NoApplication => e quit Brakeman::No_App_Found_Exit_Code, e. rescue Brakeman::MissingChecksError => e quit Brakeman::Missing_Checks_Exit_Code, e. end end |
.set_interrupt_handler(options) ⇒ Object
Sets interrupt handler to gracefully handle Ctrl+C
176 177 178 179 180 181 182 183 184 185 186 |
# File 'lib/brakeman/commandline.rb', line 176 def set_interrupt_handler trap("INT") do warn "\nInterrupted - exiting." if [:debug] warn caller end exit! end end |
.set_options(options, default_app_path = ".") ⇒ Object
Modifies options, including setting the app_path if none is given in the options hash.
190 191 192 193 194 195 196 197 198 199 200 |
# File 'lib/brakeman/commandline.rb', line 190 def , default_app_path = "." unless [:app_path] [:app_path] = default_app_path end if [:quiet].nil? [:quiet] = :command_line end end |
.start(options = nil, app_path = ".") ⇒ Object
Main method to run Brakeman from the command line.
If no options are provided, ARGV will be parsed and used instead. Otherwise, the options are expected to be a Hash like the one returned after ARGV is parsed.
14 15 16 17 18 19 20 21 |
# File 'lib/brakeman/commandline.rb', line 14 def start = nil, app_path = "." unless , app_path = ARGV end run , app_path end |