From e2ff099edf9b4659884b1828e0871c7eb68fdd9c Mon Sep 17 00:00:00 2001 From: Nabil Adouani Date: Mon, 13 Jul 2020 16:01:41 +0200 Subject: [PATCH] #1431 Use responder selector from case, alert, task, observable lists --- frontend/app/index.html | 1 + .../controllers/alert/AlertListCtrl.js | 25 ++++++------ .../scripts/controllers/case/CaseListCtrl.js | 30 +++++++------- .../controllers/case/CaseObservablesCtrl.js | 27 +++++++------ .../scripts/controllers/case/CaseTasksCtrl.js | 37 +++++++++++------ .../controllers/misc/ResponderSelectorCtrl.js | 20 ++++++++++ .../app/scripts/services/api/CortexSrv.js | 21 ++++++++++ frontend/app/styles/main.css | 4 ++ frontend/app/views/partials/alert/list.html | 22 ++-------- .../app/views/partials/case/case.list.html | 31 +++----------- .../app/views/partials/case/case.tasks.html | 40 +++---------------- .../partials/misc/responder.selector.html | 37 +++++++++++++++++ .../observables/list/observables.html | 21 ++-------- 13 files changed, 170 insertions(+), 146 deletions(-) create mode 100644 frontend/app/scripts/controllers/misc/ResponderSelectorCtrl.js create mode 100644 frontend/app/views/partials/misc/responder.selector.html 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 @@

List of alerts ({{$vm.list.total || 0}} of {{alertEvents.c - - - - - - + + +
diff --git a/frontend/app/views/partials/case/case.list.html b/frontend/app/views/partials/case/case.list.html index 3581c70c20..73110b7920 100644 --- a/frontend/app/views/partials/case/case.list.html +++ b/frontend/app/views/partials/case/case.list.html @@ -127,28 +127,12 @@

List of cases ({{$vm.list.total || 0}} of {{$vm.caseStats.

- - - - - - - - - + + + + + @@ -162,9 +146,6 @@

List of cases ({{$vm.list.total || 0}} of {{$vm.caseStats. - - -
diff --git a/frontend/app/views/partials/case/case.tasks.html b/frontend/app/views/partials/case/case.tasks.html index f0384d4dd6..5aa721495a 100755 --- a/frontend/app/views/partials/case/case.tasks.html +++ b/frontend/app/views/partials/case/case.tasks.html @@ -61,7 +61,7 @@ - + + @@ -128,24 +129,9 @@ - + - - @@ -180,7 +166,7 @@ - + + @@ -247,24 +234,9 @@ - + - - diff --git a/frontend/app/views/partials/misc/responder.selector.html b/frontend/app/views/partials/misc/responder.selector.html new file mode 100644 index 0000000000..01d94cb0a5 --- /dev/null +++ b/frontend/app/views/partials/misc/responder.selector.html @@ -0,0 +1,37 @@ + + + diff --git a/frontend/app/views/partials/observables/list/observables.html b/frontend/app/views/partials/observables/list/observables.html index ce61f4f4c0..960c96afad 100644 --- a/frontend/app/views/partials/observables/list/observables.html +++ b/frontend/app/views/partials/observables/list/observables.html @@ -100,25 +100,12 @@

{{artifact.startDate | shortDate}} - - - + + + - - +