var serverUrl = params.Server; if (serverUrl[serverUrl.length - 1] !== '/') { serverUrl += '/'; } var defaultLimit = 20; var doReq = function(method, path, parameters) { if (!parameters) { parameters = {}; } parameters.access_token = params.appID + '|' + params.appSecret; var result = http( serverUrl + '/' + params.apiVersion + '/'+ path + (method === 'GET' ? encodeToURLQuery(parameters) : ''), { Headers: {'Content-Type': ['application/x-www-form-urlencoded'], 'Accept': ['application/json']}, Method: method, Body: method == 'POST' ? encodeToURLQuery(parameters).substring(1) : '' }, params.insecure, params.useproxy ); if (result.StatusCode < 200 || result.StatusCode > 299) { throw 'Failed to perform request ' + path + ', request status code: ' + result.StatusCode + ' with Body: '+ result.Body; } if (result.Body === '') { throw 'No content recieved for ThreatExchange path: '+path; } var obj; try { obj = JSON.parse(result.Body); } catch (ex) { throw 'Error parsing reply - ' + result.Body + ' - ' + ex; } return {body: result.Body, obj: obj, statusCode: result.StatusCode}; }; var doFile = function(hash, reliability) { var limit = defaultLimit; if (args.limit) { limit = args.limit; } var argsForCall = {text: hash, limit: limit, strict_text: true}; if (args.since) { argsForCall.since = args.since; } if (args.until) { argsForCall.until = args.until; } var res = doReq('GET', 'malware_analyses', argsForCall); var data = res.obj.data; var ec = {}; ec.DBotScore = []; if (data.length === 0) { ec.DBotScore.push({ Indicator: hash, Type: 'hash', Vendor: 'ThreatExchange', Score: 0, Reliability: reliability }); ec.DBotScore.push({ Indicator: hash, Type: 'file', Vendor: 'ThreatExchange', Score: 0, Reliability: reliability }) return {Type: entryTypes.note, Contents: res.body, ContentsFormat: formats.json, HumanReadable: 'ThreatExchange does not have details about ' + hash + '\n', EntryContext: ec }; } ec[outputPaths.file] = []; var md = tblToMd('ThreatExchange Hash Reputation', data, argToList(args.headers)); for (var i=0; i= 0; }; var reliability = params.integrationReliability; if(!reliability){ reliability = 'C - Fairly reliable'; } if(!isValidReliability(reliability)) { return 'Error, Source Reliability value is invalid. Please choose from available reliability options.'; } switch (command) { case 'test-module': doFile('d2b4a84e2b69856ba8e234f55b1fbc4b'); // Check File Hash d2b4a84e2b69856ba8e234f55b1fbc4b - it will throw an error if not successful return true; case 'file': return doFile(args.file, reliability); case 'ip': return doIP(args.ip, reliability); case 'url': return doURL(args.url, reliability); case 'domain': return doDomain(args.domain, reliability); case 'threatexchange-query': return doQuery(args.text); case 'threatexchange-members': return doMembers(); default: throw 'Unknown command - ' + command; }