fingerprintjs-rails 0.5.3 → 0.5.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 823aeb05b2707f03cbedcbe93dfb385168c16c41
4
+ data.tar.gz: bb7adc71a9c7377308aa90d3218252f700a31dd3
5
+ SHA512:
6
+ metadata.gz: 6ac6a2a552eb3f0646d84e48a676edd83979ef5025b97d80bc4890b9d03549f9f6d78ff81cfec276734c0c8f3f1df56ea0aeed5796fdc18799d55cdd13a205c4
7
+ data.tar.gz: 4412300c1ddd0ffa78057b81ce2890faed90323ed4556cb45dc91824a8e160a593f5d41b8f8e04871681b22e7bc7b30b51ea8ff1f14a43b7a1be5bd0c21dc679
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2012 Valentin Vasilyev
1
+ Copyright (c) 2017 Valentin Vasilyev
2
2
 
3
3
  MIT License
4
4
 
@@ -1,8 +1,19 @@
1
1
  /*
2
- * fingerprintJS 0.5.3 - Fast browser fingerprint library
2
+ * fingerprintJS 0.5.5 - Fast browser fingerprint library
3
3
  * https://github.com/Valve/fingerprintjs
4
4
  * Copyright (c) 2013 Valentin Vasilyev (valentin.vasilyev@outlook.com)
5
5
  * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
6
+ *
7
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
8
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
9
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
10
+ * ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
11
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
12
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
13
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
14
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
15
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
16
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
6
17
  */
7
18
 
