/
please-notify.js
94 lines (87 loc) · 3.2 KB
/
please-notify.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
91
92
93
94
(function () {
"use strict";
var appMessage = require('./app-messages'),
async = require('async'),
initData = require('./init-data'),
initSubscription = require('./init-subscription'),
logEvent = require('./log-event'),
moment = require('moment'),
notifyOne = require('./notify-one'),
notifyOneChallenge = require('./notify-one-challenge'),
request = require('request'),
sprintf = require('sprintf-js').sprintf,
url = require('url');
function checkresourceUrlStatusCodes(urlList, callback) {
async.each(
urlList,
function (resourceUrl, callback) {
request({
'url': resourceUrl,
'method': 'HEAD'
}, function checkStatusCode(err, res) {
if (err || res.statusCode < 200 || res.statusCode > 299) {
return callback(sprintf(appMessage.error.subscription.readResource, resourceUrl));
}
return callback(null);
});
},
callback
);
}
function notifyApiUrl(data, resourceUrl, apiurl, diffDomain, callback) {
if (diffDomain) {
notifyOneChallenge(data, resourceUrl, apiurl, callback);
} else {
notifyOne(data, resourceUrl, apiurl, false, callback);
}
}
function addSubscriber(data, resourceUrl, apiurl, parts, startticks, callback) {
var subscription;
subscription = initSubscription(data, resourceUrl, apiurl);
subscription.whenExpires = moment().add(data.prefs.ctSecsResourceExpire, 'seconds');
logEvent(
data,
'Subscribe',
sprintf(appMessage.log.subscription, apiurl, parts.host, resourceUrl, parts.protocol),
startticks
);
return callback(null);
}
function pleaseNotify(data, apiurl, urlList, diffDomain, callback) {
var parts, startticks = moment().format('x');
parts = url.parse(apiurl);
async.waterfall([
function (callback) {
initData(data);
callback(null);
},
function (callback) {
checkresourceUrlStatusCodes(urlList, callback);
},
function (callback) {
if (undefined === urlList[0]) {
return callback(appMessage.error.subscription.noResources);
}
notifyApiUrl(data, urlList[0], apiurl, diffDomain, callback);
},
function (callback) {
async.each(
urlList,
function (resourceUrl, callback) {
addSubscriber(data, resourceUrl, apiurl, parts, startticks, callback);
},
callback
);
},
function () {
return callback(null, {
'success': true,
'msg': appMessage.success.subscription
});
}
], function handleError(err) {
return callback(err);
});
}
module.exports = pleaseNotify;
}());