Added navigator block
This commit is contained in:
parent
780eac5aac
commit
e52a895d55
19 changed files with 331 additions and 122 deletions
|
|
@ -39,5 +39,6 @@ module.exports = {
|
|||
'react/react-in-jsx-scope': 'off',
|
||||
'no-bitwise': 'off',
|
||||
'react/no-array-index-key': 'off',
|
||||
'dot-notation': 'off',
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -3,6 +3,11 @@ const data = {
|
|||
timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,
|
||||
timezoneOffset: new Date().getTimezoneOffset(),
|
||||
date: new Date().toString(),
|
||||
deviceMemory: navigator.deviceMemory,
|
||||
hardwareConcurrency: navigator.hardwareConcurrency,
|
||||
platform: navigator.platform,
|
||||
userAgent: navigator.userAgent,
|
||||
appVersion: navigator.appVersion,
|
||||
language: navigator.language,
|
||||
languages: navigator.languages,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -29,9 +29,9 @@ const ScanBlocks = () => {
|
|||
{connectionData ? (
|
||||
<>
|
||||
<div className="centerBlockInner">
|
||||
{/* <FingerprintBlock />
|
||||
<NavigatorBlock />
|
||||
<UserAgentBlock />
|
||||
{/* <FingerprintBlock /> */}
|
||||
<NavigatorBlock workerData={workerData} />
|
||||
{/* <UserAgentBlock />
|
||||
<IntlBlock /> */}
|
||||
</div>
|
||||
<div className="centerBlockInner">
|
||||
|
|
@ -43,8 +43,8 @@ const ScanBlocks = () => {
|
|||
workerData={workerData}
|
||||
connectionData={connectionData}
|
||||
/>
|
||||
{/* <ScreenBlock />
|
||||
<OtherBlock /> */}
|
||||
<ScreenBlock />
|
||||
{/* <OtherBlock /> */}
|
||||
</div>
|
||||
</>
|
||||
) : (
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
import ScanBlock from './ScanBlock';
|
||||
import ScanBlock from './Block';
|
||||
import Table from './Table';
|
||||
import { getConnection } from '../utils/conenction';
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import { useState, useEffect } from 'react';
|
||||
import ScanBlock from './ScanBlock';
|
||||
import ScanBlock from './Block';
|
||||
import Table from './Table';
|
||||
|
||||
const FiltersBlock = () => {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import { useState } from 'react';
|
||||
import ScanBlock from './ScanBlock';
|
||||
import ScanBlock from './Block';
|
||||
import Table from './Table';
|
||||
import {
|
||||
getHardware,
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import { useState, useEffect } from 'react';
|
||||
import ScanBlock from './ScanBlock';
|
||||
import ScanBlock from './Block';
|
||||
import Table from './Table';
|
||||
import { getHardware, getWebGL, getBattery } from './mainOld';
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/* eslint-disable no-unused-vars */
|
||||
import { useState, useEffect } from 'react';
|
||||
import ScanBlock from './ScanBlock';
|
||||
import ScanBlock from './Block';
|
||||
import Table from './Table';
|
||||
import { getIntl } from './main';
|
||||
import { ReactComponent as CheckCircle } from '../images/checkCircle.svg';
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import ScanBlock from './ScanBlock';
|
||||
import ScanBlock from './Block';
|
||||
import Table from './Table';
|
||||
import { getMap, getLocation } from '../utils/conenction';
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
import Logo from './Logo';
|
||||
import ScanBlocks from './ScanBlocks';
|
||||
import Blocks from './Blocks';
|
||||
|
||||
const MainColumn = () => (
|
||||
<>
|
||||
<Logo />
|
||||
<div className="centerBlockOuter">
|
||||
<ScanBlocks />
|
||||
<Blocks />
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
import ScanBlock from './ScanBlock';
|
||||
import ScanBlock from './Block';
|
||||
import Table from './Table';
|
||||
import { getNavigator } from './main';
|
||||
import getNavigator from '../utils/navigator';
|
||||
|
||||
const NavigatorBlock = () => (
|
||||
const NavigatorBlock = ({ workerData }) => (
|
||||
<ScanBlock>
|
||||
<h1>Navigator</h1>
|
||||
<Table type="navigator" data={getNavigator()} />
|
||||
<Table type="navigator" data={getNavigator(workerData)} />
|
||||
<p>
|
||||
<b>Explanation:</b> JavaScript can be used to find information about your
|
||||
hardware. This information can be used to create a fingerprint.
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/* eslint-disable arrow-body-style */
|
||||
/* eslint-disable no-unused-vars */
|
||||
import { useState, useEffect } from 'react';
|
||||
import ScanBlock from './ScanBlock';
|
||||
import ScanBlock from './Block';
|
||||
import { detectTor } from './main';
|
||||
|
||||
const OtherBlock = () => {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import ScanBlock from './ScanBlock';
|
||||
import ScanBlock from './Block';
|
||||
import Table from './Table';
|
||||
import getScreen from '../utils/screen';
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import ScanBlock from './ScanBlock';
|
||||
import ScanBlock from './Block';
|
||||
import Table from './Table';
|
||||
import { getSoftware } from './mainOld';
|
||||
|
||||
|
|
|
|||
|
|
@ -1,105 +1,105 @@
|
|||
/* eslint-disable no-unused-vars */
|
||||
import { useState, useEffect } from 'react';
|
||||
import Bowser from 'bowser';
|
||||
import ScanBlock from './ScanBlock';
|
||||
import Table from './Table';
|
||||
import {
|
||||
checkNavigatorProperties,
|
||||
checkWebWorker,
|
||||
checkScreenProperties,
|
||||
} from './main';
|
||||
import { ReactComponent as CheckCircle } from '../images/checkCircle.svg';
|
||||
// /* eslint-disable no-unused-vars */
|
||||
// import { useState, useEffect } from 'react';
|
||||
// import Bowser from 'bowser';
|
||||
// import ScanBlock from './Block';
|
||||
// import Table from './Table';
|
||||
// import {
|
||||
// checkNavigatorProperties,
|
||||
// checkWebWorker,
|
||||
// checkScreenProperties,
|
||||
// } from './main';
|
||||
// import { ReactComponent as CheckCircle } from '../images/checkCircle.svg';
|
||||
|
||||
const UserAgentBlock = () => {
|
||||
const [firstRender, setfirstRender] = useState(true);
|
||||
const [workerData, setWorkerData] = useState('');
|
||||
const [userAgent, setUserAgent] = useState();
|
||||
// const UserAgentBlock = () => {
|
||||
// const [firstRender, setfirstRender] = useState(true);
|
||||
// const [workerData, setWorkerData] = useState('');
|
||||
// const [userAgent, setUserAgent] = useState();
|
||||
|
||||
useEffect(() => {
|
||||
checkWebWorker('userAgent', setWorkerData);
|
||||
}, []);
|
||||
// useEffect(() => {
|
||||
// checkWebWorker('userAgent', setWorkerData);
|
||||
// }, []);
|
||||
|
||||
useEffect(() => {
|
||||
if (!workerData) {
|
||||
setUserAgent(Bowser.parse(navigator.userAgent));
|
||||
} else {
|
||||
setUserAgent(Bowser.parse(workerData));
|
||||
}
|
||||
}, [workerData]);
|
||||
// useEffect(() => {
|
||||
// if (!workerData) {
|
||||
// setUserAgent(Bowser.parse(navigator.userAgent));
|
||||
// } else {
|
||||
// setUserAgent(Bowser.parse(workerData));
|
||||
// }
|
||||
// }, [workerData]);
|
||||
|
||||
return (
|
||||
<ScanBlock>
|
||||
<h1>User Agent</h1>
|
||||
{userAgent && (
|
||||
<div className="tableWrap">
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Browser</td>
|
||||
<td>{userAgent.browser.name}</td>
|
||||
<td>
|
||||
<CheckCircle className="circleButton" />
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Browser version</td>
|
||||
<td>{userAgent.browser.version}</td>
|
||||
<td>
|
||||
<CheckCircle className="circleButton" />
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>OS</td>
|
||||
<td>
|
||||
{userAgent.os.name} {userAgent.os.versionName}
|
||||
</td>
|
||||
<td>
|
||||
<CheckCircle className="circleButton" />
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>OS version</td>
|
||||
<td>{userAgent.os.version}</td>
|
||||
<td>
|
||||
<CheckCircle className="circleButton" />
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Engine</td>
|
||||
<td>
|
||||
{userAgent.engine.name} {userAgent.engine.version}
|
||||
</td>
|
||||
<td>
|
||||
<CheckCircle className="circleButton" />
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Platform type</td>
|
||||
<td>{userAgent.platform.type}</td>
|
||||
<td>
|
||||
<CheckCircle className="circleButton" />
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
)}
|
||||
<p>
|
||||
<b>Explanation:</b> JavaScript can be used to find information about
|
||||
your hardware. This information can be used to create a fingerprint.
|
||||
</p>
|
||||
</ScanBlock>
|
||||
);
|
||||
};
|
||||
// return (
|
||||
// <ScanBlock>
|
||||
// <h1>User Agent</h1>
|
||||
// {userAgent && (
|
||||
// <div className="tableWrap">
|
||||
// <table>
|
||||
// <tbody>
|
||||
// <tr>
|
||||
// <td>Browser</td>
|
||||
// <td>{userAgent.browser.name}</td>
|
||||
// <td>
|
||||
// <CheckCircle className="circleButton" />
|
||||
// </td>
|
||||
// </tr>
|
||||
// </tbody>
|
||||
// <tbody>
|
||||
// <tr>
|
||||
// <td>Browser version</td>
|
||||
// <td>{userAgent.browser.version}</td>
|
||||
// <td>
|
||||
// <CheckCircle className="circleButton" />
|
||||
// </td>
|
||||
// </tr>
|
||||
// </tbody>
|
||||
// <tbody>
|
||||
// <tr>
|
||||
// <td>OS</td>
|
||||
// <td>
|
||||
// {userAgent.os.name} {userAgent.os.versionName}
|
||||
// </td>
|
||||
// <td>
|
||||
// <CheckCircle className="circleButton" />
|
||||
// </td>
|
||||
// </tr>
|
||||
// </tbody>
|
||||
// <tbody>
|
||||
// <tr>
|
||||
// <td>OS version</td>
|
||||
// <td>{userAgent.os.version}</td>
|
||||
// <td>
|
||||
// <CheckCircle className="circleButton" />
|
||||
// </td>
|
||||
// </tr>
|
||||
// </tbody>
|
||||
// <tbody>
|
||||
// <tr>
|
||||
// <td>Engine</td>
|
||||
// <td>
|
||||
// {userAgent.engine.name} {userAgent.engine.version}
|
||||
// </td>
|
||||
// <td>
|
||||
// <CheckCircle className="circleButton" />
|
||||
// </td>
|
||||
// </tr>
|
||||
// </tbody>
|
||||
// <tbody>
|
||||
// <tr>
|
||||
// <td>Platform type</td>
|
||||
// <td>{userAgent.platform.type}</td>
|
||||
// <td>
|
||||
// <CheckCircle className="circleButton" />
|
||||
// </td>
|
||||
// </tr>
|
||||
// </tbody>
|
||||
// </table>
|
||||
// </div>
|
||||
// )}
|
||||
// <p>
|
||||
// <b>Explanation:</b> JavaScript can be used to find information about
|
||||
// your hardware. This information can be used to create a fingerprint.
|
||||
// </p>
|
||||
// </ScanBlock>
|
||||
// );
|
||||
// };
|
||||
|
||||
export default UserAgentBlock;
|
||||
// export default UserAgentBlock;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
export { fetchAPI, getWebWorker };
|
||||
export { fetchAPI, checkWebWorker, getWebWorker };
|
||||
|
||||
// Gets location values
|
||||
const fetchAPI = (setData) => {
|
||||
|
|
@ -9,6 +9,13 @@ const fetchAPI = (setData) => {
|
|||
});
|
||||
};
|
||||
|
||||
const checkWebWorker = (key, worker) => {
|
||||
if (key.toString() !== worker.toString()) {
|
||||
return `Did not match web worker (${worker})`;
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
const getWebWorker = () => {
|
||||
let w;
|
||||
if (typeof w === 'undefined') {
|
||||
|
|
|
|||
|
|
@ -62,7 +62,6 @@ const getLocation = (data, workerData) => {
|
|||
|
||||
// Returns object with location data
|
||||
const getConnection = (data) => {
|
||||
console.log(data);
|
||||
const isProxy = checkProxy(data.proxy);
|
||||
return [
|
||||
{
|
||||
|
|
|
|||
197
frontend/src/utils/navigator.js
Normal file
197
frontend/src/utils/navigator.js
Normal file
|
|
@ -0,0 +1,197 @@
|
|||
import { checkWebWorker } from './common';
|
||||
|
||||
const getDeviceMemory = (key, worker) => ({
|
||||
key,
|
||||
value: navigator[key],
|
||||
issues: [
|
||||
checkNavigatorProperties(key),
|
||||
checkNavigatorValue(key),
|
||||
checkNavigatorPrototype(key),
|
||||
checkWebWorker(navigator[key], worker),
|
||||
],
|
||||
});
|
||||
|
||||
const getHardwareConcurrency = (key, worker) => ({
|
||||
key,
|
||||
value: navigator.hardwareConcurrency,
|
||||
issues: [
|
||||
checkNavigatorProperties(key),
|
||||
checkNavigatorValue(key),
|
||||
checkNavigatorPrototype(key),
|
||||
checkWebWorker(navigator[key], worker),
|
||||
],
|
||||
});
|
||||
|
||||
const getMaxTouchPoints = (key) => ({
|
||||
key,
|
||||
value: navigator.maxTouchPoints,
|
||||
issues: [
|
||||
checkNavigatorProperties(key),
|
||||
checkNavigatorValue(key),
|
||||
checkNavigatorPrototype(key),
|
||||
],
|
||||
});
|
||||
|
||||
const getPlatform = (key, worker) => ({
|
||||
key,
|
||||
value: navigator.platform,
|
||||
issues: [
|
||||
checkNavigatorProperties(key),
|
||||
checkNavigatorValue(key),
|
||||
checkNavigatorPrototype(key),
|
||||
checkWebWorker(navigator[key], worker),
|
||||
],
|
||||
});
|
||||
|
||||
const getUserAgent = (key, worker) => ({
|
||||
key,
|
||||
value: navigator.userAgent,
|
||||
issues: [
|
||||
checkNavigatorProperties(key),
|
||||
checkNavigatorValue(key),
|
||||
checkNavigatorPrototype(key),
|
||||
checkWebWorker(navigator[key], worker),
|
||||
],
|
||||
});
|
||||
|
||||
const getAppVersion = (key, worker) => ({
|
||||
key,
|
||||
value: navigator.appVersion,
|
||||
issues: [
|
||||
checkNavigatorProperties(key),
|
||||
checkNavigatorValue(key),
|
||||
checkNavigatorPrototype(key),
|
||||
checkWebWorker(navigator[key], worker),
|
||||
],
|
||||
});
|
||||
|
||||
const getLanguage = (key, worker) => ({
|
||||
key,
|
||||
value: navigator.language,
|
||||
issues: [
|
||||
checkNavigatorProperties(key),
|
||||
checkNavigatorValue(key),
|
||||
checkNavigatorPrototype(key),
|
||||
checkWebWorker(navigator[key], worker),
|
||||
],
|
||||
});
|
||||
|
||||
const getLanguages = (key, worker) => ({
|
||||
key,
|
||||
value: navigator.languages,
|
||||
issues: [
|
||||
checkNavigatorProperties(key),
|
||||
checkNavigatorValue(key),
|
||||
checkNavigatorPrototype(key),
|
||||
checkWebWorker(navigator[key], worker),
|
||||
],
|
||||
});
|
||||
|
||||
const getCookieEnabled = (key) => ({
|
||||
key,
|
||||
value: navigator.cookieEnabled ? 'True' : 'False',
|
||||
issues: [
|
||||
checkNavigatorProperties(key),
|
||||
checkNavigatorValue(key),
|
||||
checkNavigatorPrototype(key),
|
||||
],
|
||||
});
|
||||
|
||||
const getDoNotTrack = (key) => ({
|
||||
key,
|
||||
value: navigator.doNotTrack ? 'True' : 'False',
|
||||
issues: [
|
||||
checkNavigatorProperties(key),
|
||||
checkNavigatorValue(key),
|
||||
checkNavigatorPrototype(key),
|
||||
],
|
||||
});
|
||||
|
||||
const getWebDriver = (key) => ({
|
||||
key,
|
||||
value: navigator.webdriver ? 'True' : 'False',
|
||||
issues: [
|
||||
checkNavigatorProperties(key),
|
||||
checkNavigatorValue(key),
|
||||
checkNavigatorPrototype(key),
|
||||
],
|
||||
});
|
||||
|
||||
const getPlugins = (key) => ({
|
||||
key,
|
||||
value: sortPlugins(navigator.plugins),
|
||||
issues: [
|
||||
checkNavigatorProperties(key),
|
||||
checkNavigatorValue(key),
|
||||
checkNavigatorPrototype(key),
|
||||
],
|
||||
});
|
||||
|
||||
const getVendor = (key) => ({
|
||||
key,
|
||||
value: navigator.vendor,
|
||||
issues: [
|
||||
checkNavigatorProperties(key),
|
||||
checkNavigatorValue(key),
|
||||
checkNavigatorPrototype(key),
|
||||
],
|
||||
});
|
||||
|
||||
// sorts plugins object into comma separated list
|
||||
const sortPlugins = (data) => {
|
||||
const { length } = data;
|
||||
|
||||
let list = '';
|
||||
for (let i = 0; i < length; i++) {
|
||||
if (i !== 0) list += ', ';
|
||||
list += data[i].name;
|
||||
}
|
||||
return list;
|
||||
};
|
||||
|
||||
const checkNavigatorProperties = (key) => {
|
||||
if (Object.getOwnPropertyDescriptor(navigator, key) !== undefined) {
|
||||
return 'Failed undefined properties';
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
const checkNavigatorValue = (key) => {
|
||||
if (
|
||||
Object.getOwnPropertyDescriptor(Navigator.prototype, key).value !==
|
||||
undefined
|
||||
) {
|
||||
return 'Failed descriptor.value undefined';
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
const checkNavigatorPrototype = (key) => {
|
||||
try {
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
const check = Navigator.prototype[key];
|
||||
return 'Failed Navigator.prototype';
|
||||
} catch (err) {
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
const check = '';
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
const getNavigator = (workerData) => [
|
||||
getDeviceMemory('deviceMemory', workerData.deviceMemory),
|
||||
getHardwareConcurrency('hardwareConcurrency', workerData.hardwareConcurrency),
|
||||
getMaxTouchPoints('maxTouchPoints'),
|
||||
getPlatform('platform', workerData.platform),
|
||||
getUserAgent('userAgent', workerData.userAgent),
|
||||
getAppVersion('appVersion', workerData.appVersion),
|
||||
getLanguage('language', workerData.language),
|
||||
getLanguages('languages', workerData.languages),
|
||||
getCookieEnabled('cookieEnabled'),
|
||||
getDoNotTrack('doNotTrack'),
|
||||
getWebDriver('webdriver'),
|
||||
getPlugins('plugins'),
|
||||
getVendor('vendor'),
|
||||
];
|
||||
|
||||
export default getNavigator;
|
||||
Loading…
Add table
Reference in a new issue