/bower_components/fingerprintjs2/fingerprint2.js |
@@ -1,5 +1,5 @@ |
/* |
* Fingerprintjs2 1.5.0 - Modern & flexible browser fingerprint library v2 |
* Fingerprintjs2 1.5.1 - Modern & flexible browser fingerprint library v2 |
* https://github.com/Valve/fingerprintjs2 |
* Copyright (c) 2015 Valentin Vasilyev (valentin.vasilyev@outlook.com) |
* Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license. |
@@ -24,36 +24,6 @@ |
else { context[name] = definition(); } |
})("Fingerprint2", this, function() { |
"use strict"; |
// This will only be polyfilled for IE8 and older |
// Taken from Mozilla MDC |
if (!Array.prototype.indexOf) { |
Array.prototype.indexOf = function(searchElement, fromIndex) { |
var k; |
if (this == null) { |
throw new TypeError("'this' is null or undefined"); |
} |
var O = Object(this); |
var len = O.length >>> 0; |
if (len === 0) { |
return -1; |
} |
var n = +fromIndex || 0; |
if (Math.abs(n) === Infinity) { |
n = 0; |
} |
if (n >= len) { |
return -1; |
} |
k = Math.max(n >= 0 ? n : len - Math.abs(n), 0); |
while (k < len) { |
if (k in O && O[k] === searchElement) { |
return k; |
} |
k++; |
} |
return -1; |
}; |
} |
var Fingerprint2 = function(options) { |
|
if (!(this instanceof Fingerprint2)) { |
@@ -81,11 +51,6 @@ |
} |
return target; |
}, |
log: function(msg){ |
if(window.console){ |
console.log(msg); |
} |
}, |
get: function(done){ |
var keys = []; |
keys = this.userAgentKey(keys); |
@@ -113,6 +78,7 @@ |
keys = this.hasLiedOsKey(keys); |
keys = this.hasLiedBrowserKey(keys); |
keys = this.touchSupportKey(keys); |
keys = this.customEntropyFunction(keys); |
var that = this; |
this.fontsKey(keys, function(newKeys){ |
var values = []; |
@@ -127,6 +93,12 @@ |
return done(murmur, newKeys); |
}); |
}, |
customEntropyFunction: function (keys) { |
if (typeof this.options.customFunction === "function") { |
keys.push({key: "custom", value: this.options.customFunction()}); |
} |
return keys; |
}, |
userAgentKey: function(keys) { |
if(!this.options.excludeUserAgent) { |
keys.push({key: "user_agent", value: this.getUserAgent()}); |
@@ -260,15 +232,9 @@ |
}, |
webglKey: function(keys) { |
if(this.options.excludeWebGL) { |
if(typeof NODEBUG === "undefined"){ |
this.log("Skipping WebGL fingerprinting per excludeWebGL configuration option"); |
} |
return keys; |
} |
if(!this.isWebGlSupported()) { |
if(typeof NODEBUG === "undefined"){ |
this.log("Skipping WebGL fingerprinting because it is not supported in this browser"); |
} |
return keys; |
} |
keys.push({key: "webgl", value: this.getWebglFp()}); |
@@ -313,28 +279,16 @@ |
// flash fonts (will increase fingerprinting time 20X to ~ 130-150ms) |
flashFontsKey: function(keys, done) { |
if(this.options.excludeFlashFonts) { |
if(typeof NODEBUG === "undefined"){ |
this.log("Skipping flash fonts detection per excludeFlashFonts configuration option"); |
} |
return done(keys); |
} |
// we do flash if swfobject is loaded |
if(!this.hasSwfObjectLoaded()){ |
if(typeof NODEBUG === "undefined"){ |
this.log("Swfobject is not detected, Flash fonts enumeration is skipped"); |
} |
return done(keys); |
} |
if(!this.hasMinFlashInstalled()){ |
if(typeof NODEBUG === "undefined"){ |
this.log("Flash is not installed, skipping Flash fonts enumeration"); |
} |
return done(keys); |
} |
if(typeof this.options.swfPath === "undefined"){ |
if(typeof NODEBUG === "undefined"){ |
this.log("To use Flash fonts detection, you must pass a valid swfPath option, skipping Flash fonts enumeration"); |
} |
return done(keys); |
} |
this.loadSwfAndDetectFonts(function(fonts){ |
@@ -830,11 +784,7 @@ |
try { |
// Add the unmasked vendor and unmasked renderer if the debug_renderer_info extension is available |
var extensionDebugRendererInfo = gl.getExtension("WEBGL_debug_renderer_info"); |
if (!extensionDebugRendererInfo) { |
if (typeof NODEBUG === "undefined") { |
this.log("WebGL fingerprinting is incomplete, because your browser does not have the extension WEBGL_debug_renderer_info"); |
} |
} else { |
if (extensionDebugRendererInfo) { |
result.push("webgl unmasked vendor:" + gl.getParameter(extensionDebugRendererInfo.UNMASKED_VENDOR_WEBGL)); |
result.push("webgl unmasked renderer:" + gl.getParameter(extensionDebugRendererInfo.UNMASKED_RENDERER_WEBGL)); |
} |
@@ -841,9 +791,6 @@ |
} catch(e) { /* squelch */ } |
|
if (!gl.getShaderPrecisionFormat) { |
if (typeof NODEBUG === "undefined") { |
this.log("WebGL fingerprinting is incomplete, because your browser does not support getShaderPrecisionFormat"); |
} |
return result.join("~"); |
} |
|
@@ -1327,6 +1274,6 @@ |
return ("00000000" + (h1[0] >>> 0).toString(16)).slice(-8) + ("00000000" + (h1[1] >>> 0).toString(16)).slice(-8) + ("00000000" + (h2[0] >>> 0).toString(16)).slice(-8) + ("00000000" + (h2[1] >>> 0).toString(16)).slice(-8); |
} |
}; |
Fingerprint2.VERSION = "1.5.0"; |
Fingerprint2.VERSION = "1.5.1"; |
return Fingerprint2; |
}); |