mirror of
https://github.com/philomena-dev/philomena.git
synced 2024-12-11 03:28:01 +01:00
52 lines
1 KiB
JavaScript
52 lines
1 KiB
JavaScript
|
/**
|
||
|
* Fingerprints
|
||
|
*/
|
||
|
|
||
|
// http://stackoverflow.com/a/34842797
|
||
|
function hashCode(str) {
|
||
|
return str.split('').reduce((prevHash, currVal) =>
|
||
|
((prevHash << 5) - prevHash) + currVal.charCodeAt(0), 0) >>> 0;
|
||
|
}
|
||
|
|
||
|
function createFingerprint() {
|
||
|
const prints = [
|
||
|
navigator.userAgent,
|
||
|
navigator.cpuClass,
|
||
|
navigator.oscpu,
|
||
|
navigator.platform,
|
||
|
|
||
|
navigator.browserLanguage,
|
||
|
navigator.language,
|
||
|
navigator.systemLanguage,
|
||
|
navigator.userLanguage,
|
||
|
|
||
|
screen.availLeft,
|
||
|
screen.availTop,
|
||
|
screen.availWidth,
|
||
|
screen.height,
|
||
|
screen.width,
|
||
|
|
||
|
window.devicePixelRatio,
|
||
|
new Date().getTimezoneOffset(),
|
||
|
];
|
||
|
|
||
|
return hashCode(prints.join(''));
|
||
|
}
|
||
|
|
||
|
function setFingerprintCookie() {
|
||
|
let fingerprint;
|
||
|
|
||
|
// The prepended 'c' acts as a crude versioning mechanism.
|
||
|
try {
|
||
|
fingerprint = `c${createFingerprint()}`;
|
||
|
}
|
||
|
// If fingerprinting fails, use fakeprint "c1836832948" as a last resort.
|
||
|
catch (err) {
|
||
|
fingerprint = 'c1836832948';
|
||
|
}
|
||
|
|
||
|
document.cookie = `_ses=${fingerprint}; path=/`;
|
||
|
}
|
||
|
|
||
|
export { setFingerprintCookie };
|