File: brief.rb

package info (click to toggle)
whatweb 0.6.1-1
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 23,948 kB
  • sloc: ruby: 43,493; sh: 213; makefile: 41
file content (95 lines) | stat: -rw-r--r-- 4,052 bytes parent folder | download | duplicates (2)
1
2
3
4
5
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
47
48
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95

class LoggingBrief < Logging
  def escape(s)
    # Encode all special characters # More info: http://www.asciitable.com/
    # r=/[^\x20-\x5A\x5E-\x7E]/

    # Encode low ascii non printable characters
    r = /[\x00-\x1F]/

    # based on code for CGI.escape
    s.gsub(r) { |x| "%#{x.unpack('H2' * x.size).join('%').upcase}" }
  end

  # don't use colours if not to STDOUT
  def out(target, status, results)
    brief_results = []

    # sort results so plugins that are less important at a glance are last
    #    last_plugins=%w| CSS MD5 Header-Hash Footer-Hash Tag-Hash|
    #    results=results.sort_by {|x,y| last_plugins.include?(x) ? 1 : 0 }

    results = results.sort # sort results by plugin name alphabetically

    results.each do |plugin_name, plugin_results|
      next if plugin_results.empty?
      suj = suj(plugin_results)

      certainty = suj[:certainty].to_i
      version = escape(suj[:version])
      os = escape(suj[:os])
      string = escape(suj[:string])
      accounts = escape(suj[:account])
      model = escape(suj[:model])
      firmware = escape(suj[:firmware])
      modules = escape(suj[:module])
      filepath = escape(suj[:filepath])

      # colour the output
      # be more DRY
      # if plugins have categories or tags this would be better, eg. all hash plugins are grey
      if (@f == STDOUT && $use_colour == 'auto') || ($use_colour == 'always')
        coloured_string = grey(string)
        coloured_string = cyan(string) if plugin_name == 'HTTPServer'
        coloured_string = yellow(string) if plugin_name == 'Title'

        coloured_string = grey(string) if plugin_name == 'MD5'
        coloured_string = grey(string) if plugin_name == 'Header-Hash'
        coloured_string = grey(string) if plugin_name == 'Footer-Hash'
        coloured_string = grey(string) if plugin_name == 'CSS'
        coloured_string = grey(string) if plugin_name == 'Tag-Hash'

        coloured_plugin = white(plugin_name)
        coloured_plugin = grey(plugin_name) if plugin_name == 'MD5'
        coloured_plugin = grey(plugin_name) if plugin_name == 'Header-Hash'
        coloured_plugin = grey(plugin_name) if plugin_name == 'Footer-Hash'
        coloured_plugin = grey(plugin_name) if plugin_name == 'CSS'
        coloured_plugin = grey(plugin_name) if plugin_name == 'Tag-Hash'

        p = ((certainty && certainty < 100) ? "#{grey(Helper::certainty_to_words(certainty))} " : '') +
            coloured_plugin + (!version.empty? ? "[#{green(version)}]" : '') +
            (!os.empty? ? "[#{red(os)}]" : '') +
            (!string.empty? ? "[#{coloured_string}]" : '') +
            (!accounts.empty? ? "[#{cyan(accounts)}]" : '') +
            (!model.empty? ? "[#{dark_green(model)}]" : '') +
            (!firmware.empty? ? "[#{dark_green(firmware)}]" : '') +
            (!filepath.empty? ? "[#{dark_green(filepath)}]" : '') +
            (!modules.empty? ? "[#{red(modules)}]" : '')

        brief_results << p
      else

        brief_results << ((certainty && certainty < 100) ? "#{Helper::certainty_to_words(certainty)} " : '') +
                         plugin_name + (!version.empty? ? "[#{version}]" : '') +
                         (!os.empty? ? "[#{os}]" : '') +
                         (!string.empty? ? "[#{string}]" : '') +
                         (!accounts.empty? ? " [#{accounts}]" : '') +
                         (!model.empty? ? "[#{model}]" : '') +
                         (!firmware.empty? ? "[#{firmware}]" : '') +
                         (!filepath.empty? ? "[#{filepath}]" : '') +
                         (!modules.empty? ? "[#{modules}]" : '')
      end
    end

    status_code = HTTP_Status.code(status)

    if (@f == STDOUT && $use_colour == 'auto') || ($use_colour == 'always')
      brief_results_final = "#{blue(target)} [#{status} #{status_code}] #{brief_results.join(', ')}"
    else
      brief_results_final = "#{target} [#{status} #{status_code}] #{brief_results.join(', ')}"
    end
    $semaphore.synchronize do
      @f.puts brief_results_final
    end
  end
end