Class: Arachni::UI::CLI::Reproduce::OptionParser

Inherits:
OptionParser show all
Defined in:
ui/cli/reproduce/option_parser.rb

Overview

Author:

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from OptionParser

#on, #options, #parse, #parser, #separator

Methods included from Utilities

#list_checks, #list_platforms, #list_plugins, #list_reporters, #load_profile, #print_banner, #print_issues, #save_profile

Methods included from Support::Mixins::Terminal

#clear_screen, #empty_screen, #flush, #move_to_home, #reprint, #reputs, #restr

Methods included from Arachni::Utilities

#available_port, available_port_mutex, #bytes_to_kilobytes, #bytes_to_megabytes, #caller_name, #caller_path, #cookie_decode, #cookie_encode, #cookies_from_file, #cookies_from_parser, #cookies_from_response, #exception_jail, #exclude_path?, #follow_protocol?, #form_decode, #form_encode, #forms_from_parser, #forms_from_response, #full_and_absolute_url?, #generate_token, #get_path, #hms_to_seconds, #html_decode, #html_encode, #include_path?, #links_from_parser, #links_from_response, #normalize_url, #page_from_response, #page_from_url, #parse_set_cookie, #path_in_domain?, #path_too_deep?, #port_available?, #rand_port, #random_seed, #redundant_path?, #regexp_array_match, #remove_constants, #request_parse_body, #seconds_to_hms, #skip_page?, #skip_path?, #skip_resource?, #skip_response?, #to_absolute, #uri_decode, #uri_encode, #uri_parse, #uri_parse_query, #uri_parser, #uri_rewrite

Methods included from Output

#caller_location, #debug?, #debug_level, #debug_level_1?, #debug_level_2?, #debug_level_3?, #debug_level_4?, #debug_off, #debug_on, #disable_only_positives, #error_buffer, #error_log_fd, #error_logfile, #has_error_log?, #included, #log_error, #mute, #muted?, #only_positives, #only_positives?, #print_bad, #print_debug, #print_debug_backtrace, #print_debug_exception, #print_debug_level_1, #print_debug_level_2, #print_debug_level_3, #print_debug_level_4, #print_error, #print_error_backtrace, #print_exception, #print_info, #print_line, #print_ok, #print_status, #print_verbose, #reroute_to_file, #reroute_to_file?, reset_output_options, #set_error_logfile, #unmute, #verbose?, #verbose_off, #verbose_on

Constructor Details

#initializeOptionParser

Returns a new instance of OptionParser.


26
27
28
# File 'ui/cli/reproduce/option_parser.rb', line 26

def initialize
    @issues = []
end

Instance Attribute Details

#issue_digestsObject

Returns the value of attribute issue_digests


24
25
26
# File 'ui/cli/reproduce/option_parser.rb', line 24

def issue_digests
  @issue_digests
end

#issuesObject

Returns the value of attribute issues


23
24
25
# File 'ui/cli/reproduce/option_parser.rb', line 23

def issues
  @issues
end

#reportObject

Returns the value of attribute report


19
20
21
# File 'ui/cli/reproduce/option_parser.rb', line 19

def report
  @report
end

#report_pathObject

Returns the value of attribute report_path


20
21
22
# File 'ui/cli/reproduce/option_parser.rb', line 20

def report_path
  @report_path
end

#updated_report_pathObject

Returns the value of attribute updated_report_path


21
22
23
# File 'ui/cli/reproduce/option_parser.rb', line 21

def updated_report_path
  @updated_report_path
end

Instance Method Details

#after_parseObject


44
45
46
47
# File 'ui/cli/reproduce/option_parser.rb', line 44

def after_parse
    @report_path   = ARGV.shift
    @issue_digests = ARGV.dup
end

83
84
85
# File 'ui/cli/reproduce/option_parser.rb', line 83

def banner
    "Usage: #{$0} REPORT [ISSUE_DIGEST_1 ISSUE_DIGEST_2 ...]"
end

#report_optionsObject


30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'ui/cli/reproduce/option_parser.rb', line 30

def report_options
    separator ''
    separator 'Report'

    on( '--report-save-path PATH', String,
        'Directory or file path where to store the updated report ' <<
        'including only reproduced issues.',
        'You can use the generated file to create reports in several ' +
            "formats with the 'arachni_reporter' executable."
    ) do |path|
        @updated_report_path = path
    end
end

#validateObject


49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'ui/cli/reproduce/option_parser.rb', line 49

def validate
    if !@report_path
        print_error 'No report file provided.'
        exit 1
    end

    @report_path = File.expand_path( @report_path )

    if !File.exists?( @report_path )
        print_error "Report does not exist: #{@report_path}"
        exit 1
    end

    begin
        @report = Report.load( @report_path )
    rescue => e
        print_error "Could not load report: #{@report_path}"
        print_error "Because: [#{e.class}] #{e}"
        exit 1
    end

    if @issue_digests.any?
        @issues = @report.issues.
            select { |i| @issue_digests.include? i.digest.to_s }

        if @issues.empty?
            print_error "Could not find any issues for digests: #{@issue_digests.join(' ')}"
            exit 1
        end

        @issue_digests = @issue_digests.map(&:to_i)
    end
end