rack-mini-profiler 1.1.4 → 1.1.5

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
  SHA256:
3
- metadata.gz: 23beddd8a924076759b5f25229f0e9a2c91dee5b916f2e4712381c247ad4922d
4
- data.tar.gz: af7fc0fbe8008e5159e86b4cdf4fb19d694e15ea125eae2c776b0815df3dca0f
3
+ metadata.gz: 293023dd85ac18a9da819b665e1965ff2f4c6e0910b50c22b75a6b52a7b8ab75
4
+ data.tar.gz: 514b51f165105a9d67d29119b541fa483b5c1a4f2aac4f24c06b8d0e09bf48d2
5
5
  SHA512:
6
- metadata.gz: bc6a2e360c45f76f9a66f12e649932ced7a2fdad4e6102eb551df688065970ef47d6b3a4871fa3f642c6b86884b236b547c98fc14de5ba93ee44c4fdbf4a6f90
7
- data.tar.gz: f6d0ea244eac7b8a40adb7556a7185a245d378402248bd9317be18a616ed2d4c4ba4203401600bb9416f38f875762d688a1191a52a17c643793d4a5a4607f6b5
6
+ metadata.gz: af932928ecc8e2861db979ca4f9df62229de5589cbfaf37c556a5430ee98bbe941b95ba09603e7112028c75b87015b785394add2952673b9e430cbc24ea3afa8
7
+ data.tar.gz: 7355306f0f0b809b589ff50dfb1774a57d0cc9bd4229bd1d1b2fae95a9693508093f5f4426cef6154062dba39c5824037742fd35fc615872fb15144367be9e56
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 1.1.5 - 2020-01-28
4
+
5
+ - [FIX] correct custom counter regression
6
+ - [FIX] respect max_traces_to_show
7
+ - [FIX] handle storage engine failures in whitelist mode
8
+
3
9
  ## 1.1.4 - 2019-12-12
4
10
 
5
11
  - [SECURITY] carefully crafted SQL could cause an XSS on sites that do not use CSPs
