var UAParser = require('ua-parser-js'); var parser = new UAParser(); module.exports = function(config, mongoose) { var Fingerprint = mongoose.model('Fingerprint'); return { create: function(req, res, next) { Fingerprint.create(req.body, function(err, fp) { if(err) return next(err); res.status(200).data.fingerprint = fp; next(); }); }, findAll: function(req, res, next) { }, push: function(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' ]); var ip = req.ip; var clientFingerprint = _.extend({ ip: ip, ua: ua, uaParsed: uaParsed, headers: headers }, req.body); res.data.clientFingerprint = clientFingerprint; if(req.params.id !== 'null') { Fingerprint.findById( req.params.id, function(err, fp) { if(err) return next(err); if(fp) { if(!_.find(fp.client, { ua: ua })) { fp.client.push(clientFingerprint); fp.save(function(err, fp) { if(err) console.error(err); res.status(201); next(); }); } else { next(); } } else { next(); } }); } else { res.status(200); next(); } } }; };