0
Fork 0
mirror of https://github.com/verdaccio/verdaccio.git synced 2024-12-16 21:56:25 -05:00
verdaccio/lib/notify.js

74 lines
1.9 KiB
JavaScript
Raw Normal View History

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');
const _ = require('lodash');
const logger = require('./logger');
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-04-26 07:38:51 -05:00
const template = Handlebars.compile(notifyEntry.content);
const content = template( metadata );
const options = {
body: content,
};
2017-04-26 07:38:51 -05:00
// provides fallback support, it's accept an Object {} and Array of {}
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-26 07:38:51 -05:00
}
});
options.headers = header;
} else if (Object.is(notifyEntry.headers, notifyEntry.headers)) {
options.headers = notifyEntry.headers;
}
2017-04-26 07:38:51 -05:00
options.method = notifyEntry.method;
2017-04-26 07:20:24 -05:00
if ( notifyEntry.endpoint ) {
2017-04-26 07:38:51 -05:00
options.url = notifyEntry.endpoint;
}
request(options, function(err, response, body) {
2017-04-26 07:38:51 -05:00
if (err) {
logger.logger.error({err: err}, ' notify error: @{err.message}' );
2017-04-26 07:38:51 -05:00
} else {
logger.logger.info({content: content}, 'A notification has been shipped: @{content}');
2017-04-26 07:38:51 -05:00
if (body) {
logger.logger.debug({body: body}, ' body: @{body}' );
}
2017-04-26 07:38:51 -05:00
}
});
};
const notify = function(metadata, config) {
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-04-26 07:38:51 -05:00
};
module.exports.notify = notify;