|
@@ -99,7 +99,7 @@ export const getGravatarURL = (email) => {
|
|
export const canvasPixelTest = () => {
|
|
export const canvasPixelTest = () => {
|
|
// Test a 1x1 pixel to potentially identify browser/plugin fingerprint blocking or spoofing
|
|
// Test a 1x1 pixel to potentially identify browser/plugin fingerprint blocking or spoofing
|
|
// Inspiration: https://github.com/kkapsner/CanvasBlocker/blob/master/test/detectionTest.js
|
|
// Inspiration: https://github.com/kkapsner/CanvasBlocker/blob/master/test/detectionTest.js
|
|
- const canvas = document.createElement("canvas");
|
|
|
|
|
|
+ const canvas = document.createElement('canvas');
|
|
const ctx = canvas.getContext('2d');
|
|
const ctx = canvas.getContext('2d');
|
|
canvas.height = 1;
|
|
canvas.height = 1;
|
|
canvas.width = 1;
|
|
canvas.width = 1;
|
|
@@ -107,11 +107,10 @@ export const canvasPixelTest = () => {
|
|
const pixelValues = imageData.data;
|
|
const pixelValues = imageData.data;
|
|
|
|
|
|
// Generate RGB test data
|
|
// Generate RGB test data
|
|
- for (let i = 0; i < imageData.data.length; i += 1){
|
|
|
|
- if (i % 4 !== 3){
|
|
|
|
|
|
+ for (let i = 0; i < imageData.data.length; i += 1) {
|
|
|
|
+ if (i % 4 !== 3) {
|
|
pixelValues[i] = Math.floor(256 * Math.random());
|
|
pixelValues[i] = Math.floor(256 * Math.random());
|
|
- }
|
|
|
|
- else {
|
|
|
|
|
|
+ } else {
|
|
pixelValues[i] = 255;
|
|
pixelValues[i] = 255;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -120,16 +119,23 @@ export const canvasPixelTest = () => {
|
|
const p = ctx.getImageData(0, 0, canvas.width, canvas.height).data;
|
|
const p = ctx.getImageData(0, 0, canvas.width, canvas.height).data;
|
|
|
|
|
|
// Read RGB data and fail if unmatched
|
|
// Read RGB data and fail if unmatched
|
|
- for (let i = 0; i < p.length; i += 1){
|
|
|
|
- if (p[i] !== pixelValues[i]){
|
|
|
|
- console.log("canvasPixelTest: Wrong canvas pixel RGB value detected:", p[i], "at:", i, "expected:", pixelValues[i]);
|
|
|
|
- console.log("canvasPixelTest: Canvas blocking or spoofing is likely");
|
|
|
|
|
|
+ for (let i = 0; i < p.length; i += 1) {
|
|
|
|
+ if (p[i] !== pixelValues[i]) {
|
|
|
|
+ console.log(
|
|
|
|
+ 'canvasPixelTest: Wrong canvas pixel RGB value detected:',
|
|
|
|
+ p[i],
|
|
|
|
+ 'at:',
|
|
|
|
+ i,
|
|
|
|
+ 'expected:',
|
|
|
|
+ pixelValues[i]
|
|
|
|
+ );
|
|
|
|
+ console.log('canvasPixelTest: Canvas blocking or spoofing is likely');
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
return true;
|
|
return true;
|
|
-}
|
|
|
|
|
|
+};
|
|
|
|
|
|
export const generateInitialsImage = (name) => {
|
|
export const generateInitialsImage = (name) => {
|
|
const canvas = document.createElement('canvas');
|
|
const canvas = document.createElement('canvas');
|
|
@@ -138,7 +144,9 @@ export const generateInitialsImage = (name) => {
|
|
canvas.height = 100;
|
|
canvas.height = 100;
|
|
|
|
|
|
if (!canvasPixelTest()) {
|
|
if (!canvasPixelTest()) {
|
|
- console.log("generateInitialsImage: failed pixel test, fingerprint evasion is likely. Using default image.");
|
|
|
|
|
|
+ console.log(
|
|
|
|
+ 'generateInitialsImage: failed pixel test, fingerprint evasion is likely. Using default image.'
|
|
|
|
+ );
|
|
return '/user.png';
|
|
return '/user.png';
|
|
}
|
|
}
|
|
|
|
|