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.
43 44 45 46 47 |
# File 'lib/brakeman/commandline.rb', line 43 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.
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/brakeman/commandline.rb', line 50 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.announce "Comparison saved in '#{[:comparison_output_file]}'" else puts JSON.pretty_generate(vulns) end Brakeman.cleanup(false) 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.
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/brakeman/commandline.rb', line 72 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.
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/brakeman/commandline.rb', line 94 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.
122 123 124 125 126 |
# File 'lib/brakeman/commandline.rb', line 122 def quit exit_code = 0, = nil warn if Brakeman.cleanup exit exit_code end |
.regular_report(options) ⇒ Object
Runs a regular report based on the options provided.
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'lib/brakeman/commandline.rb', line 129 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 tracker.[:ensure_no_obsolete_ignore_entries] && tracker.unused_fingerprints.any? warn '[Error] Obsolete ignore entries were found, exiting with an error code.' quit Brakeman::Obsolete_Ignore_Entries_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 37 38 |
# 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 quit end |
.run_brakeman(options) ⇒ Object
Actually run Brakeman.
Returns a Tracker object.
166 167 168 |
# File 'lib/brakeman/commandline.rb', line 166 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.
171 172 173 174 175 176 177 178 179 180 181 182 183 |
# File 'lib/brakeman/commandline.rb', line 171 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
186 187 188 189 190 191 192 193 194 195 196 197 198 |
# File 'lib/brakeman/commandline.rb', line 186 def set_interrupt_handler trap("INT") do warn "\nInterrupted - exiting." if [:debug] warn caller end Brakeman.cleanup 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.
202 203 204 205 206 207 208 209 210 211 212 |
# File 'lib/brakeman/commandline.rb', line 202 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 |