wpscan 3.0 → 3.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 537ba09b3dc99b6f649528a6a3d65028a8d0e6e4
4
- data.tar.gz: cf6709c4f5ca16f3818a1ccf40a75d5947273d26
3
+ metadata.gz: cce30033901db0ba94410aa02b7e73e0bc404cfa
4
+ data.tar.gz: ad5c0a88781e08b57c85f853f382b216898309a3
5
5
  SHA512:
6
- metadata.gz: 3b90b3cf872ef7c32a011f4e53a20eb5300613f21b18c66ec34871a736d499dc0fad551201f90de2069244a2a78d971041094cd1be89ae0e6b5168d048f9da26
7
- data.tar.gz: ef27c3536fe5306dc4d2e987d627b05a9b4bf5bd604408b359fcdebe48b4ba1ac49c4e15d2ae9e45095da7b954983e88cef52b2335bad94bdb94cb2490b090e1
6
+ metadata.gz: 701893ea7370d17011b5b88e10cf087454ec382393032cbd2755ccc405be44ad662b3cf7888fa651cf5f100c79ba89a90fc46a5f0d67c1d777590f0ec2a60075
7
+ data.tar.gz: dedbfef9d00d9c8117803359af9606560c7edd3b9be7460a79aa927db1d4a254707dbc32d83b598a354376396d1022544e8aa9048025b1381fb6254b927a3410
data/Gemfile.lock CHANGED
@@ -1,9 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- wpscan (3.0)
4
+ wpscan (3.0.1)
5
5
  activesupport (~> 5.0.1.0)
6
- cms_scanner (~> 0.0.37.7)
6
+ cms_scanner (~> 0.0.37.8)
7
7
  dm-constraints (~> 1.2.0)
8
8
  dm-core (~> 1.2.0)
9
9
  dm-migrations (~> 1.2.0)
@@ -21,7 +21,7 @@ GEM
21
21
  addressable (2.5.0)
22
22
  public_suffix (~> 2.0, >= 2.0.2)
23
23
  ast (2.3.0)
24
- cms_scanner (0.0.37.7)
24
+ cms_scanner (0.0.37.8)
25
25
  activesupport (~> 5.0.1)
26
26
  addressable (~> 2.5.0)
27
27
  nokogiri (~> 1.7.0.1)
data/README.md CHANGED
@@ -96,7 +96,7 @@ The "wpscan" term is a registered trademark. This License does not grant the use
96
96
 
97
97
  Prerequisites: Git
98
98
 
99
- ```git clone https://bitbucket.org/wpscan/wpscan-v3```
99
+ ```git clone https://github.com/wpscanteam/wpscan-v3```
100
100
 
101
101
  ```cd wpscan```
102
102
 
@@ -55,7 +55,7 @@ module WPScan
55
55
 
56
56
  # @return [ String ]
57
57
  def latest_version
58
- @latest_version ||= db_data['latest_version']
58
+ @latest_version ||= db_data['latest_version'] ? WPScan::Version.new(db_data['latest_version']) : nil
59
59
  end
60
60
 
61
61
  # Not used anywhere ATM
@@ -64,6 +64,20 @@ module WPScan
64
64
  @popular ||= db_data['popular']
65
65
  end
66
66
 
67
+ # @return [ String ]
68
+ def last_updated
69
+ @last_updated ||= db_data['last_updated']
70
+ end
71
+
72
+ # @return [ Boolean ]
73
+ def outdated?
74
+ @outdated ||= if version && latest_version
75
+ version < latest_version
76
+ else
77
+ false
78
+ end
79
+ end
80
+
67
81
  # URI.encode is preferered over Addressable::URI.encode as it will encode
68
82
  # leading # character:
69
83
  # URI.encode('#t#') => %23t%23
@@ -6,22 +6,7 @@
6
6
  <% @plugins.each do |plugin| -%>
7
7
 
8
8
  <%= info_icon %> <%= plugin %>
9
- | Location: <%= plugin.url %>
10
- <% if plugin.latest_version -%>
11
- | Latest Version: <%= plugin.latest_version %>
12
- <% end -%>
13
- <% if plugin.readme_url -%>
14
- | Readme: <%= plugin.readme_url %>
15
- <% end -%>
16
- <% if plugin.changelog_url -%>
17
- | Changelog: <%= plugin.changelog_url %>
18
- <% end -%>
19
- <% if plugin.directory_listing? -%>
20
- | <%= critical_icon %> Directory listing is enabled
21
- <% end -%>
22
- <% if plugin.error_log? -%>
23
- | <%= critical_icon %> An error log file has been found: <%= plugin.url('error_log') %>
24
- <% end -%>
9
+ <%= render('@wp_item', wp_item: plugin) -%>
25
10
  |
26
11
  <%= render('@finding', item: plugin) -%>
27
12
  |
@@ -1,19 +1,4 @@
1
- | Location: <%= @theme.url %>
2
- <% if @theme.latest_version -%>
3
- | Latest Version: <%= @theme.latest_version %>
4
- <% end -%>
5
- <% if @theme.readme_url -%>
6
- | Readme: <%= @theme.readme_url %>
7
- <% end -%>
8
- <% if @theme.changelog_url -%>
9
- | Changelog: <%= @theme.changelog_url %>
10
- <% end -%>
11
- <% if @theme.directory_listing? -%>
12
- | <%= critical_icon %> Directory listing is enabled
13
- <% end -%>
14
- <% if @theme.error_log? -%>
15
- | <%= critical_icon %> An error log file has been found: <%= @theme.url('error_log') %>
16
- <% end -%>
1
+ <%= render('@wp_item', wp_item: @theme) -%>
17
2
  | Style URL: <%= @theme.style_url %>
18
3
  <% if @theme.style_name -%>
19
4
  | Style Name: <%= @theme.style_name %>
@@ -0,0 +1,22 @@
1
+ | Location: <%= @wp_item.url %>
2
+ <% if @wp_item.latest_version && !@wp_item.outdated? -%>
3
+ | Latest Version: <%= @wp_item.latest_version %><% if @wp_item.version %> (up to date)<% end %>
4
+ <% end -%>
5
+ <% if @wp_item.last_updated -%>
6
+ | Last Updated: <%= @wp_item.last_updated %>
7
+ <% end -%>
8
+ <% if @wp_item.readme_url -%>
9
+ | Readme: <%= @wp_item.readme_url %>
10
+ <% end -%>
11
+ <% if @wp_item.changelog_url -%>
12
+ | Changelog: <%= @wp_item.changelog_url %>
13
+ <% end -%>
14
+ <% if @wp_item.latest_version && @wp_item.outdated? -%>
15
+ | <%= warning_icon %> The version is out of date, the latest version is <%= @wp_item.latest_version %>
16
+ <% end -%>
17
+ <% if @wp_item.directory_listing? -%>
18
+ | <%= critical_icon %> Directory listing is enabled
19
+ <% end -%>
20
+ <% if @wp_item.error_log? -%>
21
+ | <%= critical_icon %> An error log file has been found: <%= @wp_item.url('error_log') %>
22
+ <% end -%>
@@ -3,12 +3,7 @@
3
3
  <% last_index = @plugins.size - 1 -%>
4
4
  <% @plugins.each_with_index do |plugin, index| -%>
