-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtrackingImageService.js
67 lines (55 loc) · 1.73 KB
/
trackingImageService.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
const Parse = require('url').parse;
const Request = require('request');
const Cache = require('memory-cache');
const UserService = require('./UserService');
const TrackingImageService = function () {};
/**
* Parse Request Uri and returns Image Url if found
* @param {*} request - Request
* @returns {string} url - Image Url from request
*/
TrackingImageService.prototype.getImageUrl = request => {
let params = Parse(request.url, true);
if (!params.query[TrackingServiceConfig.parameterName]) {
return '';
}
return params.query[TrackingServiceConfig.parameterName];
};
/**
* Returns an image with headers
* @param {string} url - Image url
* @returns {object} image - Object with Image headers and body
*/
TrackingImageService.prototype.getImage = url => new Promise((resolve, reject) => {
let image = Cache.get(url);
if (image) {
resolve(image);
}
Request.get(url, (error, result, body) => {
if (!error && result.statusCode !== 200) {
console.error("ERROR: " + error);
reject(error);
}
image = {'headers': result.headers, 'body': body};
Cache.put(url, image, TrackingServiceConfig.cacheTime * 1000);
resolve(image);
})
});
/**
* Saves info about user
* @param {*} request - Request
* @param {string} imageUrl - requested image url
* @returns {boolean}
*/
TrackingImageService.prototype.saveUserInfo = async (request, imageUrl) => {
let user = await UserService.getUser(request.socket.remoteAddress, request.headers['user-agent']);
user.requestedImages.push({ url: imageUrl, date: new Date() });
user.save(error => {
if (error) {
console.log(error);
return error;
}
});
return true;
};
module.exports = new TrackingImageService();