wpscan 3.0 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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>