5
5
  <%= plugin.name.to_json %>: {
6
- "location": <%= plugin.url.to_json %>,
7
- "latest_version": <%= plugin.latest_version.to_json %>,
8
- "readme_url": <%= plugin.readme_url.to_json %>,
9
- "changelog_url": <%= plugin.changelog_url.to_json %>,
10
- "directory_listing": <%= plugin.directory_listing?.to_json %>,
11
- "error_log_url": <% if plugin.error_log? %><%= plugin.url('error_log').to_json %><% else %>null<% end %>,
6
+ <%= render('@wp_item', wp_item: plugin) %>,
12
7
  <%= render('@finding', item: plugin) -%>,
13
8
  <% if plugin.version -%>
14
9
  "version": {
@@ -1,10 +1,4 @@
1
- "name": <%= @theme.name.to_json %>,
2
- "location": <%= @theme.url.to_json %>,
3
- "latest_version": <%= @theme.latest_version.to_json %>,
4
- "readme_url": <%= @theme.readme_url.to_json %>,
5
- "changelog_url": <%= @theme.changelog_url.to_json %>,
6
- "directory_listing": <%= @theme.directory_listing?.to_json %>,
7
- "error_log_url": <% if @theme.error_log? %><%= @theme.url('error_log').to_json %><% else %>null<% end %>,
1
+ <%= render('@wp_item', wp_item: @theme) %>,
8
2
  "style_url": <%= @theme.style_url.to_json %>,
9
3
  "style_name": <%= @theme.style_name.to_json %>,
10
4
  "style_uri": <%= @theme.style_uri.to_json %>,
@@ -0,0 +1,9 @@
1
+ "name": <%= @wp_item.name.to_json %>,
2
+ "location": <%= @wp_item.url.to_json %>,
3
+ "latest_version": <%= @wp_item.latest_version ? @wp_item.latest_version.number.to_json : nil.to_json %>,
4
+ "last_updated": <%= @wp_item.last_updated.to_json %>,
5
+ "outdated": <%= @wp_item.outdated?.to_json %>,
6
+ "readme_url": <%= @wp_item.readme_url.to_json %>,
7
+ "changelog_url": <%= @wp_item.changelog_url.to_json %>,
8
+ "directory_listing": <%= @wp_item.directory_listing?.to_json %>,
9
+ "error_log_url": <% if @wp_item.error_log? %><%= @wp_item.url('error_log').to_json %><% else %>null<% end %>
data/coverage/index.html CHANGED
@@ -14,26 +14,26 @@
14
14
  <img src="./assets/0.10.0/loading.gif" alt="loading"/>
15
15
  </div>
16
16
  <div id="wrapper" style="display:none;">
17
- <div class="timestamp">Generated <abbr class="timeago" title="2017-01-27T15:09:27+00:00">2017-01-27T15:09:27+00:00</abbr></div>
17
+ <div class="timestamp">Generated <abbr class="timeago" title="2017-01-28T17:33:26+00:00">2017-01-28T17:33:26+00:00</abbr></div>
18
18
  <ul class="group_tabs"></ul>
19
19
 
20
20
  <div id="content">
21
21
  <div class="file_list_container" id="AllFiles">
22
22
  <h2>
23
23
  <span class="group_name">All Files</span>
24
- (<span class="covered_percent"><span class="yellow">82.81%</span></span>
24
+ (<span class="covered_percent"><span class="yellow">82.88%</span></span>
25
25
  covered at
26
26
  <span class="covered_strength">
27
27
  <span class="green">
28
- 16.37
28
+ 16.47
29
29
  </span>
30
30
  </span> hits/line)
31
31
  </h2>
32
32
  <a name="AllFiles"></a>
33
33
  <div>
34
34
  <b>108</b> files in total.
35
- <b>1611</b> relevant lines.
36
- <span class="green"><b>1334</b> lines covered</span> and
35
+ <b>1618</b> relevant lines.
36
+ <span class="green"><b>1341</b> lines covered</span> and
37
37
  <span class="red"><b>277</b> lines missed </span>
38
38
  </div>
39
39
  <table class="file_list">
@@ -257,7 +257,7 @@
257
257
  <td>12</td>
258
258
  <td>12</td>
259
259
  <td>0</td>
260
- <td>3.1</td>
260
+ <td>2.8</td>
261
261
  </tr>
262
262
 
263
263
  <tr>
@@ -377,7 +377,7 @@
377
377
  <td>13</td>
378
378
  <td>13</td>
379
379
  <td>0</td>
380
- <td>3.8</td>
380
+ <td>4.1</td>
381
381
  </tr>
382
382
 
383
383
  <tr>
@@ -387,7 +387,7 @@
387
387
  <td>33</td>
388
388
  <td>33</td>
389
389
  <td>0</td>
390
- <td>76.4</td>
390
+ <td>77.4</td>
391
391
  </tr>
392
392
 
393
393
  <tr>
@@ -797,7 +797,7 @@
797
797
  <td>10</td>
798
798
  <td>10</td>
799
799
  <td>0</td>
800
- <td>60.0</td>
800
+ <td>62.8</td>
801
801
  </tr>
802
802
 
803
803
  <tr>
@@ -807,7 +807,7 @@
807
807
  <td>37</td>
808
808
  <td>35</td>
809
809
  <td>2</td>
810
- <td>80.6</td>
810
+ <td>80.9</td>
811
811
  </tr>
812
812
 
813
813
  <tr>
@@ -832,12 +832,12 @@
832
832
 
833
833
  <tr>
834
834
  <td class="strong"><a href="#66e55c6afef8eb3f7f5760fdb675fffe42be4db9" class="src_link" title="app/models/wp_item.rb">app/models/wp_item.rb</a></td>
835
- <td class="green strong">98.28 %</td>
836
- <td>142</td>
837
- <td>58</td>
838
- <td>57</td>
835
+ <td class="green strong">98.46 %</td>
836
+ <td>156</td>
837
+ <td>65</td>
838
+ <td>64</td>
839
839
  <td>1</td>
840
- <td>120.4</td>
840
+ <td>109.4</td>
841
841
  </tr>
842
842
 
843
843
  <tr>
@@ -863,7 +863,7 @@
863
863
  <tr>
864
864
  <td class="strong"><a href="#d34ffdcc4fec57d1e9e9196b9cc1a435beb7d9ff" class="src_link" title="lib/wpscan.rb">lib/wpscan.rb</a></td>
865
865
  <td class="green strong">100.0 %</td>
866
- <td>44</td>
866
+ <td>47</td>
867
867
  <td>30</td>
868
868
  <td>30</td>
869
869
  <td>0</td>
@@ -987,7 +987,7 @@
987
987
  <td>7</td>
988
988
  <td>7</td>
989
989
  <td>0</td>
990
- <td>10.7</td>
990
+ <td>16.4</td>
991
991
  </tr>
992
992
 
993
993
  <tr>
@@ -1107,7 +1107,7 @@
1107
1107
  <td>42</td>
1108
1108
  <td>42</td>
1109
1109
  <td>0</td>
1110
- <td>62.0</td>
1110
+ <td>63.0</td>
1111
1111
  </tr>
1112
1112
 
1113
1113
  <tr>
@@ -7160,14 +7160,14 @@
7160
7160
  <code class="ruby"> potential_files.each do |file|</code>
7161
7161
  </li>
7162
7162
 
7163
- <li class="covered" data-hits="7" data-linenumber="9">
7164
- <span class="hits">7</span>
7163
+ <li class="covered" data-hits="6" data-linenumber="9">
7164
+ <span class="hits">6</span>
7165
7165
 
7166
7166
  <code class="ruby"> url = target.url(file)</code>
7167
7167
  </li>
7168
7168
 
7169
- <li class="covered" data-hits="7" data-linenumber="10">
7170
- <span class="hits">7</span>
7169
+ <li class="covered" data-hits="6" data-linenumber="10">
7170
+ <span class="hits">6</span>
7171
7171
 
7172
7172
  <code class="ruby"> res = Browser.get(url)</code>
7173
7173
  </li>
@@ -7178,8 +7178,8 @@
7178
7178
  <code class="ruby"></code>
7179
7179
  </li>
7180
7180
 
7181
- <li class="covered" data-hits="7" data-linenumber="12">
7182
- <span class="hits">7</span>
7181
+ <li class="covered" data-hits="6" data-linenumber="12">
7182
+ <span class="hits">6</span>
7183
7183
 
7184
7184
  <code class="ruby"> if res.code == 200 &amp;&amp; res.body =~ /wordpress/i</code>
7185
7185
  </li>
@@ -9506,8 +9506,8 @@
9506
9506
  <code class="ruby"> potential_urls.each do |url|</code>
9507
9507
  </li>
9508
9508
 
9509
- <li class="covered" data-hits="6" data-linenumber="14">
9510
- <span class="hits">6</span>
9509
+ <li class="covered" data-hits="8" data-linenumber="14">
9510
+ <span class="hits">8</span>
9511
9511
 
9512
9512
  <code class="ruby"> res = Browser.get(url)</code>
9513
9513
  </li>
@@ -9518,8 +9518,8 @@
9518
9518
  <code class="ruby"></code>
9519
9519
  </li>
9520
9520
 
9521
- <li class="covered" data-hits="6" data-linenumber="16">
9522
- <span class="hits">6</span>
9521
+ <li class="covered" data-hits="8" data-linenumber="16">
9522
+ <span class="hits">8</span>
9523
9523
 
9524
9524
  <code class="ruby"> next unless res.code == 200 &amp;&amp; res.body =~ /Project-Id-Version: LayerSlider WP v?([0-9\.][^\\\s]+)/</code>
9525
9525
  </li>
@@ -9746,14 +9746,14 @@
9746
9746
  <code class="ruby"> WPScan::WpItem::READMES.each do |file|</code>
9747
9747
  </li>
9748
9748
 
9749
- <li class="covered" data-hits="68" data-linenumber="11">
9750
- <span class="hits">68</span>
9749
+ <li class="covered" data-hits="79" data-linenumber="11">
9750
+ <span class="hits">79</span>
9751
9751
 
9752
9752
  <code class="ruby"> url = target.url(file)</code>
9753
9753
  </li>
9754
9754
 
9755
- <li class="covered" data-hits="68" data-linenumber="12">
9756
- <span class="hits">68</span>
9755
+ <li class="covered" data-hits="79" data-linenumber="12">
9756
+ <span class="hits">79</span>
9757
9757
 
9758
9758
  <code class="ruby"> res = Browser.get(url)</code>
9759
9759
  </li>
@@ -9764,8 +9764,8 @@
9764
9764
  <code class="ruby"></code>
9765
9765
  </li>
9766
9766
 
9767
- <li class="covered" data-hits="68" data-linenumber="14">
9768
- <span class="hits">68</span>
9767
+ <li class="covered" data-hits="79" data-linenumber="14">
9768
+ <span class="hits">79</span>
9769
9769
 
9770
9770
  <code class="ruby"> next unless res.code == 200 &amp;&amp; !(numbers = version_numbers(res.body)).empty?</code>
9771
9771
  </li>
@@ -18974,8 +18974,8 @@
18974
18974
  <code class="ruby"> def initialize(name, target, opts = {})</code>
18975
18975
  </li>
18976
18976
 
18977
- <li class="covered" data-hits="290" data-linenumber="6">
18978
- <span class="hits">290</span>
18977
+ <li class="covered" data-hits="299" data-linenumber="6">
18978
+ <span class="hits">299</span>
18979
18979
 
18980
18980
  <code class="ruby"> super(name, target, opts)</code>
18981
18981
  </li>
@@ -18986,8 +18986,8 @@
18986
18986
  <code class="ruby"></code>
18987
18987
  </li>
18988
18988
 
18989
- <li class="covered" data-hits="290" data-linenumber="8">
18990
- <span class="hits">290</span>
18989
+ <li class="covered" data-hits="299" data-linenumber="8">
18990
+ <span class="hits">299</span>
18991
18991
 
18992
18992
  <code class="ruby"> @uri = Addressable::URI.parse(target.url(&quot;wp-content/plugins/#{name}/&quot;))</code>
18993
18993
  </li>
@@ -19016,8 +19016,8 @@
19016
19016
  <code class="ruby"> def db_data</code>
19017
19017
  </li>
19018
19018
 
19019
- <li class="covered" data-hits="5" data-linenumber="13">
19020
- <span class="hits">5</span>
19019
+ <li class="covered" data-hits="15" data-linenumber="13">
19020
+ <span class="hits">15</span>
19021
19021
 
19022
19022
  <code class="ruby"> DB::Plugin.db_data(name)</code>
19023
19023
  </li>
@@ -19220,8 +19220,8 @@
19220
19220
  <code class="ruby"> def db_data</code>
19221
19221
  </li>
19222
19222
 
19223
- <li class="covered" data-hits="12" data-linenumber="19">
19224
- <span class="hits">12</span>
19223
+ <li class="covered" data-hits="22" data-linenumber="19">
19224
+ <span class="hits">22</span>
19225
19225
 
19226
19226
  <code class="ruby"> DB::Theme.db_data(name)</code>
19227
19227
  </li>
@@ -20379,10 +20379,10 @@
20379
20379
  <div class="source_table" id="66e55c6afef8eb3f7f5760fdb675fffe42be4db9">
20380
20380
  <div class="header">
20381
20381
  <h3>app/models/wp_item.rb</h3>
20382
- <h4><span class="green">98.28 %</span> covered</h4>
20382
+ <h4><span class="green">98.46 %</span> covered</h4>
20383
20383
  <div>
20384
- <b>58</b> relevant lines.
20385
- <span class="green"><b>57</b> lines covered</span> and
20384
+ <b>65</b> relevant lines.
20385
+ <span class="green"><b>64</b> lines covered</span> and
20386
20386
  <span class="red"><b>1</b> lines missed.</span>
20387
20387
  </div>
20388
20388
  </div>
@@ -20510,20 +20510,20 @@
20510
20510
  <code class="ruby"> def initialize(name, target, opts = {})</code>
20511
20511
  </li>
20512
20512
 
20513
- <li class="covered" data-hits="375" data-linenumber="21">
20514
- <span class="hits">375</span>
20513
+ <li class="covered" data-hits="384" data-linenumber="21">
20514
+ <span class="hits">384</span>
20515
20515
 
20516
20516
  <code class="ruby"> @name = URI.decode(name)</code>
20517
20517
  </li>
20518
20518
 
20519
- <li class="covered" data-hits="375" data-linenumber="22">
20520
- <span class="hits">375</span>
20519
+ <li class="covered" data-hits="384" data-linenumber="22">
20520
+ <span class="hits">384</span>
20521
20521
 
20522
20522
  <code class="ruby"> @target = target</code>
20523
20523
  </li>
20524
20524
 
20525
- <li class="covered" data-hits="375" data-linenumber="23">
20526
- <span class="hits">375</span>
20525
+ <li class="covered" data-hits="384" data-linenumber="23">
20526
+ <span class="hits">384</span>
20527
20527
 
20528
20528
  <code class="ruby"> @uri = Addressable::URI.parse(opts[:url]) if opts[:url]</code>
20529
20529
  </li>
@@ -20540,8 +20540,8 @@
20540
20540
  <code class="ruby"> # Options used to detect the version</code>
20541
20541
  </li>
20542
20542
 
20543
- <li class="covered" data-hits="375" data-linenumber="26">
20544
- <span class="hits">375</span>
20543
+ <li class="covered" data-hits="384" data-linenumber="26">
20544
+ <span class="hits">384</span>
20545
20545
 
20546
20546
  <code class="ruby"> @detection_opts = { mode: opts[:mode], confidence_threshold: opts[:version_all] ? 0 : 100 }</code>
20547
20547
  </li>
@@ -20552,8 +20552,8 @@
20552
20552
  <code class="ruby"></code>
20553
20553
  </li>
20554
20554
 
20555
- <li class="covered" data-hits="375" data-linenumber="28">
20556
- <span class="hits">375</span>
20555
+ <li class="covered" data-hits="384" data-linenumber="28">
20556
+ <span class="hits">384</span>
20557
20557
 
20558
20558
  <code class="ruby"> parse_finding_options(opts)</code>
20559
20559
  </li>
@@ -20732,10 +20732,10 @@
20732
20732
  <code class="ruby"> def latest_version</code>
20733
20733
  </li>
20734
20734
 
20735
- <li class="covered" data-hits="6" data-linenumber="58">
20736
- <span class="hits">6</span>
20735
+ <li class="covered" data-hits="17" data-linenumber="58">
20736
+ <span class="hits">17</span>
20737
20737
 
20738
- <code class="ruby"> @latest_version ||= db_data[&#39;latest_version&#39;]</code>
20738
+ <code class="ruby"> @latest_version ||= db_data[&#39;latest_version&#39;] ? WPScan::Version.new(db_data[&#39;latest_version&#39;]) : nil</code>
20739
20739
  </li>
20740
20740
 
20741
20741
  <li class="never" data-hits="" data-linenumber="59">
@@ -20789,454 +20789,538 @@
20789
20789
  <li class="never" data-hits="" data-linenumber="67">
20790
20790
 
20791
20791
 
20792
+ <code class="ruby"> # @return [ String ]</code>
20793
+ </li>
20794
+
20795
+ <li class="covered" data-hits="1" data-linenumber="68">
20796
+ <span class="hits">1</span>
20797
+
20798
+ <code class="ruby"> def last_updated</code>
20799
+ </li>
20800
+
20801
+ <li class="covered" data-hits="8" data-linenumber="69">
20802
+ <span class="hits">8</span>
20803
+
20804
+ <code class="ruby"> @last_updated ||= db_data[&#39;last_updated&#39;]</code>
20805
+ </li>
20806
+
20807
+ <li class="never" data-hits="" data-linenumber="70">
20808
+
20809
+
20810
+ <code class="ruby"> end</code>
20811
+ </li>
20812
+
20813
+ <li class="never" data-hits="" data-linenumber="71">
20814
+
20815
+
20816
+ <code class="ruby"></code>
20817
+ </li>
20818
+
20819
+ <li class="never" data-hits="" data-linenumber="72">
20820
+
20821
+
20822
+ <code class="ruby"> # @return [ Boolean ]</code>
20823
+ </li>
20824
+
20825
+ <li class="covered" data-hits="1" data-linenumber="73">
20826
+ <span class="hits">1</span>
20827
+
20828
+ <code class="ruby"> def outdated?</code>
20829
+ </li>
20830
+
20831
+ <li class="covered" data-hits="8" data-linenumber="74">
20832
+ <span class="hits">8</span>
20833
+
20834
+ <code class="ruby"> @outdated ||= if version &amp;&amp; latest_version</code>
20835
+ </li>
20836
+
20837
+ <li class="covered" data-hits="2" data-linenumber="75">
20838
+ <span class="hits">2</span>
20839
+
20840
+ <code class="ruby"> version &lt; latest_version</code>
20841
+ </li>
20842
+
20843
+ <li class="never" data-hits="" data-linenumber="76">
20844
+
20845
+
20846
+ <code class="ruby"> else</code>
20847
+ </li>
20848
+
20849
+ <li class="covered" data-hits="6" data-linenumber="77">
20850
+ <span class="hits">6</span>
20851
+
20852
+ <code class="ruby"> false</code>
20853
+ </li>
20854
+
20855
+ <li class="covered" data-hits="8" data-linenumber="78">
20856
+ <span class="hits">8</span>
20857
+
20858
+ <code class="ruby"> end</code>
20859
+ </li>
20860
+
20861
+ <li class="never" data-hits="" data-linenumber="79">
20862
+
20863
+
20864
+ <code class="ruby"> end</code>
20865
+ </li>
20866
+
20867
+ <li class="never" data-hits="" data-linenumber="80">
20868
+
20869
+
20870
+ <code class="ruby"></code>
20871
+ </li>
20872
+
20873
+ <li class="never" data-hits="" data-linenumber="81">
20874
+
20875
+
20792
20876
  <code class="ruby"> # URI.encode is preferered over Addressable::URI.encode as it will encode</code>
20793
20877
  </li>
20794
20878
 
20795
- <li class="never" data-hits="" data-linenumber="68">
20879
+ <li class="never" data-hits="" data-linenumber="82">
20796
20880
 
20797
20881
 
20798
20882
  <code class="ruby"> # leading # character:</code>
20799
20883
  </li>
20800
20884
 
20801
- <li class="never" data-hits="" data-linenumber="69">
20885
+ <li class="never" data-hits="" data-linenumber="83">
20802
20886
 
20803
20887
 
20804
20888
  <code class="ruby"> # URI.encode(&#39;#t#&#39;) =&gt; %23t%23</code>
20805
20889
  </li>
20806
20890
 
20807
- <li class="never" data-hits="" data-linenumber="70">
20891
+ <li class="never" data-hits="" data-linenumber="84">
20808
20892
 
20809
20893
 
20810
20894
  <code class="ruby"> # Addressable::URI.encode(&#39;#t#&#39;) =&gt; #t%23</code>
20811
20895
  </li>
20812
20896
 
20813
- <li class="never" data-hits="" data-linenumber="71">
20897
+ <li class="never" data-hits="" data-linenumber="85">
20814
20898
 
20815
20899
 
20816
20900
  <code class="ruby"> #</code>
20817
20901
  </li>
20818
20902
 
20819
- <li class="never" data-hits="" data-linenumber="72">
20903
+ <li class="never" data-hits="" data-linenumber="86">
20820
20904
 
20821
20905
 
20822
20906
  <code class="ruby"> # @param [ String ] path Optional path to merge with the uri</code>
20823
20907
  </li>
20824
20908
 
20825
- <li class="never" data-hits="" data-linenumber="73">
20909
+ <li class="never" data-hits="" data-linenumber="87">
20826
20910
 
20827
20911
 
20828
20912
  <code class="ruby"> #</code>
20829
20913
  </li>
20830
20914
 
20831
- <li class="never" data-hits="" data-linenumber="74">
20915
+ <li class="never" data-hits="" data-linenumber="88">
20832
20916
 
20833
20917
 
20834
20918
  <code class="ruby"> # @return [ String ]</code>
20835
20919
  </li>
20836
20920
 
20837
- <li class="covered" data-hits="1" data-linenumber="75">
20921
+ <li class="covered" data-hits="1" data-linenumber="89">
20838
20922
  <span class="hits">1</span>
20839
20923
 
20840
20924
  <code class="ruby"> def url(path = nil)</code>
20841
20925
  </li>
20842
20926
 
20843
- <li class="covered" data-hits="208" data-linenumber="76">
20844
- <span class="hits">208</span>
20927
+ <li class="covered" data-hits="219" data-linenumber="90">
20928
+ <span class="hits">219</span>
20845
20929
 
20846
20930
  <code class="ruby"> return unless @uri</code>
20847
20931
  </li>
20848
20932
 
20849
- <li class="covered" data-hits="207" data-linenumber="77">
20850
- <span class="hits">207</span>
20933
+ <li class="covered" data-hits="218" data-linenumber="91">
20934
+ <span class="hits">218</span>
20851
20935
 
20852
20936
  <code class="ruby"> return @uri.to_s unless path</code>
20853
20937
  </li>
20854
20938
 
20855
- <li class="never" data-hits="" data-linenumber="78">
20939
+ <li class="never" data-hits="" data-linenumber="92">
20856
20940
 
20857
20941
 
20858
20942
  <code class="ruby"></code>
20859
20943
  </li>
20860
20944
 
20861
- <li class="covered" data-hits="193" data-linenumber="79">
20862
- <span class="hits">193</span>
20945
+ <li class="covered" data-hits="204" data-linenumber="93">
20946
+ <span class="hits">204</span>
20863
20947
 
20864
20948
  <code class="ruby"> @uri.join(URI.encode(path)).to_s</code>
20865
20949
  </li>
20866
20950
 
20867
- <li class="never" data-hits="" data-linenumber="80">
20951
+ <li class="never" data-hits="" data-linenumber="94">
20868
20952
 
20869
20953
 
20870
20954
  <code class="ruby"> end</code>
20871
20955
  </li>
20872
20956
 
20873
- <li class="never" data-hits="" data-linenumber="81">
20957
+ <li class="never" data-hits="" data-linenumber="95">
20874
20958
 
20875
20959
 
20876
20960
  <code class="ruby"></code>
20877
20961
  </li>
20878
20962
 
20879
- <li class="never" data-hits="" data-linenumber="82">
20963
+ <li class="never" data-hits="" data-linenumber="96">
20880
20964
 
20881
20965
 
20882
20966
  <code class="ruby"> # @return [ Boolean ]</code>
20883
20967
  </li>
20884
20968
 
20885
- <li class="covered" data-hits="1" data-linenumber="83">
20969
+ <li class="covered" data-hits="1" data-linenumber="97">
20886
20970
  <span class="hits">1</span>
20887
20971
 
20888
20972
  <code class="ruby"> def ==(other)</code>
20889
20973
  </li>
20890
20974
 
20891
- <li class="covered" data-hits="1532" data-linenumber="84">
20975
+ <li class="covered" data-hits="1532" data-linenumber="98">
20892
20976
  <span class="hits">1532</span>
20893
20977
 
20894
20978
  <code class="ruby"> return false unless self.class == other.class</code>
20895
20979
  </li>
20896
20980
 
20897
- <li class="never" data-hits="" data-linenumber="85">
20981
+ <li class="never" data-hits="" data-linenumber="99">
20898
20982
 
20899
20983
 
20900
20984
  <code class="ruby"></code>
20901
20985
  </li>
20902
20986
 
20903
- <li class="covered" data-hits="1531" data-linenumber="86">
20987
+ <li class="covered" data-hits="1531" data-linenumber="100">
20904
20988
  <span class="hits">1531</span>
20905
20989
 
20906
20990
  <code class="ruby"> name == other.name</code>
20907
20991
  </li>
20908
20992
 
20909
- <li class="never" data-hits="" data-linenumber="87">
20993
+ <li class="never" data-hits="" data-linenumber="101">
20910
20994
 
20911
20995
 
20912
20996
  <code class="ruby"> end</code>
20913
20997
  </li>
20914
20998
 
20915
- <li class="never" data-hits="" data-linenumber="88">
20999
+ <li class="never" data-hits="" data-linenumber="102">
20916
21000
 
20917
21001
 
20918
21002
  <code class="ruby"></code>
20919
21003
  </li>
20920
21004
 
20921
- <li class="covered" data-hits="1" data-linenumber="89">
21005
+ <li class="covered" data-hits="1" data-linenumber="103">
20922
21006
  <span class="hits">1</span>
20923
21007
 
20924
21008
  <code class="ruby"> def to_s</code>
20925
21009
  </li>
20926
21010
 
20927
- <li class="covered" data-hits="1240" data-linenumber="90">
21011
+ <li class="covered" data-hits="1240" data-linenumber="104">
20928
21012
  <span class="hits">1240</span>
20929
21013
 
20930
21014
  <code class="ruby"> name</code>
20931
21015
  </li>
20932
21016
 
20933
- <li class="never" data-hits="" data-linenumber="91">
21017
+ <li class="never" data-hits="" data-linenumber="105">
20934
21018
 
20935
21019
 
20936
21020
  <code class="ruby"> end</code>
20937
21021
  </li>
20938
21022
 
20939
- <li class="never" data-hits="" data-linenumber="92">
21023
+ <li class="never" data-hits="" data-linenumber="106">
20940
21024
 
20941
21025
 
20942
21026
  <code class="ruby"></code>
20943
21027
  </li>
20944
21028
 
20945
- <li class="never" data-hits="" data-linenumber="93">
21029
+ <li class="never" data-hits="" data-linenumber="107">
20946
21030
 
20947
21031
 
20948
21032
  <code class="ruby"> # @return [ Symbol ] The Class name associated to the item name</code>
20949
21033
  </li>
20950
21034
 
20951
- <li class="covered" data-hits="1" data-linenumber="94">
21035
+ <li class="covered" data-hits="1" data-linenumber="108">
20952
21036
  <span class="hits">1</span>
20953
21037
 
20954
21038
  <code class="ruby"> def classify_name</code>
20955
21039
  </li>
20956
21040
 
20957
- <li class="covered" data-hits="7" data-linenumber="95">
21041
+ <li class="covered" data-hits="7" data-linenumber="109">
20958
21042
  <span class="hits">7</span>
20959
21043
 
20960
21044
  <code class="ruby"> name.to_s.tr(&#39;-&#39;, &#39;_&#39;).camelize.to_s.to_sym</code>
20961
21045
  </li>
20962
21046
 
20963
- <li class="never" data-hits="" data-linenumber="96">
21047
+ <li class="never" data-hits="" data-linenumber="110">
20964
21048
 
20965
21049
 
20966
21050
  <code class="ruby"> end</code>
20967
21051
  </li>
20968
21052
 
20969
- <li class="never" data-hits="" data-linenumber="97">
21053
+ <li class="never" data-hits="" data-linenumber="111">
20970
21054
 
20971
21055
 
20972
21056
  <code class="ruby"></code>
20973
21057
  </li>
20974
21058
 
20975
- <li class="never" data-hits="" data-linenumber="98">
21059
+ <li class="never" data-hits="" data-linenumber="112">
20976
21060
 
20977
21061
 
20978
21062
  <code class="ruby"> # @return [ String ] The readme url if found</code>
20979
21063
  </li>
20980
21064
 
20981
- <li class="covered" data-hits="1" data-linenumber="99">
21065
+ <li class="covered" data-hits="1" data-linenumber="113">
20982
21066
  <span class="hits">1</span>
20983
21067
 
20984
21068
  <code class="ruby"> def readme_url</code>
20985
21069
  </li>
20986
21070
 
20987
- <li class="covered" data-hits="9" data-linenumber="100">
21071
+ <li class="covered" data-hits="9" data-linenumber="114">
20988
21072
  <span class="hits">9</span>
20989
21073
 
20990
21074
  <code class="ruby"> return if detection_opts[:mode] == :passive</code>
20991
21075
  </li>
20992
21076
 
20993
- <li class="never" data-hits="" data-linenumber="101">
21077
+ <li class="never" data-hits="" data-linenumber="115">
20994
21078
 
20995
21079
 
20996
21080
  <code class="ruby"></code>
20997
21081
  </li>
20998
21082
 
20999
- <li class="covered" data-hits="9" data-linenumber="102">
21083
+ <li class="covered" data-hits="9" data-linenumber="116">
21000
21084
  <span class="hits">9</span>
21001
21085
 
21002
21086
  <code class="ruby"> if @readme_url.nil?</code>
21003
21087
  </li>
21004
21088
 
21005
- <li class="covered" data-hits="6" data-linenumber="103">
21089
+ <li class="covered" data-hits="6" data-linenumber="117">
21006
21090
  <span class="hits">6</span>
21007
21091
 
21008
21092
  <code class="ruby"> READMES.each do |path|</code>
21009
21093
  </li>
21010
21094
 
21011
- <li class="covered" data-hits="6" data-linenumber="104">
21095
+ <li class="covered" data-hits="6" data-linenumber="118">
21012
21096
  <span class="hits">6</span>
21013
21097
 
21014
21098
  <code class="ruby"> return @readme_url = url(path) if Browser.get(url(path)).code == 200</code>
21015
21099
  </li>
21016
21100
 
21017
- <li class="never" data-hits="" data-linenumber="105">
21101
+ <li class="never" data-hits="" data-linenumber="119">
21018
21102
 
21019
21103
 
21020
21104
  <code class="ruby"> end</code>
21021
21105
  </li>
21022
21106
 
21023
- <li class="never" data-hits="" data-linenumber="106">
21107
+ <li class="never" data-hits="" data-linenumber="120">
21024
21108
 
21025
21109
 
21026
21110
  <code class="ruby"> end</code>
21027
21111
  </li>
21028
21112
 
21029
- <li class="never" data-hits="" data-linenumber="107">
21113
+ <li class="never" data-hits="" data-linenumber="121">
21030
21114
 
21031
21115
 
21032
21116
  <code class="ruby"></code>
21033
21117
  </li>
21034
21118
 
21035
- <li class="covered" data-hits="3" data-linenumber="108">
21119
+ <li class="covered" data-hits="3" data-linenumber="122">
21036
21120
  <span class="hits">3</span>
21037
21121
 
21038
21122
  <code class="ruby"> @readme_url</code>
21039
21123
  </li>
21040
21124
 
21041
- <li class="never" data-hits="" data-linenumber="109">
21125
+ <li class="never" data-hits="" data-linenumber="123">
21042
21126
 
21043
21127
 
21044
21128
  <code class="ruby"> end</code>
21045
21129
  </li>
21046
21130
 
21047
- <li class="never" data-hits="" data-linenumber="110">
21131
+ <li class="never" data-hits="" data-linenumber="124">
21048
21132
 
21049
21133
 
21050
21134
  <code class="ruby"></code>
21051
21135
  </li>
21052
21136
 
21053
- <li class="never" data-hits="" data-linenumber="111">
21137
+ <li class="never" data-hits="" data-linenumber="125">
21054
21138
 
21055
21139
 
21056
21140
  <code class="ruby"> # @return [ String, false ] The changelog urr if found</code>
21057
21141
  </li>
21058
21142
 
21059
- <li class="covered" data-hits="1" data-linenumber="112">
21143
+ <li class="covered" data-hits="1" data-linenumber="126">
21060
21144
  <span class="hits">1</span>
21061
21145
 
21062
21146
  <code class="ruby"> def changelog_url</code>
21063
21147
  </li>
21064
21148
 
21065
- <li class="covered" data-hits="9" data-linenumber="113">
21149
+ <li class="covered" data-hits="9" data-linenumber="127">
21066
21150
  <span class="hits">9</span>
21067
21151
 
21068
21152
  <code class="ruby"> return if detection_opts[:mode] == :passive</code>
21069
21153
  </li>
21070
21154
 
21071
- <li class="never" data-hits="" data-linenumber="114">
21155
+ <li class="never" data-hits="" data-linenumber="128">
21072
21156
 
21073
21157
 
21074
21158
  <code class="ruby"></code>
21075
21159
  </li>
21076
21160
 
21077
- <li class="covered" data-hits="9" data-linenumber="115">
21161
+ <li class="covered" data-hits="9" data-linenumber="129">
21078
21162
  <span class="hits">9</span>
21079
21163
 
21080
21164
  <code class="ruby"> if @changelog_url.nil?</code>
21081
21165
  </li>
21082
21166
 
21083
- <li class="covered" data-hits="6" data-linenumber="116">
21167
+ <li class="covered" data-hits="6" data-linenumber="130">
21084
21168
  <span class="hits">6</span>
21085
21169
 
21086
21170
  <code class="ruby"> CHANGELOGS.each do |path|</code>
21087
21171
  </li>
21088
21172
 
21089
- <li class="covered" data-hits="6" data-linenumber="117">
21173
+ <li class="covered" data-hits="6" data-linenumber="131">
21090
21174
  <span class="hits">6</span>
21091
21175
 
21092
21176
  <code class="ruby"> return @changelog_url = url(path) if Browser.get(url(path)).code == 200</code>
21093
21177
  </li>
21094
21178
 
21095
- <li class="never" data-hits="" data-linenumber="118">
21179
+ <li class="never" data-hits="" data-linenumber="132">
21096
21180
 
21097
21181
 
21098
21182
  <code class="ruby"> end</code>
21099
21183
  </li>
21100
21184
 
21101
- <li class="never" data-hits="" data-linenumber="119">
21185
+ <li class="never" data-hits="" data-linenumber="133">
21102
21186
 
21103
21187
 
21104
21188
  <code class="ruby"> end</code>
21105
21189
  </li>
21106
21190
 
21107
- <li class="never" data-hits="" data-linenumber="120">
21191
+ <li class="never" data-hits="" data-linenumber="134">
21108
21192
 
21109
21193
 
21110
21194
  <code class="ruby"></code>
21111
21195
  </li>
21112
21196
 
21113
- <li class="covered" data-hits="3" data-linenumber="121">
21197
+ <li class="covered" data-hits="3" data-linenumber="135">
21114
21198
  <span class="hits">3</span>
21115
21199
 
21116
21200
  <code class="ruby"> @changelog_url</code>
21117
21201
  </li>
21118
21202
 
21119
- <li class="never" data-hits="" data-linenumber="122">
21203
+ <li class="never" data-hits="" data-linenumber="136">
21120
21204
 
21121
21205
 
21122
21206
  <code class="ruby"> end</code>
21123
21207
  </li>
21124
21208
 
21125
- <li class="never" data-hits="" data-linenumber="123">
21209
+ <li class="never" data-hits="" data-linenumber="137">
21126
21210
 
21127
21211
 
21128
21212
  <code class="ruby"></code>
21129
21213
  </li>
21130
21214
 
21131
- <li class="never" data-hits="" data-linenumber="124">
21215
+ <li class="never" data-hits="" data-linenumber="138">
21132
21216
 
21133
21217
 
21134
21218
  <code class="ruby"> # @param [ String ] path</code>
21135
21219
  </li>
21136
21220
 
21137
- <li class="never" data-hits="" data-linenumber="125">
21221
+ <li class="never" data-hits="" data-linenumber="139">
21138
21222
 
21139
21223
 
21140
21224
  <code class="ruby"> # @param [ Hash ] params The request params</code>
21141
21225
  </li>
21142
21226
 
21143
- <li class="never" data-hits="" data-linenumber="126">
21227
+ <li class="never" data-hits="" data-linenumber="140">
21144
21228
 
21145
21229
 
21146
21230
  <code class="ruby"> #</code>
21147
21231
  </li>
21148
21232
 
21149
- <li class="never" data-hits="" data-linenumber="127">
21233
+ <li class="never" data-hits="" data-linenumber="141">
21150
21234
 
21151
21235
 
21152
21236
  <code class="ruby"> # @return [ Boolean ]</code>
21153
21237
  </li>
21154
21238
 
21155
- <li class="covered" data-hits="1" data-linenumber="128">
21239
+ <li class="covered" data-hits="1" data-linenumber="142">
21156
21240
  <span class="hits">1</span>
21157
21241
 
21158
21242
  <code class="ruby"> def directory_listing?(path = nil, params = {})</code>
21159
21243
  </li>
21160
21244
 
21161
- <li class="covered" data-hits="6" data-linenumber="129">
21245
+ <li class="covered" data-hits="6" data-linenumber="143">
21162
21246
  <span class="hits">6</span>
21163
21247
 
21164
21248
  <code class="ruby"> return if detection_opts[:mode] == :passive</code>
21165
21249
  </li>
21166
21250
 
21167
- <li class="covered" data-hits="6" data-linenumber="130">
21251
+ <li class="covered" data-hits="6" data-linenumber="144">
21168
21252
  <span class="hits">6</span>
21169
21253
 
21170
21254
  <code class="ruby"> super(path, params)</code>
21171
21255
  </li>
21172
21256
 
21173
- <li class="never" data-hits="" data-linenumber="131">
21257
+ <li class="never" data-hits="" data-linenumber="145">
21174
21258
 
21175
21259
 
21176
21260
  <code class="ruby"> end</code>
21177
21261
  </li>
21178
21262
 
21179
- <li class="never" data-hits="" data-linenumber="132">
21263
+ <li class="never" data-hits="" data-linenumber="146">
21180
21264
 
21181
21265
 
21182
21266
  <code class="ruby"></code>
21183
21267
  </li>
21184
21268
 
21185
- <li class="never" data-hits="" data-linenumber="133">
21269
+ <li class="never" data-hits="" data-linenumber="147">
21186
21270
 
21187
21271
 
21188
21272
  <code class="ruby"> # @param [ String ] path</code>
21189
21273
  </li>
21190
21274
 
21191
- <li class="never" data-hits="" data-linenumber="134">
21275
+ <li class="never" data-hits="" data-linenumber="148">
21192
21276
 
21193
21277
 
21194
21278
  <code class="ruby"> # @param [ Hash ] params The request params</code>
21195
21279
  </li>
21196
21280
 
21197
- <li class="never" data-hits="" data-linenumber="135">
21281
+ <li class="never" data-hits="" data-linenumber="149">
21198
21282
 
21199
21283
 
21200
21284
  <code class="ruby"> #</code>
21201
21285
  </li>
21202
21286
 
21203
- <li class="never" data-hits="" data-linenumber="136">
21287
+ <li class="never" data-hits="" data-linenumber="150">
21204
21288
 
21205
21289
 
21206
21290
  <code class="ruby"> # @return [ Boolean ]</code>
21207
21291
  </li>
21208
21292
 
21209
- <li class="covered" data-hits="1" data-linenumber="137">
21293
+ <li class="covered" data-hits="1" data-linenumber="151">
21210
21294
  <span class="hits">1</span>
21211
21295
 
21212
21296
  <code class="ruby"> def error_log?(path = &#39;error_log&#39;, params = {})</code>
21213
21297
  </li>
21214
21298
 
21215
- <li class="covered" data-hits="6" data-linenumber="138">
21299
+ <li class="covered" data-hits="6" data-linenumber="152">
21216
21300
  <span class="hits">6</span>
21217
21301
 
21218
21302
  <code class="ruby"> return if detection_opts[:mode] == :passive</code>
21219
21303
  </li>
21220
21304
 
21221
- <li class="covered" data-hits="6" data-linenumber="139">
21305
+ <li class="covered" data-hits="6" data-linenumber="153">
21222
21306
  <span class="hits">6</span>
21223
21307
 
21224
21308
  <code class="ruby"> super(path, params)</code>
21225
21309
  </li>
21226
21310
 
21227
- <li class="never" data-hits="" data-linenumber="140">
21311
+ <li class="never" data-hits="" data-linenumber="154">
21228
21312
 
21229
21313
 
21230
21314
  <code class="ruby"> end</code>
21231
21315
  </li>
21232
21316
 
21233
- <li class="never" data-hits="" data-linenumber="141">
21317
+ <li class="never" data-hits="" data-linenumber="155">
21234
21318
 
21235
21319
 
21236
21320
  <code class="ruby"> end</code>
21237
21321
  </li>
21238
21322
 
21239
- <li class="never" data-hits="" data-linenumber="142">
21323
+ <li class="never" data-hits="" data-linenumber="156">
21240
21324
 
21241
21325
 
21242
21326
  <code class="ruby">end</code>
@@ -21710,259 +21794,277 @@
21710
21794
  <code class="ruby"># Gems</code>
21711
21795
  </li>
21712
21796
 
21713
- <li class="covered" data-hits="1" data-linenumber="2">
21797
+ <li class="never" data-hits="" data-linenumber="2">
21798
+
21799
+
21800
+ <code class="ruby"># Believe it or not, active_support MUST be the first one,</code>
21801
+ </li>
21802
+
21803
+ <li class="never" data-hits="" data-linenumber="3">
21804
+
21805
+
21806
+ <code class="ruby"># otherwise encoding issues can happen when using JSON format.</code>
21807
+ </li>
21808
+
21809
+ <li class="never" data-hits="" data-linenumber="4">
21810
+
21811
+
21812
+ <code class="ruby"># Not kidding.</code>
21813
+ </li>
21814
+
21815
+ <li class="covered" data-hits="1" data-linenumber="5">
21714
21816
  <span class="hits">1</span>
21715
21817
 
21716
- <code class="ruby">require &#39;cms_scanner&#39;</code>
21818
+ <code class="ruby">require &#39;active_support/all&#39;</code>
21717
21819
  </li>
21718
21820
 
21719
- <li class="covered" data-hits="1" data-linenumber="3">
21821
+ <li class="covered" data-hits="1" data-linenumber="6">
21720
21822
  <span class="hits">1</span>
21721
21823
 
21722
- <code class="ruby">require &#39;yajl/json_gem&#39;</code>
21824
+ <code class="ruby">require &#39;cms_scanner&#39;</code>
21723
21825
  </li>
21724
21826
 
21725
- <li class="covered" data-hits="1" data-linenumber="4">
21827
+ <li class="covered" data-hits="1" data-linenumber="7">
21726
21828
  <span class="hits">1</span>
21727
21829
 
21728
- <code class="ruby">require &#39;addressable/uri&#39;</code>
21830
+ <code class="ruby">require &#39;yajl/json_gem&#39;</code>
21729
21831
  </li>
21730
21832
 
21731
- <li class="covered" data-hits="1" data-linenumber="5">
21833
+ <li class="covered" data-hits="1" data-linenumber="8">
21732
21834
  <span class="hits">1</span>
21733
21835
 
21734
- <code class="ruby">require &#39;active_support/all&#39;</code>
21836
+ <code class="ruby">require &#39;addressable/uri&#39;</code>
21735
21837
  </li>
21736
21838
 
21737
- <li class="never" data-hits="" data-linenumber="6">
21839
+ <li class="never" data-hits="" data-linenumber="9">
21738
21840
 
21739
21841
 
21740
21842
  <code class="ruby"># Standard Lib</code>
21741
21843
  </li>
21742
21844
 
21743
- <li class="covered" data-hits="1" data-linenumber="7">
21845
+ <li class="covered" data-hits="1" data-linenumber="10">
21744
21846
  <span class="hits">1</span>
21745
21847
 
21746
21848
  <code class="ruby">require &#39;uri&#39;</code>
21747
21849
  </li>
21748
21850
 
21749
- <li class="covered" data-hits="1" data-linenumber="8">
21851
+ <li class="covered" data-hits="1" data-linenumber="11">
21750
21852
  <span class="hits">1</span>
21751
21853
 
21752
21854
  <code class="ruby">require &#39;time&#39;</code>
21753
21855
  </li>
21754
21856
 
21755
- <li class="covered" data-hits="1" data-linenumber="9">
21857
+ <li class="covered" data-hits="1" data-linenumber="12">
21756
21858
  <span class="hits">1</span>
21757
21859
 
21758
21860
  <code class="ruby">require &#39;readline&#39;</code>
21759
21861
  </li>
21760
21862
 
21761
- <li class="covered" data-hits="1" data-linenumber="10">
21863
+ <li class="covered" data-hits="1" data-linenumber="13">
21762
21864
  <span class="hits">1</span>
21763
21865
 
21764
21866
  <code class="ruby">require &#39;securerandom&#39;</code>
21765
21867
  </li>
21766
21868
 
21767
- <li class="never" data-hits="" data-linenumber="11">
21869
+ <li class="never" data-hits="" data-linenumber="14">
21768
21870
 
21769
21871
 
21770
21872
  <code class="ruby"># Custom Libs</code>
21771
21873
  </li>
21772
21874
 
21773
- <li class="covered" data-hits="1" data-linenumber="12">
21875
+ <li class="covered" data-hits="1" data-linenumber="15">
21774
21876
  <span class="hits">1</span>
21775
21877
 
21776
21878
  <code class="ruby">require &#39;wpscan/helper&#39;</code>
21777
21879
  </li>
21778
21880
 
21779
- <li class="covered" data-hits="1" data-linenumber="13">
21881
+ <li class="covered" data-hits="1" data-linenumber="16">
21780
21882
  <span class="hits">1</span>
21781
21883
 
21782
21884
  <code class="ruby">require &#39;wpscan/db&#39;</code>
21783
21885
  </li>
21784
21886
 
21785
- <li class="covered" data-hits="1" data-linenumber="14">
21887
+ <li class="covered" data-hits="1" data-linenumber="17">
21786
21888
  <span class="hits">1</span>
21787
21889
 
21788
21890
  <code class="ruby">require &#39;wpscan/version&#39;</code>
21789
21891
  </li>
21790
21892
 
21791
- <li class="covered" data-hits="1" data-linenumber="15">
21893
+ <li class="covered" data-hits="1" data-linenumber="18">
21792
21894
  <span class="hits">1</span>
21793
21895
 
21794
21896
  <code class="ruby">require &#39;wpscan/errors/wordpress&#39;</code>
21795
21897
  </li>
21796
21898
 
21797
- <li class="covered" data-hits="1" data-linenumber="16">
21899
+ <li class="covered" data-hits="1" data-linenumber="19">
21798
21900
  <span class="hits">1</span>
21799
21901
 
21800
21902
  <code class="ruby">require &#39;wpscan/errors/http&#39;</code>
21801
21903
  </li>
21802
21904
 
21803
- <li class="covered" data-hits="1" data-linenumber="17">
21905
+ <li class="covered" data-hits="1" data-linenumber="20">
21804
21906
  <span class="hits">1</span>
21805
21907
 
21806
21908
  <code class="ruby">require &#39;wpscan/errors/update&#39;</code>
21807
21909
  </li>
21808
21910
 
21809
- <li class="covered" data-hits="1" data-linenumber="18">
21911
+ <li class="covered" data-hits="1" data-linenumber="21">
21810
21912
  <span class="hits">1</span>
21811
21913
 
21812
21914
  <code class="ruby">require &#39;wpscan/browser&#39;</code>
21813
21915
  </li>
21814
21916
 
21815
- <li class="covered" data-hits="1" data-linenumber="19">
21917
+ <li class="covered" data-hits="1" data-linenumber="22">
21816
21918
  <span class="hits">1</span>
21817
21919
 
21818
21920
  <code class="ruby">require &#39;wpscan/target&#39;</code>
21819
21921
  </li>
21820
21922
 
21821
- <li class="covered" data-hits="1" data-linenumber="20">
21923
+ <li class="covered" data-hits="1" data-linenumber="23">
21822
21924
  <span class="hits">1</span>
21823
21925
 
21824
21926
  <code class="ruby">require &#39;wpscan/finders&#39;</code>
21825
21927
  </li>
21826
21928
 
21827
- <li class="covered" data-hits="1" data-linenumber="21">
21929
+ <li class="covered" data-hits="1" data-linenumber="24">
21828
21930
  <span class="hits">1</span>
21829
21931
 
21830
21932
  <code class="ruby">require &#39;wpscan/controller&#39;</code>
21831
21933
  </li>
21832
21934
 
21833
- <li class="covered" data-hits="1" data-linenumber="22">
21935
+ <li class="covered" data-hits="1" data-linenumber="25">
21834
21936
  <span class="hits">1</span>
21835
21937
 
21836
21938
  <code class="ruby">require &#39;wpscan/controllers&#39;</code>
21837
21939
  </li>
21838
21940
 
21839
- <li class="covered" data-hits="1" data-linenumber="23">
21941
+ <li class="covered" data-hits="1" data-linenumber="26">
21840
21942
  <span class="hits">1</span>
21841
21943
 
21842
21944
  <code class="ruby">require &#39;wpscan/references&#39;</code>
21843
21945
  </li>
21844
21946
 
21845
- <li class="covered" data-hits="1" data-linenumber="24">
21947
+ <li class="covered" data-hits="1" data-linenumber="27">
21846
21948
  <span class="hits">1</span>
21847
21949
 
21848
21950
  <code class="ruby">require &#39;wpscan/vulnerable&#39;</code>
21849
21951
  </li>
21850
21952
 
21851
- <li class="covered" data-hits="1" data-linenumber="25">
21953
+ <li class="covered" data-hits="1" data-linenumber="28">
21852
21954
  <span class="hits">1</span>
21853
21955
 
21854
21956
  <code class="ruby">require &#39;wpscan/vulnerability&#39;</code>
21855
21957
  </li>
21856
21958
 
21857
- <li class="never" data-hits="" data-linenumber="26">
21959
+ <li class="never" data-hits="" data-linenumber="29">
21858
21960
 
21859
21961
 
21860
21962
  <code class="ruby"></code>
21861
21963
  </li>
21862
21964
 
21863
- <li class="covered" data-hits="1" data-linenumber="27">
21965
+ <li class="covered" data-hits="1" data-linenumber="30">
21864
21966
  <span class="hits">1</span>
21865
21967
 
21866
21968
  <code class="ruby">Encoding.default_external = Encoding::UTF_8</code>
21867
21969
  </li>
21868
21970
 
21869
- <li class="never" data-hits="" data-linenumber="28">
21971
+ <li class="never" data-hits="" data-linenumber="31">
21870
21972
 
21871
21973
 
21872
21974
  <code class="ruby"></code>
21873
21975
  </li>
21874
21976
 
21875
- <li class="never" data-hits="" data-linenumber="29">
21977
+ <li class="never" data-hits="" data-linenumber="32">
21876
21978
 
21877
21979
 
21878
21980
  <code class="ruby"># WPScan</code>
21879
21981
  </li>
21880
21982
 
21881
- <li class="covered" data-hits="1" data-linenumber="30">
21983
+ <li class="covered" data-hits="1" data-linenumber="33">
21882
21984
  <span class="hits">1</span>
21883
21985
 
21884
21986
  <code class="ruby">module WPScan</code>
21885
21987
  </li>
21886
21988
 
21887
- <li class="covered" data-hits="1" data-linenumber="31">
21989
+ <li class="covered" data-hits="1" data-linenumber="34">
21888
21990
  <span class="hits">1</span>
21889
21991
 
21890
21992
  <code class="ruby"> include CMSScanner</code>
21891
21993
  </li>
21892
21994
 
21893
- <li class="never" data-hits="" data-linenumber="32">
21995
+ <li class="never" data-hits="" data-linenumber="35">
21894
21996
 
21895
21997
 
21896
21998
  <code class="ruby"></code>
21897
21999
  </li>
21898
22000
 
21899
- <li class="covered" data-hits="1" data-linenumber="33">
22001
+ <li class="covered" data-hits="1" data-linenumber="36">
21900
22002
  <span class="hits">1</span>
21901
22003
 
21902
22004
  <code class="ruby"> APP_DIR = Pathname.new(__FILE__).dirname.join(&#39;..&#39;, &#39;app&#39;).expand_path</code>
21903
22005
  </li>
21904
22006
 
21905
- <li class="covered" data-hits="1" data-linenumber="34">
22007
+ <li class="covered" data-hits="1" data-linenumber="37">
21906
22008
  <span class="hits">1</span>
21907
22009
 
21908
22010
  <code class="ruby"> DB_DIR = File.join(Dir.home, &#39;.wpscan&#39;, &#39;db&#39;)</code>
21909
22011
  </li>
21910
22012
 
21911
- <li class="never" data-hits="" data-linenumber="35">
22013
+ <li class="never" data-hits="" data-linenumber="38">
21912
22014
 
21913
22015
 
21914
22016
  <code class="ruby"></code>
21915
22017
  </li>
21916
22018
 
21917
- <li class="never" data-hits="" data-linenumber="36">
22019
+ <li class="never" data-hits="" data-linenumber="39">
21918
22020
 
21919
22021
 
21920
22022
  <code class="ruby"> # Override, otherwise it would be returned as &#39;wp_scan&#39;</code>
21921
22023
  </li>
21922
22024
 
21923
- <li class="never" data-hits="" data-linenumber="37">
22025
+ <li class="never" data-hits="" data-linenumber="40">
21924
22026
 
21925
22027
 
21926
22028
  <code class="ruby"> #</code>
21927
22029
  </li>
21928
22030
 
21929
- <li class="never" data-hits="" data-linenumber="38">
22031
+ <li class="never" data-hits="" data-linenumber="41">
21930
22032
 
21931
22033
 
21932
22034
  <code class="ruby"> # @return [ String ]</code>
21933
22035
  </li>
21934
22036
 
21935
- <li class="covered" data-hits="1" data-linenumber="39">
22037
+ <li class="covered" data-hits="1" data-linenumber="42">
21936
22038
  <span class="hits">1</span>
21937
22039
 
21938
22040
  <code class="ruby"> def self.app_name</code>
21939
22041
  </li>
21940
22042
 
21941
- <li class="covered" data-hits="83" data-linenumber="40">
22043
+ <li class="covered" data-hits="83" data-linenumber="43">
21942
22044
  <span class="hits">83</span>
21943
22045
 
21944
22046
  <code class="ruby"> &#39;wpscan&#39;</code>
21945
22047
  </li>
21946
22048
 
21947
- <li class="never" data-hits="" data-linenumber="41">
22049
+ <li class="never" data-hits="" data-linenumber="44">
21948
22050
 
21949
22051
 
21950
22052
  <code class="ruby"> end</code>
21951
22053
  </li>
21952
22054
 
21953
- <li class="never" data-hits="" data-linenumber="42">
22055
+ <li class="never" data-hits="" data-linenumber="45">
21954
22056
 
21955
22057
 
21956
22058
  <code class="ruby">end</code>
21957
22059
  </li>
21958
22060
 
21959
- <li class="never" data-hits="" data-linenumber="43">
22061
+ <li class="never" data-hits="" data-linenumber="46">
21960
22062
 
21961
22063
 
21962
22064
  <code class="ruby"></code>
21963
22065
  </li>
21964
22066
 
21965
- <li class="covered" data-hits="1" data-linenumber="44">
22067
+ <li class="covered" data-hits="1" data-linenumber="47">
21966
22068
  <span class="hits">1</span>
21967
22069
 
21968
22070
  <code class="ruby">require &quot;#{WPScan::APP_DIR}/app&quot;</code>
@@ -24356,8 +24458,8 @@
24356
24458
  <code class="ruby"> def self.db_data(identifier)</code>
24357
24459
  </li>
24358
24460
 
24359
- <li class="covered" data-hits="32" data-linenumber="9">
24360
- <span class="hits">32</span>
24461
+ <li class="covered" data-hits="52" data-linenumber="9">
24462
+ <span class="hits">52</span>
24361
24463
 
24362
24464
  <code class="ruby"> db[identifier] || {}</code>
24363
24465
  </li>
@@ -24386,8 +24488,8 @@
24386
24488
  <code class="ruby"> def self.db</code>
24387
24489
  </li>
24388
24490
 
24389
- <li class="covered" data-hits="38" data-linenumber="14">
24390
- <span class="hits">38</span>
24491
+ <li class="covered" data-hits="58" data-linenumber="14">
24492
+ <span class="hits">58</span>
24391
24493
 
24392
24494
  <code class="ruby"> @db ||= read_json_file(db_file)</code>
24393
24495
  </li>
@@ -26930,8 +27032,8 @@
26930
27032
  <code class="ruby"> def plugins_dir</code>
26931
27033
  </li>
26932
27034
 
26933
- <li class="covered" data-hits="312" data-linenumber="40">
26934
- <span class="hits">312</span>
27035
+ <li class="covered" data-hits="321" data-linenumber="40">
27036
+ <span class="hits">321</span>
26935
27037
 
26936
27038
  <code class="ruby"> @plugins_dir ||= &quot;#{content_dir}/plugins&quot;</code>
26937
27039
  </li>
@@ -27158,8 +27260,8 @@
27158
27260
  <code class="ruby"> def url(path = nil)</code>
27159
27261
  </li>
27160
27262
 
27161
- <li class="covered" data-hits="580" data-linenumber="78">
27162
- <span class="hits">580</span>
27263
+ <li class="covered" data-hits="588" data-linenumber="78">
27264
+ <span class="hits">588</span>
27163
27265
 
27164
27266
  <code class="ruby"> return @uri.to_s unless path</code>
27165
27267
  </li>
@@ -27170,20 +27272,20 @@
27170
27272
  <code class="ruby"></code>
27171
27273
  </li>
27172
27274
 
27173
- <li class="covered" data-hits="451" data-linenumber="80">
27174
- <span class="hits">451</span>
27275
+ <li class="covered" data-hits="459" data-linenumber="80">
27276
+ <span class="hits">459</span>
27175
27277
 
27176
27278
  <code class="ruby"> if path =~ %r{wp\-content/plugins}i</code>
27177
27279
  </li>
27178
27280
 
27179
- <li class="covered" data-hits="294" data-linenumber="81">
27180
- <span class="hits">294</span>
27281
+ <li class="covered" data-hits="303" data-linenumber="81">
27282
+ <span class="hits">303</span>
27181
27283
 
27182
27284
  <code class="ruby"> path.gsub!(&#39;wp-content/plugins&#39;, plugins_dir)</code>
27183
27285
  </li>
27184
27286
 
27185
- <li class="covered" data-hits="157" data-linenumber="82">
27186
- <span class="hits">157</span>
27287
+ <li class="covered" data-hits="156" data-linenumber="82">
27288
+ <span class="hits">156</span>
27187
27289
 
27188
27290
  <code class="ruby"> elsif path =~ /wp\-content/i</code>
27189
27291
  </li>
@@ -27194,8 +27296,8 @@
27194
27296
  <code class="ruby"> path.gsub!(&#39;wp-content&#39;, content_dir)</code>
27195
27297
  </li>
27196
27298
 
27197
- <li class="covered" data-hits="61" data-linenumber="84">
27198
- <span class="hits">61</span>
27299
+ <li class="covered" data-hits="60" data-linenumber="84">
27300
+ <span class="hits">60</span>
27199
27301
 
27200
27302
  <code class="ruby"> elsif path[0] != &#39;/&#39; &amp;&amp; sub_dir</code>
27201
27303
  </li>
@@ -27218,8 +27320,8 @@
27218
27320
  <code class="ruby"></code>
27219
27321
  </li>
27220
27322
 
27221
- <li class="covered" data-hits="451" data-linenumber="88">
27222
- <span class="hits">451</span>
27323
+ <li class="covered" data-hits="459" data-linenumber="88">
27324
+ <span class="hits">459</span>
27223
27325
 
27224
27326
  <code class="ruby"> super(path)</code>
27225
27327
  </li>