node-red-contrib-wildfire
Version:
Wildfire nodes for Node-RED
66 lines (51 loc) • 2.06 kB
JavaScript
var request = require('request');
var parser = require('fast-xml-parser');
module.exports = function(RED) {
function Service(config) {
RED.nodes.createNode(this, config);
var node = this;
this.samples = function (params, callback) {
if (!config.server) {
callback(new Error('Missing Appliance Hostname/IP'));
return;
}
const server = config.server.trim().toLowerCase() || "wildfire.paloaltonetworks.com";
if (server == 'wildfire.paloaltonetworks.com') {
callback(new Error('Cloud Retrieval not Supported, Use your appliance address'));
return;
}
if (!config.apikey) {
callback(new Error('Missing Apikey'));
return;
}
const body = Object.assign({}, params, {
apikey: config.apikey
});
if (!body.date) {
callback(new Error('Missing Date'));
return;
}
const uri = 'https://' + ( config.server == 'test' ? 'wildfire.paloaltonetworks.com' : server ) + '/publicapi/get/verdicts/changed';
request({
method: 'POST',
uri: uri,
json: true,
body: body
}, function (error, response, body) {
if (error || (!response.statusCode == 200)) {
return callback(error || new Error('Request Error'));
}
try {
var json = parser.parse(body);
var verdicts = json && json.wildfire && json.wildfire['get-verdict-info'];
} catch(err) {
return callback(err);
}
if (!verdicts) { return callback(new Error('invalid response')); }
callback(null, verdicts);
});
}
}
RED.nodes.registerType("wildfire service", Service);
};
;