0
Fork 0
mirror of https://github.com/verdaccio/verdaccio.git synced 2024-12-16 21:56:25 -05:00
verdaccio/lib/notify.js
2017-04-26 13:20:24 +01:00

68 lines
1.8 KiB
JavaScript

var Handlebars = require('handlebars')
var request = require('request')
var Logger = require('./logger')
var handleNotify = function(metadata, notifyEntry) {
var regex
if (metadata.name && notifyEntry.packagePattern) {
regex = new RegExp(notifyEntry.packagePattern, notifyEntry.packagePatternFlags || '')
if (!regex.test(metadata.name)) {
return
}
}
var template = Handlebars.compile(notifyEntry.content)
var content = template( metadata )
var options = {
body: content
}
// provides fallback support, it's accept an Object {} and Array of {}
if (notifyEntry.headers && Array.isArray(notifyEntry.headers)) {
var header = {}
notifyEntry.headers.map(function(item) {
if (Object.is(item, item)) {
for (var key in item) {
header[key] = item[key]
}
}
})
options.headers = header;
} else if (Object.is(notifyEntry.headers, notifyEntry.headers)) {
options.headers = notifyEntry.headers
}
options.method = notifyEntry.method
if ( notifyEntry.endpoint ) {
options.url = notifyEntry.endpoint
}
request(options, function(err, response, body) {
if (err) {
Logger.logger.error( { err: err }, ' notify error: @{err.message}' )
} else {
Logger.logger.info({ content: content}, 'A notification has been shipped: @{content}')
if (body) {
Logger.logger.debug( { body: body }, ' body: @{body}' )
}
}
})
}
module.exports.notify = function(metadata, config) {
if (config.notify) {
if (config.notify.content) {
handleNotify(metadata, config.notify)
}
else {
for (var key in config.notify) {
if (config.notify.hasOwnProperty(key)) {
handleNotify(metadata, config.notify[key])
}
}
}
}
}