var host = params.url; var insecure = params.insecure; var proxy = params.proxy; var username = params.username.identifier; var password = params.username.password; var loginArgs = { username : username, password : password }; var headers = { 'Content-Type': ['application/json'] }; var token = params.token; var makeArray = function(obj){ if(obj && !Array.isArray(obj)) return [obj]; else return obj; }; var headerTransform = function(dict){ return function(obj){ return dict[obj]; }; }; //returns single object withing entity (i.e. File[0]) var jsonToEntityObject = function(origObj, keyTransform){ var ret = {}; for(var key in origObj){ if(keyTransform(key)){ ret[keyTransform(key)] = dq(origObj, key); } } return ret; }; //returns entire entity array (i.e. File) var jsonToEntity = function(origObj, keyTransform){ var j; if(!Array.isArray(origObj)){ return jsonToEntityObject(origObj, keyTransform); } else if(origObj.length > 0){ //makes sure no empty arrays are pushed var ret = []; for(j=0; j= 300 || res.StatusCode < 200) { if(token && !isLogout){ logout(); } throw 'Request Failed.\nStatus code: ' + res.StatusCode + '.\nResponse Body: ' + res.Body; } try { return JSON.parse(res.Body); } catch (err) { return res.Body; } }; var get = function(url, queryParams, isLogout){ return sendRequest(url, 'GET', queryParams, undefined, isLogout); }; var post = function(url, queryParams, data){ return sendRequest(url, 'POST', queryParams, data); }; var login = function(){ if (!token) { try { resp = post('/api/v1/auth/login', undefined, loginArgs); token = resp.metadata.token; headers = { 'Content-Type': ['application/json'], 'Authorization': ['JWT ' + token] }; } catch (err) { throw 'ERROR: failure while authenticating to platform: ' + err; } } }; var logout = function(){ return get('/api/v1/auth/logout/', undefined, true); }; /**** Get Commands ****/ var getDeploymentProfiles = function(){ return get('/api/v1/deployment-profiles/').data; }; var getUnmanagedEndpoints = function(){ return get('/api/v1/endpoints/', {'core_os' : 'windows', 'status':'not-installed'}); }; var getUsers = function(){ return get('/api/v1/users'); }; var getInvestigations = function(){ return get('/api/v1/investigations?archived=false').data; }; var getSensor = function(sensor_id){ return get('/api/v1/deployment-profiles/'+sensor_id).data; }; var getUserID = function(name){ res = getUsers().data; for(var i=0; i 0){ context[task_types[task_type_keys[j]]] = results; md += tableToMarkdown('Investigation '+task_types[task_type_keys[j]]+' Results', results); contents.push(results); } } } return { Type: entryTypes.note, Contents: contents, ContentsFormat: formats.json, ReadableContentsFormat : formats.markdown, EntryContext : {'EndGame.InvestigationResults' : context}, HumanReadable: md }; } /**** Create / Set Commands ****/ var createSensorProfile = function(name, receiver, sensor_version, sensor_directory, api_key){ reqBody = { 'name' : name, 'receiver' : receiver, 'sensor_version' : sensor_version, 'sensor_directory' : sensor_directory, 'api_key' : api_key, 'config':{ 'Mitigation':{ 'dbi_dll_name':'esensordbi.dll', 'popup_exe_name':'useralert.exe' }, 'Kernel':{ 'sys_name':'esensor.sys', 'service_name':'esensordrv', 'service_display_name':'esensordrv' }, 'Installation':{ 'dll_path':'%SYSTEMROOT%\\System32\\esensor.exe', 'service_name':'esensor', 'service_display_name':'EndpointSensor' } } }; res = post('/api/v1/deployment-profiles/', undefined, reqBody).data; res.id = res.success? res.success : 'Sensor profile creation failed'; res.success = undefined; res.name = name; return res; } var createInvestigation = function(name, assignee, sensors, endpoints, args){ var taskDescriptions = get('/api/v1/task-descriptions/').data; var iocTaskId = '35b6f686-dece-545f-8314-56936abec6ba'; for(var i=0; i