data/lib/html/includes.js CHANGED
@@ -79,20 +79,6 @@ var MiniProfiler = (function() {
79
79
  return localStorage[getVersionedKey(keyPrefix)];
80
80
  };
81
81
 
82
- var compileTemplates = function compileTemplates(data) {
83
- var element = document.createElement("DIV");
84
- element.innerHTML = data;
85
- var templates = {};
86
- var children = element.children;
87
-
88
- for (var i = 0; i < children.length; i++) {
89
- var child = children[i];
90
- templates[child.id] = doT.compile(child.innerHTML);
91
- }
92
-
93
- MiniProfiler.templates = templates;
94
- };
95
-
96
82
  var getClientPerformance = function getClientPerformance() {
97
83
  return window.performance === null ? null : window.performance;
98
84
  };
@@ -284,7 +270,7 @@ var MiniProfiler = (function() {
284
270
  }); // limit count
285
271
 
286
272
  if (
287
- container.querySelector(".profiler-result").length >
273
+ container.querySelectorAll(".profiler-result").length >
288
274
  options.maxTracesToShow
289
275
  ) {
290
276
  var elem = container.querySelector(".profiler-result");
@@ -746,7 +732,24 @@ var MiniProfiler = (function() {
746
732
  XMLHttpRequest.prototype.send = function(data) {
747
733
  ajaxStartTime = new Date();
748
734
  this.addEventListener("load", function() {
749
- // should be an array of strings, e.g. ["008c4813-9bd7-443d-9376-9441ec4d6a8c","16ff377b-8b9c-4c20-a7b5-97cd9fa7eea7"]
735
+ // responseURL isn't available in IE11
736
+ if (
737
+ this.responseURL &&
738
+ this.responseURL.indexOf(window.location.origin) !== 0
739
+ ) {
740
+ return;
741
+ }
742
+ // getAllResponseHeaders isn't available in Edge.
743
+ var allHeaders = this.getAllResponseHeaders
744
+ ? this.getAllResponseHeaders()
745
+ : null;
746
+ if (
747
+ allHeaders &&
748
+ allHeaders.toLowerCase().indexOf("x-miniprofiler-ids") === -1
749
+ ) {
750
+ return;
751
+ }
752
+ // should be a string of comma-separated ids
750
753
  var stringIds = this.getResponseHeader("X-MiniProfiler-Ids");
751
754
 
752
755
  if (stringIds) {
@@ -181,7 +181,7 @@
181
181
 
182
182
  {{? it.timing.has_children}}
183
183
  {{~ it.timing.children :value}}
184
- {{= MiniProfiler.templates.timingTemplate({timing: value, page: it}) }}
184
+ {{= MiniProfiler.templates.timingTemplate({timing: value, page: it.page}) }}
185
185
  {{~}}
186
186
  {{?}}
187
187
  </script>
data/lib/html/vendor.js CHANGED
@@ -15,7 +15,7 @@ var out=' <a href="'+( MiniProfiler.shareUrl(it.page.id) )+'" class="profiler-sh
15
15
  }
16
16
  MiniProfiler.templates["timingTemplate"] = function anonymous(it
17
17
  ) {
18
- var out=' <tr class="';if(it.timing.is_trivial){out+='profiler-trivial';}out+='" data-timing-id="'+( it.timing.id )+'"> <td class="profiler-label" title="';if(it.timing.name && it.timing.name.length > 45){out+=''+( it.timing.name );}out+='"> <span class="profiler-indent">'+( MiniProfiler.renderIndent(it.timing.depth) )+'</span> '+( it.timing.name.slice(0,45) );if(it.timing.name && it.timing.name.length > 45){out+='...';}out+=' </td> <td class="profiler-duration" title="duration of this step without any children\'s durations"> '+( MiniProfiler.formatDuration(it.timing.duration_without_children_milliseconds) )+' </td> <td class="profiler-duration profiler-duration-with-children" title="duration of this step and its children"> '+( MiniProfiler.formatDuration(it.timing.duration_milliseconds) )+' </td> <td class="profiler-duration time-from-start" title="time elapsed since profiling started"> <span class="profiler-unit">+</span>'+( MiniProfiler.formatDuration(it.timing.start_milliseconds) )+' </td> ';if(it.timing.has_sql_timings){out+=' <td class="profiler-duration ';if(it.timing.has_duplicate_sql_timings){out+='profiler-warning';}out+='" title="';if(it.timing.has_duplicate_sql_timings){out+='duplicate queries detected - ';}if(it.timing.executed_readers > 0 || it.timing.executed_scalars > 0 || it.timing.executed_non_queries > 0){out+=''+( it.timing.executed_readers )+' reader, '+( it.timing.executed_scalars )+' scalar, '+( it.timing.executed_non_queries )+' non-query statements executed';}out+='"> <a class="profiler-queries-show"> ';if(it.timing.has_duplicate_sql_timings){out+='<span class="profiler-nuclear">!</span>';}out+=' '+( it.timing.sql_timings.length )+' <span class="profiler-unit">sql</span> </a> </td> <td class="profiler-duration" title="aggregate duration of all queries in this step (excludes children)"> '+( MiniProfiler.formatDuration(it.timing.sql_timings_duration_milliseconds) )+' </td> ';}else{out+=' <td colspan="2"></td> ';}out+=' ';var arr1=it.page.custom_timing_names;if(arr1){var value,i1=-1,l1=arr1.length-1;while(i1<l1){value=arr1[i1+=1];out+=' ';if(it.timing.custom_timings && it.timing.custom_timings[value]){out+=' <td class="profiler-duration" title="aggregate number of all '+( value.toLowerCase() )+' invocations in this step (excludes children)"> '+( it.timing.custom_timings[value].length )+' '+( value.toLowerCase() )+' </td> <td class="profiler-duration" title="aggregate duration of all '+( value.toLowerCase() )+' invocations in this step (excludes children)"> '+( MiniProfiler.formatDuration(it.timing.custom_timing_stats[value].duration) )+' </td> ';}else{out+=' <td colspan="2"></td> ';}out+=' ';} } out+=' </tr> ';if(it.timing.has_children){out+=' ';var arr2=it.timing.children;if(arr2){var value,i2=-1,l2=arr2.length-1;while(i2<l2){value=arr2[i2+=1];out+=' '+( MiniProfiler.templates.timingTemplate({timing: value, page: it}) )+' ';} } out+=' ';}return out;
18
+ var out=' <tr class="';if(it.timing.is_trivial){out+='profiler-trivial';}out+='" data-timing-id="'+( it.timing.id )+'"> <td class="profiler-label" title="';if(it.timing.name && it.timing.name.length > 45){out+=''+( it.timing.name );}out+='"> <span class="profiler-indent">'+( MiniProfiler.renderIndent(it.timing.depth) )+'</span> '+( it.timing.name.slice(0,45) );if(it.timing.name && it.timing.name.length > 45){out+='...';}out+=' </td> <td class="profiler-duration" title="duration of this step without any children\'s durations"> '+( MiniProfiler.formatDuration(it.timing.duration_without_children_milliseconds) )+' </td> <td class="profiler-duration profiler-duration-with-children" title="duration of this step and its children"> '+( MiniProfiler.formatDuration(it.timing.duration_milliseconds) )+' </td> <td class="profiler-duration time-from-start" title="time elapsed since profiling started"> <span class="profiler-unit">+</span>'+( MiniProfiler.formatDuration(it.timing.start_milliseconds) )+' </td> ';if(it.timing.has_sql_timings){out+=' <td class="profiler-duration ';if(it.timing.has_duplicate_sql_timings){out+='profiler-warning';}out+='" title="';if(it.timing.has_duplicate_sql_timings){out+='duplicate queries detected - ';}if(it.timing.executed_readers > 0 || it.timing.executed_scalars > 0 || it.timing.executed_non_queries > 0){out+=''+( it.timing.executed_readers )+' reader, '+( it.timing.executed_scalars )+' scalar, '+( it.timing.executed_non_queries )+' non-query statements executed';}out+='"> <a class="profiler-queries-show"> ';if(it.timing.has_duplicate_sql_timings){out+='<span class="profiler-nuclear">!</span>';}out+=' '+( it.timing.sql_timings.length )+' <span class="profiler-unit">sql</span> </a> </td> <td class="profiler-duration" title="aggregate duration of all queries in this step (excludes children)"> '+( MiniProfiler.formatDuration(it.timing.sql_timings_duration_milliseconds) )+' </td> ';}else{out+=' <td colspan="2"></td> ';}out+=' ';var arr1=it.page.custom_timing_names;if(arr1){var value,i1=-1,l1=arr1.length-1;while(i1<l1){value=arr1[i1+=1];out+=' ';if(it.timing.custom_timings && it.timing.custom_timings[value]){out+=' <td class="profiler-duration" title="aggregate number of all '+( value.toLowerCase() )+' invocations in this step (excludes children)"> '+( it.timing.custom_timings[value].length )+' '+( value.toLowerCase() )+' </td> <td class="profiler-duration" title="aggregate duration of all '+( value.toLowerCase() )+' invocations in this step (excludes children)"> '+( MiniProfiler.formatDuration(it.timing.custom_timing_stats[value].duration) )+' </td> ';}else{out+=' <td colspan="2"></td> ';}out+=' ';} } out+=' </tr> ';if(it.timing.has_children){out+=' ';var arr2=it.timing.children;if(arr2){var value,i2=-1,l2=arr2.length-1;while(i2<l2){value=arr2[i2+=1];out+=' '+( MiniProfiler.templates.timingTemplate({timing: value, page: it.page}) )+' ';} } out+=' ';}return out;
19
19
  }
20
20
  MiniProfiler.templates["sqlTimingTemplate"] = function anonymous(it
21
21
  ) {
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  module Rack
3
3
  class MiniProfiler
4
- ASSET_VERSION = '7e0146095db5a4bd0c9ae1b165d69e56'
4
+ ASSET_VERSION = '2ed167b8bd3b0bc4e43c9ba3d0c679e4'
5
5
  end
6
6
  end
@@ -89,10 +89,17 @@ module Rack
89
89
  def has_valid_cookie?
90
90
  valid_cookie = !@cookie.nil?
91
91
 
92
- if (MiniProfiler.config.authorization_mode == :whitelist)
93
- @allowed_tokens ||= @store.allowed_tokens
92
+ if (MiniProfiler.config.authorization_mode == :whitelist) && valid_cookie
93
+ begin
94
+ @allowed_tokens ||= @store.allowed_tokens
95
+ rescue => e
96
+ if @config.storage_failure != nil
97
+ @config.storage_failure.call(e)
98
+ end
99
+ end
94
100
 
95
- valid_cookie = (Array === @orig_auth_tokens) &&
101
+ valid_cookie = @allowed_tokens &&
102
+ (Array === @orig_auth_tokens) &&
96
103
  ((@allowed_tokens & @orig_auth_tokens).length > 0)
97
104
  end
98
105
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Rack
4
4
  class MiniProfiler
5
- VERSION = '1.1.4'
5
+ VERSION = '1.1.5'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-mini-profiler
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.4
4
+ version: 1.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Saffron
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2019-12-12 00:00:00.000000000 Z
13
+ date: 2020-01-27 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rack