UNPKG

@ch1/browser-dna-express

Version:

Browser DNA Express is a tool for fingerprinting browsers with express

63 lines 2.42 kB
import { noop, toGtZeroIntMax, toString, toStringArrayMax, toStringMax } from '@ch1/utility'; export function fingerprint() { return (req, res, next) => { connectionFingerprint(req, res, noop); serverFingerprint(req, res, noop); if (req.method !== 'OPTIONS') { clientFingerprint(req, res, noop); } next(); }; } export function connectionFingerprint(req, res, next) { const connectionFingerprint = { ip: cleanExpressIp(req.ip), referrer: toStringMax(2000, req.get('Referer')), method: toStringMax(16, req.method) }; req.fingerprint = req.fingerprint || {}; req.fingerprint.connection = connectionFingerprint; res.locals.fingerprint = res.locals.fingerprint || {}; res.locals.fingerprint.connection = connectionFingerprint; next(); } export function serverFingerprint(req, res, next) { const serverFingerprint = { language: toStringMax(64, req.get('Accept-Language')), userAgent: toStringMax(512, req.get('User-Agent')), usesDnt: parseInt(toString(req.get('DNT')), 10) ? true : false }; req.fingerprint = req.fingerprint || {}; req.fingerprint.server = serverFingerprint; res.locals.fingerprint = res.locals.fingerprint || {}; res.locals.fingerprint.server = serverFingerprint; next(); } export function clientFingerprint(req, res, next) { if (!req.body.fingerprint) { next(); return; } const fp = req.body.fingerprint; const clientFingerprint = { browserDepth: toGtZeroIntMax(50000, fp.browserDepth), browserHeight: toGtZeroIntMax(50000, fp.browserHeight), browserWidth: toGtZeroIntMax(50000, fp.browserWidth), concurrency: toGtZeroIntMax(512, fp.concurrency), os: toStringMax(32, fp.os), plugins: toStringArrayMax(25, fp.plugins), tzOffset: parseInt(fp.tzOffset, 10), usesCookies: fp.usesCookies ? true : false, usesTouch: fp.usesTouch ? true : false }; req.fingerprint = req.fingerprint || {}; req.fingerprint.client = clientFingerprint; res.locals.fingerprint = res.locals.fingerprint || {}; res.locals.fingerprint.client = clientFingerprint; next(); } export function cleanExpressIp(ip) { const splits = ip.split(':').filter(Boolean); return splits[splits.length - 1]; } //# sourceMappingURL=browser-dna-express.js.map