50 lines
916 B
JavaScript
50 lines
916 B
JavaScript
var UAParser = require('ua-parser-js');
|
|
var parser = new UAParser();
|
|
|
|
module.exports = function(config, mongoose) {
|
|
var Fingerprint = mongoose.model('Fingerprint');
|
|
|
|
return function userAgent(req, res, next){
|
|
var ua = req.get('user-agent');
|
|
|
|
parser.setUA(ua);
|
|
|
|
var uaParsed = _.omit(parser.getResult(), 'ua');
|
|
var headers = _.omit(req.headers, [ 'cookie', 'user-agent' ]);
|
|
|
|
if(!_.isEmpty(req.query))
|
|
var ip = req.ip;
|
|
|
|
Fingerprint.findById( req.query.id, function(err, fp) {
|
|
if(err) return next(err);
|
|
|
|
if(fp) {
|
|
if(!_.find(fp.server, { ua: ua })) {
|
|
var obj = {
|
|
ip: ip,
|
|
ua: ua,
|
|
uaParsed: uaParsed,
|
|
headers: headers
|
|
};
|
|
|
|
fp.server.push(obj);
|
|
|
|
fp.save(function(err, fp) {
|
|
if(err) console.error(err);
|
|
});
|
|
}
|
|
}
|
|
});
|
|
|
|
|
|
res.locals = {
|
|
ua: ua,
|
|
uaParsed: uaParsed,
|
|
headers: headers
|
|
};
|
|
|
|
next();
|
|
};
|
|
};
|
|
|