diff --git a/thehive-backend/conf/routes b/thehive-backend/conf/routes index 8deffee8c2..ab81c946e1 100644 --- a/thehive-backend/conf/routes +++ b/thehive-backend/conf/routes @@ -34,9 +34,9 @@ POST /api/case/artifact/_stats controllers.ArtifactCtrl.stats POST /api/case/:caseId/artifact controllers.ArtifactCtrl.create(caseId) GET /api/case/artifact/:artifactId controllers.ArtifactCtrl.get(artifactId) DELETE /api/case/artifact/:artifactId controllers.ArtifactCtrl.delete(artifactId) +PATCH /api/case/artifact/_bulk controllers.ArtifactCtrl.bulkUpdate() PATCH /api/case/artifact/:artifactId controllers.ArtifactCtrl.update(artifactId) GET /api/case/artifact/:artifactId/similar controllers.ArtifactCtrl.findSimilar(artifactId) -PATCH /api/case/artifact/_bulk controllers.ArtifactCtrl.bulkUpdate() POST /api/case/:caseId/task/_search controllers.TaskCtrl.findInCase(caseId) POST /api/case/task/_search controllers.TaskCtrl.find() diff --git a/ui/app/scripts/controllers/case/CaseObservablesCtrl.js b/ui/app/scripts/controllers/case/CaseObservablesCtrl.js index c629ec25c3..32dbb87d01 100644 --- a/ui/app/scripts/controllers/case/CaseObservablesCtrl.js +++ b/ui/app/scripts/controllers/case/CaseObservablesCtrl.js @@ -423,18 +423,27 @@ $scope.chTLP = '-1'; $scope.updateTLP = function (value) { $scope.chTLP = value; - angular.forEach($scope.selection.artifacts, function (te) { - $scope.updateField(te.id, 'tlp', $scope.chTLP); - }); - $scope.chTLP = '-1'; + CaseArtifactSrv.bulkUpdate(_.pluck($scope.selection.artifacts, 'id'), {'tlp': $scope.chTLP}) + .then(function(){ + $scope.chTLP = '-1'; + NotificationSrv.log('Selected observables have been updated successfully', 'success'); + $scope.selection.Action='main'; + }); }; - $scope.setIOC = function (action) { - var ioc = action === 'setIocFlog'; - - angular.forEach($scope.selection.artifacts, function (te) { - $scope.updateField(te.id, 'ioc', ioc); - }); + $scope.setIOC = function (ioc) { + CaseArtifactSrv.bulkUpdate(_.pluck($scope.selection.artifacts, 'id'), {ioc: ioc}) + .then(function(){ + NotificationSrv.log('Selected observables have been updated successfully', 'success'); + $scope.selection.Action='main'; + }); + }; + $scope.setSightedFlag = function (sighted) { + CaseArtifactSrv.bulkUpdate(_.pluck($scope.selection.artifacts, 'id'), {sighted: sighted}) + .then(function(){ + NotificationSrv.log('Selected observables have been updated successfully', 'success'); + $scope.selection.Action='main'; + }); }; $scope.updateField = function (id, fieldName, newValue) { diff --git a/ui/app/scripts/controllers/case/ObservableCreationCtrl.js b/ui/app/scripts/controllers/case/ObservableCreationCtrl.js index 41665bfecc..9b2cc8aca4 100644 --- a/ui/app/scripts/controllers/case/ObservableCreationCtrl.js +++ b/ui/app/scripts/controllers/case/ObservableCreationCtrl.js @@ -13,6 +13,7 @@ $scope.params = { bulk: false, ioc: false, + sighted: false, data: '', tlp: 2, message: '', @@ -71,6 +72,7 @@ postData = { dataType: params.dataType, ioc: params.ioc, + sighted: params.sighted, tlp: params.tlp, message: params.message, tags: _.unique(_.pluck($scope.tags, 'text')) diff --git a/ui/app/scripts/services/CaseArtifactSrv.js b/ui/app/scripts/services/CaseArtifactSrv.js index d14863d047..4ac67150cf 100644 --- a/ui/app/scripts/services/CaseArtifactSrv.js +++ b/ui/app/scripts/services/CaseArtifactSrv.js @@ -1,7 +1,7 @@ (function() { 'use strict'; angular.module('theHiveServices') - .factory('CaseArtifactSrv', function(FileResource) { + .factory('CaseArtifactSrv', function($http, FileResource) { var api = null; var filters = null; @@ -20,6 +20,10 @@ } return api; + }, + + bulkUpdate: function(ids, update) { + return $http.patch('./api/case/artifact/_bulk', _.extend({ids: ids}, update)); } }; diff --git a/ui/app/scripts/services/ObservablesUISrv.js b/ui/app/scripts/services/ObservablesUISrv.js index c36080e08f..fdf2bdeaf1 100644 --- a/ui/app/scripts/services/ObservablesUISrv.js +++ b/ui/app/scripts/services/ObservablesUISrv.js @@ -7,8 +7,8 @@ actions: { main: 'Action', export: 'Export', - setIocFlog: 'Set IOC flog', - unsetIocFlog: 'Unset IOC flog', + changeSightedFlog: 'Change sighted flag', + changeIOCFlog: 'Change sighted flag', changeTlp: 'Change TLP', addTags: 'Add tags', runAnalyzers: 'Run analyzers', @@ -40,6 +40,11 @@ type: 'boolean', defaultValue: null }, + sighted: { + field: 'sighted', + type: 'boolean', + defaultValue: null + }, tlp: { field: 'tlp', type: 'number', diff --git a/ui/app/views/directives/flow/observable.html b/ui/app/views/directives/flow/observable.html index 9a771d382a..de75493724 100644 --- a/ui/app/views/directives/flow/observable.html +++ b/ui/app/views/directives/flow/observable.html @@ -9,7 +9,7 @@
- {{summary.case_artifact.Creation}} other observables have also been added + {{summary.case_artifact.Creation}} other observables have also been {{base.operation === 'Creation' ? 'added' : 'updated'}} See all
diff --git a/ui/app/views/partials/case/case.observables.html b/ui/app/views/partials/case/case.observables.html index 0bec888a4e..5f173bcac8 100644 --- a/ui/app/views/partials/case/case.observables.html +++ b/ui/app/views/partials/case/case.observables.html @@ -12,10 +12,10 @@
  • - Set IOC flag + Change sighted flag
  • - Unset IOC flag + Change IOC flag
  • Change TLP @@ -79,8 +79,8 @@
    -
    -
    +
    +
    diff --git a/ui/app/views/partials/observables/creation/form.html b/ui/app/views/partials/observables/creation/form.html index 53a67d8231..b22bd7dc9f 100644 --- a/ui/app/views/partials/observables/creation/form.html +++ b/ui/app/views/partials/observables/creation/form.html @@ -3,7 +3,7 @@
    -
     Mark all observables as IOC
    +
     Mark all observables as sighted
    diff --git a/ui/app/views/partials/observables/details/artifact-details-information.html b/ui/app/views/partials/observables/details/artifact-details-information.html index b613588911..e5447b6d21 100644 --- a/ui/app/views/partials/observables/details/artifact-details-information.html +++ b/ui/app/views/partials/observables/details/artifact-details-information.html @@ -31,13 +31,17 @@

    Metadata

    Is IOC
    - + - - - - - + +
    +
    + +
    +
    Has been sighted
    +
    + +
    diff --git a/ui/app/views/partials/observables/list/artifacts-list-ioc.html b/ui/app/views/partials/observables/list/artifacts-list-ioc.html index a9cf1af4e7..a27ddfb191 100644 --- a/ui/app/views/partials/observables/list/artifacts-list-ioc.html +++ b/ui/app/views/partials/observables/list/artifacts-list-ioc.html @@ -1,13 +1,13 @@ -
    -
    - +
    +
    You have selected {{selection.artifacts.length}} observable(s)
    - Set IOC flag for {{selection.artifacts.length}} observable(s) - Unset IOC flag for {{selection.artifacts.length}} observable(s) + + Add IOC flag + + + Remove IOC flag Cancel -
    -
    diff --git a/ui/app/views/partials/observables/list/artifacts-list-main.html b/ui/app/views/partials/observables/list/artifacts-list-main.html index b4ec229922..82e5c79130 100644 --- a/ui/app/views/partials/observables/list/artifacts-list-main.html +++ b/ui/app/views/partials/observables/list/artifacts-list-main.html @@ -41,6 +41,7 @@

    Observable List ({{artifacts.total || 0}} of {{artifactStats.count}})

    + Type Value/Filename Date Added @@ -55,6 +56,9 @@

    Observable List ({{artifacts.total || 0}} of {{artifactStats.count}})

    + + + diff --git a/ui/app/views/partials/observables/list/artifacts-list-sighted.html b/ui/app/views/partials/observables/list/artifacts-list-sighted.html new file mode 100644 index 0000000000..f7ca024524 --- /dev/null +++ b/ui/app/views/partials/observables/list/artifacts-list-sighted.html @@ -0,0 +1,13 @@ +
    +
    You have selected {{selection.artifacts.length}} observable(s)
    + + + Add sighted flag + + + Remove sighted flag + + + Cancel + +
    diff --git a/ui/app/views/partials/observables/list/filters.html b/ui/app/views/partials/observables/list/filters.html index b60a6b9844..8e1ed4b6f7 100644 --- a/ui/app/views/partials/observables/list/filters.html +++ b/ui/app/views/partials/observables/list/filters.html @@ -60,13 +60,19 @@

    Filters

    - +
    -
    - - +
    + +
    + +
    + + + +