-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathDataRequestType.js
90 lines (77 loc) · 2.09 KB
/
DataRequestType.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
var Ranges = require('../util/Ranges');
var _ = require('lodash');
var package = require('../../package.json');
var url = require('url');
var PROTOCOL_VERSION = '3.0';
var DataRequestType = {
getRequestURL: function(props) {
return url.format({
protocol: 'https',
hostname: 'safebrowsing.google.com',
pathname: 'safebrowsing/downloads',
query: {
client: 'api',
key: props.apiKey,
appver: props.clientVersion || package.version,
pver: PROTOCOL_VERSION
}
});
},
getRequestBody: function(props) {
var body = [];
if (props.size) {
body.push(`s;${props.size}`);
}
_.forOwn(props.lists || {}, function(value, key) {
var chunkList = ['add', 'sub'].reduce(function(chunkList, type) {
if (_.isArray(value[type]) && value[type].length > 0) {
return chunkList.concat([
type.charAt(0),
Ranges.formatRanges(value[type])
]);
}
return chunkList;
}, []);
body.push([key, chunkList.join(':')].join(';'));
});
return body.join('\n') + '\n';
},
parseResponseBody: function(body) {
var lines = body.split('\n');
var list = null;
var result = {delay: 0, isReset: false, lists: []};
lines.forEach(function(line) {
var keyAndValue = line.split(':', 2);
var key = keyAndValue[0];
var value = keyAndValue[1];
switch (key) {
case 'n':
result.delay = parseInt(value, 10);
break;
case 'r':
result.isReset = true;
break;
case 'i':
list = {
name: value,
urls: [],
expireAdd: [],
expireSub: []
};
result.lists.push(list);
break;
case 'u':
list.urls.push(`https://${value}`);
break;
case 'ad':
list.expireAdd = Ranges.parseRanges(value);
break;
case 'sd':
list.expireSub = Ranges.parseRanges(value);
break;
}
});
return result;
}
};
module.exports = DataRequestType;