api-reference-examples/js/node/lib/threatexchange.js (219 lines of code) (raw):

// Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved var request = require('request'); var vocabulary = require('./vocabulary'); var ThreatExchange = function(app_id, app_secret) { if (app_id == undefined || app_secret == undefined) { throw new Error('set app_id / app_secret!'); } var fbte_url = vocabulary.v_ThreatExchange.URL + vocabulary.v_ThreatExchange.VERSION; var threat_indicators = fbte_url + vocabulary.v_ThreatExchange.THREAT_INDICATORS; var malware = fbte_url + vocabulary.v_ThreatExchange.MALWARE_ANALYSES; var threat_exchange_members = fbte_url + vocabulary.v_ThreatExchange.THREAT_EXCHANGE_MEMBERS; var exportObj = { app_id : app_id, app_secret : app_secret, access_token : app_id + '|' + app_secret, vocabulary : vocabulary, }; exportObj.getThreatExchangeMembers = function(callback) { options= { access_token : exportObj.access_token } request({url:threat_exchange_members,qs:options},function (err,response,body) { if (err) { callback(err,null); } else { if (response.statusCode != 200) { callback(new Error({statusCode:response.statusCode,body:response.body}),null); } else { callback(null,JSON.parse(body)); } } }); }; exportObj.postThreatIndicators = function(options,callback) { options['access_token'] = exportObj.access_token; exportObj.validatePostThreatIndicator(options, function(err) { if (err) callback(err); request.post({url:threat_indicators,form:options}, function (err,response,body) { if (err) { callback(err,null); } else { if (response.statusCode != 200) { callback(new Error(JSON.stringify({statusCode:response.statusCode,body:response.body})),null); } else { callback(null,JSON.parse(response.body)); } } }); }); }; exportObj.validatePostThreatIndicator = function(options,callback) { var required = ['description','indicator','privacy_type','status','type'] required.forEach(function(field) { if(!(field in options)) { callback(new Error('fields missing in options, expected:' + required +'\nreceived:'+JSON.stringify(options))); } }); callback(null); }; exportObj.getMalwareAnalyses = function (options,callback) { options['access_token'] = exportObj.access_token; request({url:malware,qs:options},function (err,response,body) { if (err) { callback(err,null) } else { if (response.statusCode != 200) { callback(new Error(JSON.stringify({statusCode:response.statusCode,body:response.body})), null); } else { callback(null,JSON.parse(body)); } } }); }; exportObj.getMalwareObject = function (id,fields,callback) { options['access_token'] = exportObj.access_token; if(isNaN(id)) { callback(new Error(id + ' is not a number!'),null); } else { if(fields.length > 0) { options['fields'] = fields.join(); request({url:fbte_url+id,qs:options},function (err,response,body) { if(err) { callback(err,null); } else { if (response.statusCode != 200) { callback(new Error(JSON.stringify({statusCode:response.statusCode,body:response.body})),null); } else { callback(null,JSON.parse(body)); } } }); } else { callback(new Error('fields is empty'),null); } } }; exportObj.getMalwareFamilyObjects = function (id,fields,callback) { options['access_token'] = exportObj.access_token; if(isNaN(id)) { callback(new Error(id + ' is not a number!'),null); } else { if(fields.length > 0) { options['fields'] = fields.join(); request({url:fbte_url+id,qs:options},function (err,response,body) { if(err) { callback(err,null); } else { if (response.statusCode != 200) { callback(new Error(JSON.stringify({statusCode:response.statusCode,body:response.body})),null); } else { callback(null,JSON.parse(body)); } } }); } else { callback(new Error('fields is empty'),null); } } }; exportObj.getThreatIndicatorObject = function (id,fields,callback) { options['access_token'] = exportObj.access_token; if(isNaN(id)) { callback(new Error(id + ' is not a number!',null)); } else { if(fields.length > 0) { options['fields'] = fields.join(); request({url:fbte_url+id,qs:options},function(err,response,body) { if(err) { callback(err,null); } else { if (response.statusCode != 200) { callback(new Error(JSON.stringify({statusCode:response.statusCode,body:response.body})),null); } else { callback(null,JSON.parse(body)); } } }); } else { callback(new Error('fields is empty'),null); } } }; exportObj.editObject = function (id,options,callback) { options['access_token'] = exportObj.access_token; if(isNaN(id)) { callback(new Error(id + ' is not a number!',null)); } else { request.post({url:fbte_url+id,form:options}, function (err,response,body) { if (err) { callback(err,null); } else { if (response.statusCode != 200) { callback(new Error(JSON.stringify({statusCode:response.statusCode,body:response.body})),null); } else { callback(null,JSON.parse(response.body)); } } }); } }; exportObj.submitConnection = function (id1,id2,callback) { options['access_token'] = exportObj.access_token; var url = fbte_url + id1 + '/related'; if(isNaN(id1) || isNaN(id2)) { callback(new Error(id1 + ',' + id2 + ' not numbers!')); } else { options['related_id'] = id2; request.post({url:url,form:options}, function (err,response,body) { if(err) { callback(err,null); } else { if (response.statusCode != 200) { callback(new Error(JSON.stringify({statusCode:response.statusCode,body:response.body})),null); } else { callback(null,JSON.parse(response.body)); } } }); } }; exportObj.deleteConnection = function (id1,id2,callback) { options['access_token'] = exportObj.access_token; var url = fbte_url + id1 + '/related'; if(isNaN(id1) || isNaN(id2)) { callback(new Error(id1 + ',' + id2 + ' not numbers!')); } else { options['related_id'] = id2; request.del({url:url,qs:options}, function (err,response,body) { if(err) { callback(err,null); } else { if(response.statusCode != 200) { callback(new Error(JSON.stringify({statusCode:response.statusCode,body:response.body})),null); } else { callback(null,JSON.parse(response.body)); } } }); } }; exportObj.getThreatIndicators = function (options,callback) { options['access_token'] = exportObj.access_token; request({url:threat_indicators,qs:options}, function (err,response, body) { if(err) { callback(err,null); } else { if(response.statusCode != 200) { callback(new Error(JSON.stringify({statusCode:response.statusCode,body:response.body})),null); } else { callback(null,JSON.parse(response.body)); } } }); }; return exportObj; } module.exports = ThreatExchange;