Skip to content

Commit

Permalink
#1579 Refactor the UiSettings service and add new ui options related …
Browse files Browse the repository at this point in the history
…to alert similar cases section
  • Loading branch information
nadouani committed Oct 29, 2020
1 parent fe9b36f commit 570d7f3
Show file tree
Hide file tree
Showing 9 changed files with 87 additions and 64 deletions.
12 changes: 0 additions & 12 deletions frontend/app/scripts/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -313,18 +313,6 @@ angular.module('thehive', [
permissions: ['manageObservableTemplate']
}
})
// .state('app.administration.ui-settings', {
// url: '/ui-settings',
// templateUrl: 'views/partials/admin/ui-settings.html',
// controller: 'AdminUiSettingsCtrl',
// controllerAs: '$vm',
// title: 'UI settings',
// resolve: {
// uiConfig: function(UiSettingsSrv) {
// return UiSettingsSrv.all();
// }
// }
// })
.state('app.case', {
abstract: true,
url: 'case/{caseId}',
Expand Down
24 changes: 22 additions & 2 deletions frontend/app/scripts/components/alert/AlertSimilarCaseListCmp.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

angular.module('theHiveComponents')
.component('alertSimilarCaseList', {
controller: function($scope, FilteringSrv, PaginatedQuerySrv, CaseResolutionStatus) {
controller: function($scope, FilteringSrv, PaginatedQuerySrv, CaseResolutionStatus, UiSettingsSrv) {
var self = this;

self.CaseResolutionStatus = CaseResolutionStatus;
Expand All @@ -30,6 +30,11 @@
currentPage: 1
};

self.state = {
disallowMerge: UiSettingsSrv.disallowMergeAlertInResolvedSimilarCases() === true,
defaultAlertSimilarCaseFilter: UiSettingsSrv.defaultAlertSimilarCaseFilter()
};

self.$onInit = function() {
this.filtering = new FilteringSrv('case', 'alert.dialog.similar-cases', {
version: 'v1',
Expand All @@ -42,8 +47,23 @@
defaultFilter: []
});

self.filtering.initContext(this.alertId)
self.filtering.initContext('alert.dialog.similar-cases')
.then(function() {
var defaultFilter = {
field: 'status',
type: 'enumeration',
value: {
list: [{
text: 'Open',
label: 'Open'
}]
}
};

if(_.isEmpty(self.filtering.context.filters)) {
self.filtering.addFilter(defaultFilter);
}

self.load();

$scope.$watch('$cmp.list.pageSize', function (newValue) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,7 @@
var self = this;

self.isDirtySetting = function(key, newValue) {
var currentValue = (self.currentSettings[key] || {}).value;

return newValue !== currentValue;
return newValue !== self.currentSettings[key];
};

self.save = function(/*form*/) {
Expand All @@ -36,6 +34,7 @@
};

self.loadSettings = function(configurations) {

var notifyRoot = false;
var promise;

Expand All @@ -52,7 +51,7 @@

self.configs = {};
self.settingsKeys.forEach(function(key) {
self.configs[key] = (configs[key] || {}).value;
self.configs[key] = configs[key];
});

if(notifyRoot) {
Expand Down
2 changes: 1 addition & 1 deletion frontend/app/scripts/controllers/alert/AlertEventCtrl.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
similarCases: 0
};

self.hideEmptyCaseButton = UiSettingsSrv.uiHideEmptyCaseButton();
self.hideEmptyCaseButton = UiSettingsSrv.hideEmptyCaseButton();

self.updateObservableCount = function(count) {
self.counts.observables = count;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
this.state = {
filter: '',
selected: null,
hideEmptyCaseButton: UiSettingsSrv.uiHideEmptyCaseButton()
hideEmptyCaseButton: UiSettingsSrv.hideEmptyCaseButton()
};

this.selectTemplate = function(template) {
Expand Down
78 changes: 36 additions & 42 deletions frontend/app/scripts/services/api/UiSettingsSrv.js
Original file line number Diff line number Diff line change
@@ -1,64 +1,58 @@
(function() {
'use strict';
angular.module('theHiveServices').factory('UiSettingsSrv', function($http, $q) {

var settings = null;
angular.module('theHiveServices').service('UiSettingsSrv', function($http, $q) {
var baseUrl = './api/config/organisation/';
var self = this;

var keys = [
'ui.hideEmptyCaseButton'
];
this.settings = null;

var factory = {
keys: keys,
clearCache: function() {
settings = null;
},
this.keys = [
'hideEmptyCaseButton',
'disallowMergeAlertInResolvedSimilarCases',
'defaultAlertSimilarCaseFilter'
];

get: function(name) {
return settings[name];
},
this.clearCache = function() {
self.settings = null;
};

save: function(name, value) {
return $http.put(baseUrl + name, {value: value});
},
this.get = function(name) {
return self.settings[name];
};

all: function(force) {
var deferred = $q.defer();
this.save = function(name, value) {
return $http.put(baseUrl + 'ui.' + name, {value: value});
};

if(settings === null || force) {
this.all = function(force) {
var deferred = $q.defer();

settings = {};
if(self.settings === null || force) {

$q.all(_.map(keys, function(key) {
return $http.get(baseUrl + key);
})).then(function(responses) {
_.each(responses, function(response) {
var data = response.data;
self.settings = {};

settings[data.path] = data;
settings[data.path].id = data.path;
});
$http.get('./api/config/organisation?path=ui')
.then(function(response) {
var data = response.data;

deferred.resolve(settings);
}).catch(function(responses) {
deferred.reject(responses);
self.settings = data;
deferred.resolve(data);
})
.catch(function(response) {
deferred.reject(response);
});
} else {
deferred.resolve(settings);
}

return deferred.promise;
} else {
deferred.resolve(self.settings);
}

return deferred.promise;
};

keys.forEach(function(key) {
this.keys.forEach(function(key) {
var camelcased = s.camelize(key.replace(/\./gi, '_'));
factory[camelcased] = function() {
return (settings[key] || {}).value;
self[camelcased] = function() {
return (self.settings || {})[key];
};
});

return factory;
});
})();
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@
</div>

<div class="case-similarity-merge text-center">
<button class="btn btn-sm btn-primary" ng-click="$cmp.merge(item.case._id)">Merge in this case</button>
<button class="btn btn-sm btn-primary" ng-click="$cmp.merge(item.case._id)" ng-if="!($cmp.state.disallowMerge && item.case.status === 'Resolved')">Merge in this case</button>
</div>
</div>
</div>
Expand Down
22 changes: 21 additions & 1 deletion frontend/app/views/components/org/config.list.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,32 @@
<div class="col-md-9">
<div class="checkbox">
<label>
<input name="ui.hideEmptyCaseButton" type="checkbox" ng-model="$ctrl.configs['ui.hideEmptyCaseButton']"> Check this to disallow creating empty cases
<input name="hideEmptyCaseButton" type="checkbox" ng-model="$ctrl.configs['hideEmptyCaseButton']"> Check this to disallow creating empty cases
</label>
</div>
</div>
</div>

<div class="form-group">
<label class="col-md-3 control-label">Merge alerts into closed cases</label>
<div class="col-md-9">
<div class="checkbox">
<label>
<input name="disallowMergeAlertInResolvedSimilarCases" type="checkbox"
ng-model="$ctrl.configs['disallowMergeAlertInResolvedSimilarCases']"> Check this to disallow merging alerts into closed cases
</label>
</div>
</div>
</div>

<div class="form-group">
<label class="col-md-3 control-label">Hide <em>Empty Case</em> button</label>
<div class="col-md-3">
<select class="form-control" name="defaultAlertSimilarCaseFilter" ng-options="o for o in ['open-cases', 'resolved-cases']" ng-model="$ctrl.configs['defaultAlertSimilarCaseFilter']">
</select>
</div>
</div>

<div class="mt-s">
<button class="btn btn-primary pull-right" ng-disabled="settingsForm.$invalid" type="submit">Save</button>
</div>
Expand Down
2 changes: 2 additions & 0 deletions thehive/conf/reference.conf
Original file line number Diff line number Diff line change
Expand Up @@ -165,4 +165,6 @@ integrityCheck {

organisation.defaults {
ui.hideEmptyCaseButton: false
ui.disallowMergeAlertInResolvedSimilarCases: false
ui.defaultAlertSimilarCaseFilter: "open-cases"
}

0 comments on commit 570d7f3

Please sign in to comment.