Update portal JS

This commit is contained in:
Xavier Guimard 2019-06-24 11:38:00 +02:00
parent 750eaafe65
commit 1c17c6b077
5 changed files with 219 additions and 195 deletions

View File

@ -1,5 +1,5 @@
/*
* Fingerprintjs2 2.0.5 - Modern & flexible browser fingerprint library v2
* Fingerprintjs2 2.1.0 - 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.
@ -22,12 +22,12 @@
})('Fingerprint2', this, function () {
'use strict'
/// MurmurHash3 related functions
/// MurmurHash3 related functions
//
// Given two 64bit ints (as an array of two 32bit ints) returns the two
// added together as a 64bit int (as an array of two 32bit ints).
//
//
// Given two 64bit ints (as an array of two 32bit ints) returns the two
// added together as a 64bit int (as an array of two 32bit ints).
//
var x64Add = function (m, n) {
m = [m[0] >>> 16, m[0] & 0xffff, m[1] >>> 16, m[1] & 0xffff]
n = [n[0] >>> 16, n[0] & 0xffff, n[1] >>> 16, n[1] & 0xffff]
@ -46,10 +46,10 @@
return [(o[0] << 16) | o[1], (o[2] << 16) | o[3]]
}
//
// Given two 64bit ints (as an array of two 32bit ints) returns the two
// multiplied together as a 64bit int (as an array of two 32bit ints).
//
//
// Given two 64bit ints (as an array of two 32bit ints) returns the two
// multiplied together as a 64bit int (as an array of two 32bit ints).
//
var x64Multiply = function (m, n) {
m = [m[0] >>> 16, m[0] & 0xffff, m[1] >>> 16, m[1] & 0xffff]
n = [n[0] >>> 16, n[0] & 0xffff, n[1] >>> 16, n[1] & 0xffff]
@ -76,11 +76,11 @@
o[0] &= 0xffff
return [(o[0] << 16) | o[1], (o[2] << 16) | o[3]]
}
//
// Given a 64bit int (as an array of two 32bit ints) and an int
// representing a number of bit positions, returns the 64bit int (as an
// array of two 32bit ints) rotated left by that number of positions.
//
//
// Given a 64bit int (as an array of two 32bit ints) and an int
// representing a number of bit positions, returns the 64bit int (as an
// array of two 32bit ints) rotated left by that number of positions.
//
var x64Rotl = function (m, n) {
n %= 64
if (n === 32) {
@ -92,11 +92,11 @@
return [(m[1] << n) | (m[0] >>> (32 - n)), (m[0] << n) | (m[1] >>> (32 - n))]
}
}
//
// Given a 64bit int (as an array of two 32bit ints) and an int
// representing a number of bit positions, returns the 64bit int (as an
// array of two 32bit ints) shifted left by that number of positions.
//
//
// Given a 64bit int (as an array of two 32bit ints) and an int
// representing a number of bit positions, returns the 64bit int (as an
// array of two 32bit ints) shifted left by that number of positions.
//
var x64LeftShift = function (m, n) {
n %= 64
if (n === 0) {
@ -107,18 +107,18 @@
return [m[1] << (n - 32), 0]
}
}
//
// Given two 64bit ints (as an array of two 32bit ints) returns the two
// xored together as a 64bit int (as an array of two 32bit ints).
//
//
// Given two 64bit ints (as an array of two 32bit ints) returns the two
// xored together as a 64bit int (as an array of two 32bit ints).
//
var x64Xor = function (m, n) {
return [m[0] ^ n[0], m[1] ^ n[1]]
}
//
// Given a block, returns murmurHash3's final x64 mix of that block.
// (`[0, h[0] >>> 1]` is a 33 bit unsigned right shift. This is the
// only place where we need to right shift 64bit ints.)
//
//
// Given a block, returns murmurHash3's final x64 mix of that block.
// (`[0, h[0] >>> 1]` is a 33 bit unsigned right shift. This is the
// only place where we need to right shift 64bit ints.)
//
var x64Fmix = function (h) {
h = x64Xor(h, [0, h[0] >>> 1])
h = x64Multiply(h, [0xff51afd7, 0xed558ccd])
@ -128,10 +128,10 @@
return h
}
//
// Given a string and an optional seed as an int, returns a 128 bit
// hash using the x64 flavor of MurmurHash3, as an unsigned hex.
//
//
// Given a string and an optional seed as an int, returns a 128 bit
// hash using the x64 flavor of MurmurHash3, as an unsigned hex.
//
var x64hash128 = function (key, seed) {
key = key || ''
seed = seed || 0
@ -311,7 +311,7 @@
return target
}
// https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/enumerateDevices
// https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/enumerateDevices
var enumerateDevicesKey = function (done, options) {
if (!isEnumerateDevicesSupported()) {
return done(options.NOT_AVAILABLE)
@ -329,7 +329,7 @@
var isEnumerateDevicesSupported = function () {
return (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices)
}
// Inspired by and based on https://github.com/cozylife/audio-fingerprint
// Inspired by and based on https://github.com/cozylife/audio-fingerprint
var audioKey = function (done, options) {
var audioOptions = options.audio
if (audioOptions.excludeIOS11 && navigator.userAgent.match(/OS 11.+Version\/11.+Safari/)) {
@ -370,7 +370,7 @@
var audioTimeoutId = setTimeout(function () {
console.warn('Audio fingerprint timed out. Please report bug at https://github.com/Valve/fingerprintjs2 with your user agent: "' + navigator.userAgent + '".')
context.oncomplete = function () {}
context.oncomplete = function () { }
context = null
return done('audioTimeout')
}, audioOptions.timeout)
@ -395,6 +395,9 @@
var UserAgent = function (done) {
done(navigator.userAgent)
}
var webdriver = function (done, options) {
done(navigator.webdriver == null ? options.NOT_AVAILABLE : navigator.webdriver)
}
var languageKey = function (done, options) {
done(navigator.language || navigator.userLanguage || navigator.browserLanguage || navigator.systemLanguage || options.NOT_AVAILABLE)
}
@ -502,7 +505,7 @@
var hasLiedBrowserKey = function (done) {
done(getHasLiedBrowser())
}
// flash fonts (will increase fingerprinting time 20X to ~ 130-150ms)
// flash fonts (will increase fingerprinting time 20X to ~ 130-150ms)
var flashFontsKey = function (done, options) {
// we do flash if swfobject is loaded
if (!hasSwfObjectLoaded()) {
@ -518,7 +521,7 @@
done(fonts)
}, options)
}
// kudos to http://www.lalit.org/lab/javascript-css-font-detect/
// kudos to http://www.lalit.org/lab/javascript-css-font-detect/
var jsFontsKey = function (done, options) {
// a font will be compared against all the three default fonts.
// and if it doesn't match all 3 then that font is not available.
@ -815,7 +818,7 @@
}
}
// https://bugzilla.mozilla.org/show_bug.cgi?id=781447
// https://bugzilla.mozilla.org/show_bug.cgi?id=781447
var hasLocalStorage = function (options) {
try {
return !!window.localStorage
@ -857,14 +860,14 @@
return options.NOT_AVAILABLE
}
}
// This is a crude and primitive touch screen detection.
// It's not possible to currently reliably detect the availability of a touch screen
// with a JS, without actually subscribing to a touch event.
// http://www.stucox.com/blog/you-cant-detect-a-touchscreen/
// https://github.com/Modernizr/Modernizr/issues/548
// method returns an array of 3 values:
// maxTouchPoints, the success or failure of creating a TouchEvent,
// and the availability of the 'ontouchstart' property
// This is a crude and primitive touch screen detection.
// It's not possible to currently reliably detect the availability of a touch screen
// with a JS, without actually subscribing to a touch event.
// http://www.stucox.com/blog/you-cant-detect-a-touchscreen/
// https://github.com/Modernizr/Modernizr/issues/548
// method returns an array of 3 values:
// maxTouchPoints, the success or failure of creating a TouchEvent,
// and the availability of the 'ontouchstart' property
var getTouchSupport = function () {
var maxTouchPoints = 0
@ -883,7 +886,7 @@
var touchStart = 'ontouchstart' in window
return [maxTouchPoints, touchEvent, touchStart]
}
// https://www.browserleaks.com/canvas#how-does-it-work
// https://www.browserleaks.com/canvas#how-does-it-work
var getCanvasFp = function (options) {
var result = []
@ -1087,6 +1090,7 @@
}
var getHasLiedLanguages = function () {
// We check if navigator.language is equal to the first language of navigator.languages
// navigator.languages is undefined on IE11 (and potentially older IEs)
if (typeof navigator.languages !== 'undefined') {
try {
var firstLanguages = navigator.languages[0].substr(0, 2)
@ -1114,7 +1118,7 @@
os = 'Windows'
} else if (userAgent.indexOf('android') >= 0) {
os = 'Android'
} else if (userAgent.indexOf('linux') >= 0) {
} else if (userAgent.indexOf('linux') >= 0 || userAgent.indexOf('cros') >= 0) {
os = 'Linux'
} else if (userAgent.indexOf('iphone') >= 0 || userAgent.indexOf('ipad') >= 0) {
os = 'iOS'
@ -1153,9 +1157,16 @@
return true
} else if ((platform.indexOf('mac') >= 0 || platform.indexOf('ipad') >= 0 || platform.indexOf('ipod') >= 0 || platform.indexOf('iphone') >= 0) && os !== 'Mac' && os !== 'iOS') {
return true
} else if ((platform.indexOf('win') === -1 && platform.indexOf('linux') === -1 && platform.indexOf('mac') === -1) !== (os === 'Other')) {
} else {
var platformIsOther = platform.indexOf('win') < 0 &&
platform.indexOf('linux') < 0 &&
platform.indexOf('mac') < 0 &&
platform.indexOf('iphone') < 0 &&
platform.indexOf('ipad') < 0
if (platformIsOther !== (os === 'Other')) {
return true
}
}
return typeof navigator.plugins === 'undefined' && os !== 'Windows' && os !== 'Windows Phone'
}
@ -1262,38 +1273,39 @@
}
var components = [
{key: 'userAgent', getData: UserAgent},
{key: 'language', getData: languageKey},
{key: 'colorDepth', getData: colorDepthKey},
{key: 'deviceMemory', getData: deviceMemoryKey},
{key: 'pixelRatio', getData: pixelRatioKey},
{key: 'hardwareConcurrency', getData: hardwareConcurrencyKey},
{key: 'screenResolution', getData: screenResolutionKey},
{key: 'availableScreenResolution', getData: availableScreenResolutionKey},
{key: 'timezoneOffset', getData: timezoneOffset},
{key: 'timezone', getData: timezone},
{key: 'sessionStorage', getData: sessionStorageKey},
{key: 'localStorage', getData: localStorageKey},
{key: 'indexedDb', getData: indexedDbKey},
{key: 'addBehavior', getData: addBehaviorKey},
{key: 'openDatabase', getData: openDatabaseKey},
{key: 'cpuClass', getData: cpuClassKey},
{key: 'platform', getData: platformKey},
{key: 'doNotTrack', getData: doNotTrackKey},
{key: 'plugins', getData: pluginsComponent},
{key: 'canvas', getData: canvasKey},
{key: 'webgl', getData: webglKey},
{key: 'webglVendorAndRenderer', getData: webglVendorAndRendererKey},
{key: 'adBlock', getData: adBlockKey},
{key: 'hasLiedLanguages', getData: hasLiedLanguagesKey},
{key: 'hasLiedResolution', getData: hasLiedResolutionKey},
{key: 'hasLiedOs', getData: hasLiedOsKey},
{key: 'hasLiedBrowser', getData: hasLiedBrowserKey},
{key: 'touchSupport', getData: touchSupportKey},
{key: 'fonts', getData: jsFontsKey, pauseBefore: true},
{key: 'fontsFlash', getData: flashFontsKey, pauseBefore: true},
{key: 'audio', getData: audioKey},
{key: 'enumerateDevices', getData: enumerateDevicesKey}
{ key: 'userAgent', getData: UserAgent },
{ key: 'webdriver', getData: webdriver },
{ key: 'language', getData: languageKey },
{ key: 'colorDepth', getData: colorDepthKey },
{ key: 'deviceMemory', getData: deviceMemoryKey },
{ key: 'pixelRatio', getData: pixelRatioKey },
{ key: 'hardwareConcurrency', getData: hardwareConcurrencyKey },
{ key: 'screenResolution', getData: screenResolutionKey },
{ key: 'availableScreenResolution', getData: availableScreenResolutionKey },
{ key: 'timezoneOffset', getData: timezoneOffset },
{ key: 'timezone', getData: timezone },
{ key: 'sessionStorage', getData: sessionStorageKey },
{ key: 'localStorage', getData: localStorageKey },
{ key: 'indexedDb', getData: indexedDbKey },
{ key: 'addBehavior', getData: addBehaviorKey },
{ key: 'openDatabase', getData: openDatabaseKey },
{ key: 'cpuClass', getData: cpuClassKey },
{ key: 'platform', getData: platformKey },
{ key: 'doNotTrack', getData: doNotTrackKey },
{ key: 'plugins', getData: pluginsComponent },
{ key: 'canvas', getData: canvasKey },
{ key: 'webgl', getData: webglKey },
{ key: 'webglVendorAndRenderer', getData: webglVendorAndRendererKey },
{ key: 'adBlock', getData: adBlockKey },
{ key: 'hasLiedLanguages', getData: hasLiedLanguagesKey },
{ key: 'hasLiedResolution', getData: hasLiedResolutionKey },
{ key: 'hasLiedOs', getData: hasLiedOsKey },
{ key: 'hasLiedBrowser', getData: hasLiedBrowserKey },
{ key: 'touchSupport', getData: touchSupportKey },
{ key: 'fonts', getData: jsFontsKey, pauseBefore: true },
{ key: 'fontsFlash', getData: flashFontsKey, pauseBefore: true },
{ key: 'audio', getData: audioKey },
{ key: 'enumerateDevices', getData: enumerateDevicesKey }
]
var Fingerprint2 = function (options) {
@ -1316,7 +1328,7 @@
if (typeof options.preprocessor === 'function') {
value = options.preprocessor(key, value)
}
keys.data.push({key: key, value: value})
keys.data.push({ key: key, value: value })
}
}
@ -1373,30 +1385,32 @@
for (var i = 0; i < components.length; i++) {
var component = components[i]
if (component.value === (options.NOT_AVAILABLE || 'not available')) {
newComponents.push({key: component.key, value: 'unknown'})
newComponents.push({ key: component.key, value: 'unknown' })
} else if (component.key === 'plugins') {
newComponents.push({key: 'plugins',
newComponents.push({
key: 'plugins',
value: map(component.value, function (p) {
var mimeTypes = map(p[2], function (mt) {
if (mt.join) { return mt.join('~') }
return mt
}).join(',')
return [p[0], p[1], mimeTypes].join('::')
})})
})
})
} else if (['canvas', 'webgl'].indexOf(component.key) !== -1) {
newComponents.push({key: component.key, value: component.value.join('~')})
newComponents.push({ key: component.key, value: component.value.join('~') })
} else if (['sessionStorage', 'localStorage', 'indexedDb', 'addBehavior', 'openDatabase'].indexOf(component.key) !== -1) {
if (component.value) {
newComponents.push({key: component.key, value: 1})
newComponents.push({ key: component.key, value: 1 })
} else {
// skip
continue
}
} else {
if (component.value) {
newComponents.push(component.value.join ? {key: component.key, value: component.value.join(';')} : component)
newComponents.push(component.value.join ? { key: component.key, value: component.value.join(';') } : component)
} else {
newComponents.push({key: component.key, value: component.value})
newComponents.push({ key: component.key, value: component.value })
}
}
}
@ -1406,6 +1420,6 @@
}
Fingerprint2.x64hash128 = x64hash128
Fingerprint2.VERSION = '2.0.0'
Fingerprint2.VERSION = '2.1.0'
return Fingerprint2
})

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
/*!
* jQuery JavaScript Library v3.4.0
* jQuery JavaScript Library v3.4.1
* https://jquery.com/
*
* Includes Sizzle.js
@ -9,7 +9,7 @@
* Released under the MIT license
* https://jquery.org/license
*
* Date: 2019-04-10T19:48Z
* Date: 2019-05-01T21:04Z
*/
( function( global, factory ) {
@ -142,7 +142,7 @@ function toType( obj ) {
var
version = "3.4.0",
version = "3.4.1",
// Define a local copy of jQuery
jQuery = function( selector, context ) {
@ -4498,8 +4498,12 @@ var documentElement = document.documentElement;
},
composed = { composed: true };
// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
// Check attachment across shadow DOM boundaries when possible (gh-3504)
if ( documentElement.attachShadow ) {
// Support: iOS 10.0-10.2 only
// Early iOS 10 versions support `attachShadow` but not `getRootNode`,
// leading to errors. We need to check for `getRootNode`.
if ( documentElement.getRootNode ) {
isAttached = function( elem ) {
return jQuery.contains( elem.ownerDocument, elem ) ||
elem.getRootNode( composed ) === elem.ownerDocument;
@ -5359,8 +5363,7 @@ jQuery.event = {
// Claim the first handler
if ( rcheckableType.test( el.type ) &&
el.click && nodeName( el, "input" ) &&
dataPriv.get( el, "click" ) === undefined ) {
el.click && nodeName( el, "input" ) ) {
// dataPriv.set( el, "click", ... )
leverageNative( el, "click", returnTrue );
@ -5377,8 +5380,7 @@ jQuery.event = {
// Force setup before triggering a click
if ( rcheckableType.test( el.type ) &&
el.click && nodeName( el, "input" ) &&
dataPriv.get( el, "click" ) === undefined ) {
el.click && nodeName( el, "input" ) ) {
leverageNative( el, "click" );
}
@ -5419,7 +5421,9 @@ function leverageNative( el, type, expectSync ) {
// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add
if ( !expectSync ) {
if ( dataPriv.get( el, type ) === undefined ) {
jQuery.event.add( el, type, returnTrue );
}
return;
}
@ -5434,9 +5438,13 @@ function leverageNative( el, type, expectSync ) {
if ( ( event.isTrigger & 1 ) && this[ type ] ) {
// Interrupt processing of the outer synthetic .trigger()ed event
if ( !saved ) {
// Saved data should be false in such cases, but might be a leftover capture object
// from an async native handler (gh-4350)
if ( !saved.length ) {
// Store arguments for use when handling the inner native event
// There will always be at least one argument (an event object), so this array
// will not be confused with a leftover capture object.
saved = slice.call( arguments );
dataPriv.set( this, type, saved );
@ -5449,14 +5457,14 @@ function leverageNative( el, type, expectSync ) {
if ( saved !== result || notAsync ) {
dataPriv.set( this, type, false );
} else {
result = undefined;
result = {};
}
if ( saved !== result ) {
// Cancel the outer synthetic event
event.stopImmediatePropagation();
event.preventDefault();
return result;
return result.value;
}
// If this is an inner synthetic event for an event with a bubbling surrogate
@ -5471,17 +5479,19 @@ function leverageNative( el, type, expectSync ) {
// If this is a native event triggered above, everything is now in order
// Fire an inner synthetic event with the original arguments
} else if ( saved ) {
} else if ( saved.length ) {
// ...and capture the result
dataPriv.set( this, type, jQuery.event.trigger(
dataPriv.set( this, type, {
value: jQuery.event.trigger(
// Support: IE <=9 - 11+
// Extend with the prototype to reset the above stopImmediatePropagation()
jQuery.extend( saved.shift(), jQuery.Event.prototype ),
saved,
jQuery.extend( saved[ 0 ], jQuery.Event.prototype ),
saved.slice( 1 ),
this
) );
)
} );
// Abort handling of the native event
event.stopImmediatePropagation();

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long