Class: W4bFile::CLI

Inherits:
Object
  • Object
show all
Defined in:
lib/w4b-file/cli.rb

Class Method Summary collapse

Class Method Details

.check_files(type, scanner, url) ⇒ Object



71
72
73
74
75
# File 'lib/w4b-file/cli.rb', line 71

def self.check_files(type, scanner, url)
  resources = scanner.scan_website
  files = resources.grep(/\.(#{type})$/i)
  files
end

.display_files(files, type, base_url) ⇒ Object



77
78
79
80
81
82
83
84
85
86
# File 'lib/w4b-file/cli.rb', line 77

def self.display_files(files, type, base_url)
  return if files.empty?

  puts "[+] #{type} files :"
  files.each do |file|
    display_url = URI.join(base_url, file).to_s
    puts "    Link : #{display_url}"
  end
  puts
end

.run_checks(check_type, scanner, website_url) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/w4b-file/cli.rb', line 48

def self.run_checks(check_type, scanner, website_url)
  case check_type
  when "videos"
    files_found = check_files("mp4|avi", scanner, website_url)
    display_files(files_found, "Video", website_url) if !files_found.empty?
  when "images"
    files_found = check_files("jpg|jpeg|png", scanner, website_url)
    display_files(files_found, "Image", website_url) if !files_found.empty?
  when "zip"
    files_found = check_files("zip", scanner, website_url)
    display_files(files_found, "ZIP", website_url) if !files_found.empty?
  when "pdf"
    files_found = check_files("pdf", scanner, website_url)
    display_files(files_found, "PDF", website_url) if !files_found.empty?
  when "document"
    files_found = check_files("doc|docx|txt", scanner, website_url)
    display_files(files_found, "Document", website_url) if !files_found.empty?
  else
    puts "Invalid check type. Available options: videos, images, zip, pdf, document, --check hidden"
    exit 1
  end
end

.startObject



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/w4b-file/cli.rb', line 6

def self.start
  options = {}
  OptionParser.new do |opts|
    opts.banner = "Usage: w4b-file <website_url> [--check <file_type>]"

    opts.on("--check TYPE", "Specify the type of files to check") do |type|
      options[:check_type] = type
    end

    opts.on("--check all", "Check and display all files on the website") do
      options[:check_all] = true
    end

    opts.on("--check hidden", "Scan for hidden files on the website") do
      options[:check_hidden] = true
    end
  end.parse!

  website_url = ARGV[0]
  check_type = options[:check_type]

  if website_url.nil?
    puts "Usage: w4b-file <website_url> [--check <file_type>]"
    exit 1
  end

  scanner = Scanner.new(website_url)

  if options[:check_hidden]
    hidden_files = scanner.scan_hidden_files
    display_files(hidden_files, "Hidden", website_url) unless hidden_files.empty?
  elsif options[:check_all]
    resources = scanner.scan_website
    display_files(resources, "All", website_url) unless resources.empty?
  elsif check_type
    run_checks(check_type, scanner, website_url)
  else
    puts "Invalid option. Please specify a valid option."
    exit 1
  end
end