8
19
  ;(function (name, context, definition) {
@@ -11,7 +22,7 @@
11
22
  else { context[name] = definition(); }
12
23
  })('Fingerprint', this, function () {
13
24
  'use strict';
14
-
25
+
15
26
  var Fingerprint = function (options) {
16
27
  var nativeForEach, nativeMap;
17
28
  nativeForEach = Array.prototype.forEach;
@@ -51,6 +62,7 @@
51
62
  if (typeof options == 'object'){
52
63
  this.hasher = options.hasher;
53
64
  this.screen_resolution = options.screen_resolution;
65
+ this.screen_orientation = options.screen_orientation;
54
66
  this.canvas = options.canvas;
55
67
  this.ie_activex = options.ie_activex;
56
68
  } else if(typeof options == 'function'){
@@ -67,13 +79,13 @@
67
79
  if (this.screen_resolution) {
68
80
  var resolution = this.getScreenResolution();
69
81
  if (typeof resolution !== 'undefined'){ // headless browsers, such as phantomjs
70
- keys.push(this.getScreenResolution().join('x'));
82
+ keys.push(resolution.join('x'));
71
83
  }
72
84
  }
73
85
  keys.push(new Date().getTimezoneOffset());
74
86
  keys.push(this.hasSessionStorage());
75
87
  keys.push(this.hasLocalStorage());
76
- keys.push(!!window.indexedDB);
88
+ keys.push(this.hasIndexDb());
77
89
  //body might not be defined at this point or removed programmatically
78
90
  if(document.body){
79
91
  keys.push(typeof(document.body.addBehavior));
@@ -97,35 +109,35 @@
97
109
 
98
110
  /**
99
111
  * JS Implementation of MurmurHash3 (r136) (as of May 20, 2011)
100
- *
112
+ *
101
113
  * @author <a href="mailto:gary.court@gmail.com">Gary Court</a>
102
114
  * @see http://github.com/garycourt/murmurhash-js
103
115
  * @author <a href="mailto:aappleby@gmail.com">Austin Appleby</a>
104
116
  * @see http://sites.google.com/site/murmurhash/
105
- *
117
+ *
106
118
  * @param {string} key ASCII only
107
119
  * @param {number} seed Positive integer only
108
- * @return {number} 32-bit positive integer hash
120
+ * @return {number} 32-bit positive integer hash
109
121
  */
110
122
 
111
123
  murmurhash3_32_gc: function(key, seed) {
112
124
  var remainder, bytes, h1, h1b, c1, c2, k1, i;
113
-
125
+
114
126
  remainder = key.length & 3; // key.length % 4
115
127
  bytes = key.length - remainder;
116
128
  h1 = seed;
117
129
  c1 = 0xcc9e2d51;
118
130
  c2 = 0x1b873593;
119
131
  i = 0;
120
-
132
+
121
133
  while (i < bytes) {
122
- k1 =
134
+ k1 =
123
135
  ((key.charCodeAt(i) & 0xff)) |
124
136
  ((key.charCodeAt(++i) & 0xff) << 8) |
125
137
  ((key.charCodeAt(++i) & 0xff) << 16) |
126
138
  ((key.charCodeAt(++i) & 0xff) << 24);
127
139
  ++i;
128
-
140
+
129
141
  k1 = ((((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16))) & 0xffffffff;
130
142
  k1 = (k1 << 15) | (k1 >>> 17);
131
143
  k1 = ((((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16))) & 0xffffffff;
@@ -135,20 +147,20 @@
135
147
  h1b = ((((h1 & 0xffff) * 5) + ((((h1 >>> 16) * 5) & 0xffff) << 16))) & 0xffffffff;
136
148
  h1 = (((h1b & 0xffff) + 0x6b64) + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16));
137
149
  }
138
-
150
+
139
151
  k1 = 0;
140
-
152
+
141
153
  switch (remainder) {
142
154
  case 3: k1 ^= (key.charCodeAt(i + 2) & 0xff) << 16;
143
155
  case 2: k1 ^= (key.charCodeAt(i + 1) & 0xff) << 8;
144
156
  case 1: k1 ^= (key.charCodeAt(i) & 0xff);
145
-
157
+
146
158
  k1 = (((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff;
147
159
  k1 = (k1 << 15) | (k1 >>> 17);
148
160
  k1 = (((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff;
149
161
  h1 ^= k1;
150
162
  }
151
-
163
+
152
164
  h1 ^= key.length;
153
165
 
154
166
  h1 ^= h1 >>> 16;
@@ -168,7 +180,7 @@
168
180
  return true; // SecurityError when referencing it means it exists
169
181
  }
170
182
  },
171
-
183
+
172
184
  hasSessionStorage: function () {
173
185
  try{
174
186
  return !!window.sessionStorage;
@@ -177,6 +189,14 @@
177
189
  }
178
190
  },
179
191
 
192
+ hasIndexDb: function () {
193
+ try{
194
+ return !!window.indexedDB;
195
+ } catch(e) {
196
+ return true; // SecurityError when referencing it means it exists
197
+ }
198
+ },
199
+
180
200
  isCanvasSupported: function () {
181
201
  var elem = document.createElement('canvas');
182
202
  return !!(elem.getContext && elem.getContext('2d'));
@@ -224,7 +244,7 @@
224
244
  'WMPlayer.OCX', // Windows media player
225
245
  'AgControl.AgControl', // Silverlight
226
246
  'Skype.Detection'];
227
-
247
+
228
248
  // starting to detect plugins in IE
229
249
  return this.map(names, function(name){
230
250
  try{
@@ -240,7 +260,13 @@
240
260
  },
241
261
 
242
262
  getScreenResolution: function () {
243
- return [screen.height, screen.width];
263
+ var resolution;
264
+ if(this.screen_orientation){
265
+ resolution = (screen.height > screen.width) ? [screen.height, screen.width] : [screen.width, screen.height];
266
+ }else{
267
+ resolution = [screen.height, screen.width];
268
+ }
269
+ return resolution;
244
270
  },
245
271
 
246
272
  getCanvasFingerprint: function () {
@@ -1,2 +1,2 @@
1
- /*! fingerprintjs 2014-02-04 - v0.5.3 */
2
- !function(a,b,c){"undefined"!=typeof module&&module.exports?module.exports=c():"function"==typeof define&&define.amd?define(c):b[a]=c()}("Fingerprint",this,function(){"use strict";var a=function(a){var b,c;b=Array.prototype.forEach,c=Array.prototype.map,this.each=function(a,c,d){if(null!==a)if(b&&a.forEach===b)a.forEach(c,d);else if(a.length===+a.length){for(var e=0,f=a.length;f>e;e++)if(c.call(d,a[e],e,a)==={})return}else for(var g in a)if(a.hasOwnProperty(g)&&c.call(d,a[g],g,a)==={})return},this.map=function(a,b,d){var e=[];return null==a?e:c&&a.map===c?a.map(b,d):(this.each(a,function(a,c,f){e[e.length]=b.call(d,a,c,f)}),e)},"object"==typeof a?(this.hasher=a.hasher,this.screen_resolution=a.screen_resolution,this.canvas=a.canvas,this.ie_activex=a.ie_activex):"function"==typeof a&&(this.hasher=a)};return a.prototype={get:function(){var a=[];if(a.push(navigator.userAgent),a.push(navigator.language),a.push(screen.colorDepth),this.screen_resolution){var b=this.getScreenResolution();"undefined"!=typeof b&&a.push(this.getScreenResolution().join("x"))}return a.push((new Date).getTimezoneOffset()),a.push(this.hasSessionStorage()),a.push(this.hasLocalStorage()),a.push(!!window.indexedDB),document.body?a.push(typeof document.body.addBehavior):a.push("undefined"),a.push(typeof window.openDatabase),a.push(navigator.cpuClass),a.push(navigator.platform),a.push(navigator.doNotTrack),a.push(this.getPluginsString()),this.canvas&&this.isCanvasSupported()&&a.push(this.getCanvasFingerprint()),this.hasher?this.hasher(a.join("###"),31):this.murmurhash3_32_gc(a.join("###"),31)},murmurhash3_32_gc:function(a,b){var c,d,e,f,g,h,i,j;for(c=3&a.length,d=a.length-c,e=b,g=3432918353,h=461845907,j=0;d>j;)i=255&a.charCodeAt(j)|(255&a.charCodeAt(++j))<<8|(255&a.charCodeAt(++j))<<16|(255&a.charCodeAt(++j))<<24,++j,i=(65535&i)*g+(((i>>>16)*g&65535)<<16)&4294967295,i=i<<15|i>>>17,i=(65535&i)*h+(((i>>>16)*h&65535)<<16)&4294967295,e^=i,e=e<<13|e>>>19,f=5*(65535&e)+((5*(e>>>16)&65535)<<16)&4294967295,e=(65535&f)+27492+(((f>>>16)+58964&65535)<<16);switch(i=0,c){case 3:i^=(255&a.charCodeAt(j+2))<<16;case 2:i^=(255&a.charCodeAt(j+1))<<8;case 1:i^=255&a.charCodeAt(j),i=(65535&i)*g+(((i>>>16)*g&65535)<<16)&4294967295,i=i<<15|i>>>17,i=(65535&i)*h+(((i>>>16)*h&65535)<<16)&4294967295,e^=i}return e^=a.length,e^=e>>>16,e=2246822507*(65535&e)+((2246822507*(e>>>16)&65535)<<16)&4294967295,e^=e>>>13,e=3266489909*(65535&e)+((3266489909*(e>>>16)&65535)<<16)&4294967295,e^=e>>>16,e>>>0},hasLocalStorage:function(){try{return!!window.localStorage}catch(a){return!0}},hasSessionStorage:function(){try{return!!window.sessionStorage}catch(a){return!0}},isCanvasSupported:function(){var a=document.createElement("canvas");return!(!a.getContext||!a.getContext("2d"))},isIE:function(){return"Microsoft Internet Explorer"===navigator.appName?!0:"Netscape"===navigator.appName&&/Trident/.test(navigator.userAgent)?!0:!1},getPluginsString:function(){return this.isIE()&&this.ie_activex?this.getIEPluginsString():this.getRegularPluginsString()},getRegularPluginsString:function(){return this.map(navigator.plugins,function(a){var b=this.map(a,function(a){return[a.type,a.suffixes].join("~")}).join(",");return[a.name,a.description,b].join("::")},this).join(";")},getIEPluginsString:function(){if(window.ActiveXObject){var a=["ShockwaveFlash.ShockwaveFlash","AcroPDF.PDF","PDF.PdfCtrl","QuickTime.QuickTime","rmocx.RealPlayer G2 Control","rmocx.RealPlayer G2 Control.1","RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)","RealVideo.RealVideo(tm) ActiveX Control (32-bit)","RealPlayer","SWCtl.SWCtl","WMPlayer.OCX","AgControl.AgControl","Skype.Detection"];return this.map(a,function(a){try{return new ActiveXObject(a),a}catch(b){return null}}).join(";")}return""},getScreenResolution:function(){return[screen.height,screen.width]},getCanvasFingerprint:function(){var a=document.createElement("canvas"),b=a.getContext("2d"),c="http://valve.github.io";return b.textBaseline="top",b.font="14px 'Arial'",b.textBaseline="alphabetic",b.fillStyle="#f60",b.fillRect(125,1,62,20),b.fillStyle="#069",b.fillText(c,2,15),b.fillStyle="rgba(102, 204, 0, 0.7)",b.fillText(c,4,17),a.toDataURL()}},a});
1
+ /* fingerprintjs 0.5.5 */
2
+ !function(t,e,n){"undefined"!=typeof module&&module.exports?module.exports=n():"function"==typeof define&&define.amd?define(n):e[t]=n()}("Fingerprint",this,function(){"use strict";var t=function(t){var e,n;e=Array.prototype.forEach,n=Array.prototype.map,this.each=function(t,n,r){if(null!==t)if(e&&t.forEach===e)t.forEach(n,r);else if(t.length===+t.length){for(var i=0,a=t.length;a>i;i++)if(n.call(r,t[i],i,t)==={})return}else for(var o in t)if(t.hasOwnProperty(o)&&n.call(r,t[o],o,t)==={})return},this.map=function(t,e,r){var i=[];return null==t?i:n&&t.map===n?t.map(e,r):(this.each(t,function(t,n,a){i[i.length]=e.call(r,t,n,a)}),i)},"object"==typeof t?(this.hasher=t.hasher,this.screen_resolution=t.screen_resolution,this.screen_orientation=t.screen_orientation,this.canvas=t.canvas,this.ie_activex=t.ie_activex):"function"==typeof t&&(this.hasher=t)};return t.prototype={get:function(){var t=[];if(t.push(navigator.userAgent),t.push(navigator.language),t.push(screen.colorDepth),this.screen_resolution){var e=this.getScreenResolution();void 0!==e&&t.push(e.join("x"))}return t.push((new Date).getTimezoneOffset()),t.push(this.hasSessionStorage()),t.push(this.hasLocalStorage()),t.push(this.hasIndexDb()),t.push(document.body?typeof document.body.addBehavior:"undefined"),t.push(typeof window.openDatabase),t.push(navigator.cpuClass),t.push(navigator.platform),t.push(navigator.doNotTrack),t.push(this.getPluginsString()),this.canvas&&this.isCanvasSupported()&&t.push(this.getCanvasFingerprint()),this.hasher?this.hasher(t.join("###"),31):this.murmurhash3_32_gc(t.join("###"),31)},murmurhash3_32_gc:function(t,e){var n,r,i,a,o,s,h,c;for(n=3&t.length,r=t.length-n,i=e,o=3432918353,s=461845907,c=0;r>c;)h=255&t.charCodeAt(c)|(255&t.charCodeAt(++c))<<8|(255&t.charCodeAt(++c))<<16|(255&t.charCodeAt(++c))<<24,++c,h=(65535&h)*o+(((h>>>16)*o&65535)<<16)&4294967295,h=h<<15|h>>>17,h=(65535&h)*s+(((h>>>16)*s&65535)<<16)&4294967295,i^=h,i=i<<13|i>>>19,a=5*(65535&i)+((5*(i>>>16)&65535)<<16)&4294967295,i=(65535&a)+27492+(((a>>>16)+58964&65535)<<16);switch(h=0,n){case 3:h^=(255&t.charCodeAt(c+2))<<16;case 2:h^=(255&t.charCodeAt(c+1))<<8;case 1:h^=255&t.charCodeAt(c),h=(65535&h)*o+(((h>>>16)*o&65535)<<16)&4294967295,h=h<<15|h>>>17,h=(65535&h)*s+(((h>>>16)*s&65535)<<16)&4294967295,i^=h}return i^=t.length,i^=i>>>16,i=2246822507*(65535&i)+((2246822507*(i>>>16)&65535)<<16)&4294967295,i^=i>>>13,i=3266489909*(65535&i)+((3266489909*(i>>>16)&65535)<<16)&4294967295,i^=i>>>16,i>>>0},hasLocalStorage:function(){try{return!!window.localStorage}catch(t){return!0}},hasSessionStorage:function(){try{return!!window.sessionStorage}catch(t){return!0}},hasIndexDb:function(){try{return!!window.indexedDB}catch(t){return!0}},isCanvasSupported:function(){var t=document.createElement("canvas");return!(!t.getContext||!t.getContext("2d"))},isIE:function(){return"Microsoft Internet Explorer"===navigator.appName?!0:"Netscape"===navigator.appName&&/Trident/.test(navigator.userAgent)?!0:!1},getPluginsString:function(){return this.isIE()&&this.ie_activex?this.getIEPluginsString():this.getRegularPluginsString()},getRegularPluginsString:function(){return this.map(navigator.plugins,function(t){var e=this.map(t,function(t){return[t.type,t.suffixes].join("~")}).join(",");return[t.name,t.description,e].join("::")},this).join(";")},getIEPluginsString:function(){if(window.ActiveXObject){var t=["ShockwaveFlash.ShockwaveFlash","AcroPDF.PDF","PDF.PdfCtrl","QuickTime.QuickTime","rmocx.RealPlayer G2 Control","rmocx.RealPlayer G2 Control.1","RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)","RealVideo.RealVideo(tm) ActiveX Control (32-bit)","RealPlayer","SWCtl.SWCtl","WMPlayer.OCX","AgControl.AgControl","Skype.Detection"];return this.map(t,function(t){try{return new ActiveXObject(t),t}catch(e){return null}}).join(";")}return""},getScreenResolution:function(){var t;return t=this.screen_orientation?screen.height>screen.width?[screen.height,screen.width]:[screen.width,screen.height]:[screen.height,screen.width]},getCanvasFingerprint:function(){var t=document.createElement("canvas"),e=t.getContext("2d"),n="http://valve.github.io";return e.textBaseline="top",e.font="14px 'Arial'",e.textBaseline="alphabetic",e.fillStyle="#f60",e.fillRect(125,1,62,20),e.fillStyle="#069",e.fillText(n,2,15),e.fillStyle="rgba(102, 204, 0, 0.7)",e.fillText(n,4,17),t.toDataURL()}},t});
@@ -4,11 +4,11 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |gem|
6
6
  gem.name = "fingerprintjs-rails"
7
- gem.version = "0.5.3"
7
+ gem.version = "0.5.5"
8
8
  gem.authors = ["Valentin Vasilyev"]
9
9
  gem.email = ["valentin.vasilyev@outlook.com"]
10
10
  gem.description = "fingerprintjs for rails asset pipeline"
11
- gem.summary = "FingerprintJS JavaScript library, packaged for Ruby-on-Rails asset pipeline"
11
+ gem.summary = "FingerprintJS JavaScript library, packaged for Ruby on Rails asset pipeline"
12
12
  gem.homepage = "http://valve.github.com/fingerprintjs"
13
13
 
14
14
  gem.files = `git ls-files`.split($/)
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fingerprintjs-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.3
5
- prerelease:
4
+ version: 0.5.5
6
5
  platform: ruby
7
6
  authors:
8
7
  - Valentin Vasilyev
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-02-04 00:00:00.000000000 Z
11
+ date: 2017-07-26 00:00:00.000000000 Z
13
12
  dependencies: []
14
13
  description: fingerprintjs for rails asset pipeline
15
14
  email:
@@ -18,7 +17,7 @@ executables: []
18
17
  extensions: []
19
18
  extra_rdoc_files: []
20
19
  files:
21
- - .gitignore
20
+ - ".gitignore"
22
21
  - Gemfile
23
22
  - LICENSE.txt
24
23
  - README.md
@@ -29,26 +28,25 @@ files:
29
28
  - lib/fingerprintjs-rails.rb
30
29
  homepage: http://valve.github.com/fingerprintjs
31
30
  licenses: []
31
+ metadata: {}
32
32
  post_install_message:
33
33
  rdoc_options: []
34
34
  require_paths:
35
35
  - lib
36
36
  required_ruby_version: !ruby/object:Gem::Requirement
37
- none: false
38
37
  requirements:
39
- - - ! '>='
38
+ - - ">="
40
39
  - !ruby/object:Gem::Version
41
40
  version: '0'
42
41
  required_rubygems_version: !ruby/object:Gem::Requirement
43
- none: false
44
42
  requirements:
45
- - - ! '>='
43
+ - - ">="
46
44
  - !ruby/object:Gem::Version
47
45
  version: '0'
48
46
  requirements: []
49
47
  rubyforge_project:
50
- rubygems_version: 1.8.23
48
+ rubygems_version: 2.6.11
51
49
  signing_key:
52
- specification_version: 3
53
- summary: FingerprintJS JavaScript library, packaged for Ruby-on-Rails asset pipeline
50
+ specification_version: 4
51
+ summary: FingerprintJS JavaScript library, packaged for Ruby on Rails asset pipeline
54
52
  test_files: []