2017-04-26 07:43:27 -05:00
|
|
|
'use strict';
|
|
|
|
|
2017-04-26 07:38:51 -05:00
|
|
|
const Handlebars = require('handlebars');
|
|
|
|
const request = require('request');
|
2017-06-06 16:07:51 -05:00
|
|
|
const _ = require('lodash');
|
|
|
|
const logger = require('./logger');
|
2016-05-20 08:48:29 -05:00
|
|
|
|
2017-04-26 07:38:51 -05:00
|
|
|
const handleNotify = function(metadata, notifyEntry) {
|
|
|
|
let regex;
|
2017-04-26 07:20:24 -05:00
|
|
|
if (metadata.name && notifyEntry.packagePattern) {
|
2017-04-26 07:38:51 -05:00
|
|
|
regex = new RegExp(notifyEntry.packagePattern, notifyEntry.packagePatternFlags || '');
|
2017-04-26 07:20:24 -05:00
|
|
|
if (!regex.test(metadata.name)) {
|
2017-04-26 07:38:51 -05:00
|
|
|
return;
|
2017-01-10 03:30:56 -05:00
|
|
|
}
|
|
|
|
}
|
2016-05-20 08:48:29 -05:00
|
|
|
|
2017-04-26 07:38:51 -05:00
|
|
|
const template = Handlebars.compile(notifyEntry.content);
|
|
|
|
const content = template( metadata );
|
2016-05-20 08:48:29 -05:00
|
|
|
|
2017-06-06 16:07:51 -05:00
|
|
|
const options = {
|
|
|
|
body: content,
|
|
|
|
};
|
2016-05-20 08:48:29 -05:00
|
|
|
|
2017-04-26 07:38:51 -05:00
|
|
|
// provides fallback support, it's accept an Object {} and Array of {}
|
2017-06-06 16:07:51 -05:00
|
|
|
if (notifyEntry.headers && _.isArray(notifyEntry.headers)) {
|
2017-04-26 07:38:51 -05:00
|
|
|
const header = {};
|
|
|
|
notifyEntry.headers.map(function(item) {
|
|
|
|
if (Object.is(item, item)) {
|
|
|
|
for (const key in item) {
|
|
|
|
if (item.hasOwnProperty(key)) {
|
|
|
|
header[key] = item[key];
|
2017-04-13 14:32:49 -05:00
|
|
|
}
|
|
|
|
}
|
2017-04-26 07:38:51 -05:00
|
|
|
}
|
|
|
|
});
|
|
|
|
options.headers = header;
|
|
|
|
} else if (Object.is(notifyEntry.headers, notifyEntry.headers)) {
|
|
|
|
options.headers = notifyEntry.headers;
|
|
|
|
}
|
2016-05-20 08:48:29 -05:00
|
|
|
|
2017-04-26 07:38:51 -05:00
|
|
|
options.method = notifyEntry.method;
|
2016-05-20 08:48:29 -05:00
|
|
|
|
2017-04-26 07:20:24 -05:00
|
|
|
if ( notifyEntry.endpoint ) {
|
2017-04-26 07:38:51 -05:00
|
|
|
options.url = notifyEntry.endpoint;
|
2017-01-10 03:30:56 -05:00
|
|
|
}
|
2016-05-20 08:48:29 -05:00
|
|
|
|
2017-04-18 07:49:24 -05:00
|
|
|
request(options, function(err, response, body) {
|
2017-04-26 07:38:51 -05:00
|
|
|
if (err) {
|
2017-06-06 16:07:51 -05:00
|
|
|
logger.logger.error({err: err}, ' notify error: @{err.message}' );
|
2017-04-26 07:38:51 -05:00
|
|
|
} else {
|
2017-06-06 16:07:51 -05:00
|
|
|
logger.logger.info({content: content}, 'A notification has been shipped: @{content}');
|
2017-04-26 07:38:51 -05:00
|
|
|
if (body) {
|
2017-06-06 16:07:51 -05:00
|
|
|
logger.logger.debug({body: body}, ' body: @{body}' );
|
2017-04-11 14:53:21 -05:00
|
|
|
}
|
2017-04-26 07:38:51 -05:00
|
|
|
}
|
|
|
|
});
|
|
|
|
};
|
2016-05-20 08:48:29 -05:00
|
|
|
|
2017-06-06 16:07:51 -05:00
|
|
|
const notify = function(metadata, config) {
|
2017-01-10 03:30:56 -05:00
|
|
|
if (config.notify) {
|
2017-04-26 07:20:24 -05:00
|
|
|
if (config.notify.content) {
|
2017-04-26 07:38:51 -05:00
|
|
|
handleNotify(metadata, config.notify);
|
|
|
|
} else {
|
|
|
|
for (const key in config.notify) {
|
2017-04-26 07:20:24 -05:00
|
|
|
if (config.notify.hasOwnProperty(key)) {
|
2017-04-26 07:38:51 -05:00
|
|
|
handleNotify(metadata, config.notify[key]);
|
2017-01-10 03:30:56 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2016-05-20 08:48:29 -05:00
|
|
|
}
|
2017-04-26 07:38:51 -05:00
|
|
|
};
|
2017-06-06 16:07:51 -05:00
|
|
|
|
|
|
|
module.exports.notify = notify;
|