@shwao/express-fingerprint
Version:
Client fingerprint server implementation. Fork of https://github.com/yusukeshibata/express-fingerprint. Adds IP and DNT parameter.
55 lines (43 loc) • 1.51 kB
JavaScript
;
var _murmurhash3js = _interopRequireDefault(require("murmurhash3js"));
var _async = _interopRequireDefault(require("async"));
var _parameters = _interopRequireDefault(require("./parameters"));
var _traverse = _interopRequireDefault(require("traverse"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const hash = _murmurhash3js.default.x64;
const Fingerprint = function (parameters) {
if (!parameters || !parameters.length) {
parameters = [Fingerprint.useragent(), Fingerprint.acceptHeaders(), Fingerprint.geoIp(), Fingerprint.ip(), Fingerprint.dnt()];
}
return (req, res, next) => {
const components = {};
const fingerprint = {
hash: null
};
_async.default.eachLimit(parameters, 1, (parameter, callback) => {
parameter.bind({
req
})((err, obj) => {
Object.keys(obj).forEach(key => {
components[key] = obj[key];
});
callback(err);
});
}, err => {
if (!err) {
const leaves = (0, _traverse.default)(components).reduce(function (acc, x) {
if (this.isLeaf) acc.push(x);
return acc;
}, []);
fingerprint.hash = hash.hash128(leaves.join('~~~'));
fingerprint.components = components;
req.fingerprint = fingerprint;
}
next();
});
};
};
for (const key in _parameters.default) {
Fingerprint[key] = _parameters.default[key];
}
exports = module.exports = Fingerprint;