diff --git a/frontend/app/index.html b/frontend/app/index.html index b7a83d02ad..b6ab17916e 100644 --- a/frontend/app/index.html +++ b/frontend/app/index.html @@ -195,6 +195,7 @@ + diff --git a/frontend/app/scripts/controllers/alert/AlertListCtrl.js b/frontend/app/scripts/controllers/alert/AlertListCtrl.js index 42f06340d2..269e017492 100755 --- a/frontend/app/scripts/controllers/alert/AlertListCtrl.js +++ b/frontend/app/scripts/controllers/alert/AlertListCtrl.js @@ -187,29 +187,30 @@ } }; - this.getResponders = function(eventId, force) { + this.getResponders = function(event, force) { if(!force && this.responders !== null) { return; } this.responders = null; - CortexSrv.getResponders('alert', eventId) + CortexSrv.getResponders('alert', event._id) .then(function(responders) { self.responders = responders; + return CortexSrv.promntForResponder(responders); }) - .catch(function(err) { - NotificationSrv.error('AlertList', err.data, err.status); - }); - }; - - this.runResponder = function(responderId, responderName, event) { - CortexSrv.runResponder(responderId, responderName, 'alert', _.pick(event, '_id', 'tlp')) .then(function(response) { + if(response && _.isString(response)) { + NotificationSrv.log(response, 'warning'); + } else { + return CortexSrv.runResponder(response.id, response.name, 'alert', _.pick(event, '_id', 'tlp')); + } + }) + .then(function(response){ NotificationSrv.log(['Responder', response.data.responderName, 'started successfully on alert', event.title].join(' '), 'success'); }) - .catch(function(response) { - if(response && !_.isString(response)) { - NotificationSrv.error('CaseList', response.data, response.status); + .catch(function(err) { + if(err && !_.isString(err)) { + NotificationSrv.error('AlertList', err.data, err.status); } }); }; diff --git a/frontend/app/scripts/controllers/case/CaseListCtrl.js b/frontend/app/scripts/controllers/case/CaseListCtrl.js index 994aea5b25..892e2d50e7 100644 --- a/frontend/app/scripts/controllers/case/CaseListCtrl.js +++ b/frontend/app/scripts/controllers/case/CaseListCtrl.js @@ -226,32 +226,32 @@ }); }; - this.getCaseResponders = function(caseId, force) { + this.getCaseResponders = function(caze, force) { if (!force && this.caseResponders !== null) { return; } - this.caseResponders = null; - CortexSrv.getResponders('case', caseId) - .then(function(responders) { + self.caseResponders = null; + CortexSrv.getResponders('case', caze._id) + .then(function(responders){ self.caseResponders = responders; + return CortexSrv.promntForResponder(responders); }) - .catch(function(err) { - NotificationSrv.error('CaseList', err.data, err.status); - }); - }; - - this.runResponder = function(responderId, responderName, caze) { - CortexSrv.runResponder(responderId, responderName, 'case', _.pick(caze, '_id', 'tlp', 'pap')) .then(function(response) { + if(response && _.isString(response)) { + NotificationSrv.log(response, 'warning'); + } else { + return CortexSrv.runResponder(response.id, response.name, 'case', _.pick(caze, '_id', 'tlp', 'pap')); + } + }) + .then(function(response){ NotificationSrv.log(['Responder', response.data.responderName, 'started successfully on case', caze.title].join(' '), 'success'); }) - .catch(function(response) { - if (response && !_.isString(response)) { - NotificationSrv.error('CaseList', response.data, response.status); + .catch(function(err) { + if(err && !_.isString(err)) { + NotificationSrv.error('CaseList', err.data, err.status); } }); }; - } })(); diff --git a/frontend/app/scripts/controllers/case/CaseObservablesCtrl.js b/frontend/app/scripts/controllers/case/CaseObservablesCtrl.js index 478754f156..31ecbac471 100644 --- a/frontend/app/scripts/controllers/case/CaseObservablesCtrl.js +++ b/frontend/app/scripts/controllers/case/CaseObservablesCtrl.js @@ -398,30 +398,31 @@ }); }; - $scope.getObsResponders = function(observableId, force) { + $scope.getObsResponders = function(observable, force) { if(!force && $scope.obsResponders !== null) { return; } $scope.obsResponders = null; - CortexSrv.getResponders('case_artifact', observableId) + CortexSrv.getResponders('case_artifact', observable._id) .then(function(responders) { $scope.obsResponders = responders; + return CortexSrv.promntForResponder(responders); }) - .catch(function(err) { - NotificationSrv.error('observablesList', err.data, err.status); - }); - }; - - $scope.runResponder = function(responderId, responderName, artifact) { - CortexSrv.runResponder(responderId, responderName, 'case_artifact', _.pick(artifact, '_id')) .then(function(response) { - var data = '['+$filter('fang')(artifact.data || artifact.attachment.name)+']'; + if(response && _.isString(response)) { + NotificationSrv.log(response, 'warning'); + } else { + return CortexSrv.runResponder(response.id, response.name, 'case_artifact', _.pick(observable, '_id')); + } + }) + .then(function(response){ + var data = '['+$filter('fang')(observable.data || observable.attachment.name)+']'; NotificationSrv.log(['Responder', response.data.responderName, 'started successfully on observable', data].join(' '), 'success'); }) - .catch(function(response) { - if(response && !_.isString(response)) { - NotificationSrv.error('observablesList', response.data, response.status); + .catch(function(err) { + if(err && !_.isString(err)) { + NotificationSrv.error('observablesList', err.data, err.status); } }); }; diff --git a/frontend/app/scripts/controllers/case/CaseTasksCtrl.js b/frontend/app/scripts/controllers/case/CaseTasksCtrl.js index 93bf74659a..18d5df4356 100755 --- a/frontend/app/scripts/controllers/case/CaseTasksCtrl.js +++ b/frontend/app/scripts/controllers/case/CaseTasksCtrl.js @@ -230,31 +230,44 @@ return defer.promise; }; - $scope.getTaskResponders = function(taskId, force) { + $scope.getTaskResponders = function(task, force) { if(!force && $scope.taskResponders !== null) { return; } $scope.taskResponders = null; - CortexSrv.getResponders('case_task', taskId) + CortexSrv.getResponders('case_task', task._id) .then(function(responders) { $scope.taskResponders = responders; + return CortexSrv.promntForResponder(responders); }) - .catch(function(response) { - NotificationSrv.error('taskList', response.data, response.status); - }); - }; - - $scope.runResponder = function(responderId, responderName, task) { - CortexSrv.runResponder(responderId, responderName, 'case_task', _.pick(task, '_id')) .then(function(response) { + if(response && _.isString(response)) { + NotificationSrv.log(response, 'warning'); + } else { + return CortexSrv.runResponder(response.id, response.name, 'case_task', _.pick(task, '_id')); + } + }) + .then(function(response){ NotificationSrv.success(['Responder', response.data.responderName, 'started successfully on task', task.title].join(' ')); }) - .catch(function(response) { - if(response && !_.isString(response)) { - NotificationSrv.error('taskList', response.data, response.status); + .catch(function(err) { + if(err && !_.isString(err)) { + NotificationSrv.error('taskList', err.data, err.status); } }); }; + + // $scope.runResponder = function(responderId, responderName, task) { + // CortexSrv.runResponder(responderId, responderName, 'case_task', _.pick(task, '_id')) + // .then(function(response) { + // NotificationSrv.success(['Responder', response.data.responderName, 'started successfully on task', task.title].join(' ')); + // }) + // .catch(function(response) { + // if(response && !_.isString(response)) { + // NotificationSrv.error('taskList', response.data, response.status); + // } + // }); + // }; } }()); diff --git a/frontend/app/scripts/controllers/misc/ResponderSelectorCtrl.js b/frontend/app/scripts/controllers/misc/ResponderSelectorCtrl.js new file mode 100644 index 0000000000..b1d3b0a93b --- /dev/null +++ b/frontend/app/scripts/controllers/misc/ResponderSelectorCtrl.js @@ -0,0 +1,20 @@ +(function() { + 'use strict'; + + angular.module('theHiveControllers') + .controller('ResponderSelectorCtrl', function($uibModalInstance, responders) { + this.responders = responders || []; + this.selectAll = false; + this.state = { + filter: '' + }; + + this.next = function(responder) { + $uibModalInstance.close(responder); + }; + + this.cancel = function() { + $uibModalInstance.dismiss(); + }; + }); +})(); diff --git a/frontend/app/scripts/services/api/CortexSrv.js b/frontend/app/scripts/services/api/CortexSrv.js index 2807a79d05..b24169c4cc 100644 --- a/frontend/app/scripts/services/api/CortexSrv.js +++ b/frontend/app/scripts/services/api/CortexSrv.js @@ -96,6 +96,27 @@ return modalInstance.result; }; + this.promntForResponder = function(responders) { + if(!responders || responders.length ===0) { + return $q.resolve('No responders available'); + } + + var modalInstance = $uibModal.open({ + animation: 'true', + templateUrl: 'views/partials/misc/responder.selector.html', + controller: 'ResponderSelectorCtrl', + controllerAs: '$dialog', + size: 'lg', + resolve: { + responders: function() { + return responders; + } + } + }); + + return modalInstance.result; + }; + this.getResponders = function(type, id) { //return $http.get(baseUrl + '/responder') return $http.get(baseUrl + '/responder/' + type + '/' + id) diff --git a/frontend/app/styles/main.css b/frontend/app/styles/main.css index 4d5806ba7f..c2aa162bbd 100644 --- a/frontend/app/styles/main.css +++ b/frontend/app/styles/main.css @@ -290,6 +290,10 @@ pre.clearpre { background-color: #777; } +.btn-clear:active { + box-shadow: none; +} + dl.dl-horizontal>dt.pull-left { text-align: left !important; } diff --git a/frontend/app/views/partials/alert/list.html b/frontend/app/views/partials/alert/list.html index e36c6db108..2ece25e7dd 100644 --- a/frontend/app/views/partials/alert/list.html +++ b/frontend/app/views/partials/alert/list.html @@ -164,24 +164,10 @@
+ Please select the responder you want to run +
+ +
+ {{responder.name}} + {{responder.description}} + |
+