Skip to content

Commit

Permalink
#263 Update the user creation UI
Browse files Browse the repository at this point in the history
  • Loading branch information
nadouani committed Sep 7, 2017
1 parent a491503 commit a9c0980
Show file tree
Hide file tree
Showing 6 changed files with 263 additions and 88 deletions.
2 changes: 2 additions & 0 deletions ui/app/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,7 @@
<script src="scripts/controllers/admin/AdminMetricsCtrl.js"></script>
<script src="scripts/controllers/admin/AdminObservablesCtrl.js"></script>
<script src="scripts/controllers/admin/AdminReportTemplatesCtrl.js"></script>
<script src="scripts/controllers/admin/AdminUserDialogCtrl.js"></script>
<script src="scripts/controllers/admin/AdminUsersCtrl.js"></script>
<script src="scripts/controllers/alert/AlertEventCtrl.js"></script>
<script src="scripts/controllers/alert/AlertListCtrl.js"></script>
Expand All @@ -160,6 +161,7 @@
<script src="scripts/controllers/case/CaseTasksItemCtrl.js"></script>
<script src="scripts/controllers/case/ObservableCreationCtrl.js"></script>
<script src="scripts/controllers/case/ObservablesStatsCtrl.js"></script>
<script src="scripts/controllers/cortex/CortexInstanceDialogCtrl.js"></script>
<script src="scripts/controllers/misc/ServerInstanceDialogCtrl.js"></script>
<script src="scripts/directives/charts/c3Chart.js"></script>
<script src="scripts/directives/charts/chart.js"></script>
Expand Down
65 changes: 65 additions & 0 deletions ui/app/scripts/controllers/admin/AdminUserDialogCtrl.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
(function() {
'use strict';

angular.module('theHiveControllers').controller('AdminUserDialogCtrl', function($scope, $uibModalInstance, UserSrv, NotificationSrv, user) {
var self = this;

self.user = user;
self.isEdit = user.id;

self.formData = _.defaults(_.pick(self.user, 'id', 'name', 'roles'), {
id: null,
name: null,
roles: [],
alert: false
});
self.formData.alert = self.formData.roles.indexOf('alert') !== -1;

var onSuccess = function(data) {
$uibModalInstance.close(data);
};

var onFailure = function(response) {
NotificationSrv.error('AdminUserDialogCtrl', response.data, response.status);
};

var buildRoles = function(roles, alert) {
var result = angular.copy(roles) || [];

if(alert && roles.indexOf('alert') === -1) {
result.push('alert');
} else if (!alert && roles.indexOf('alert') !== -1) {
result = _.omit(result, 'alert');
}

return result;
};

self.saveUser = function(form) {
if (!form.$valid) {
return;
}

var postData = {};

if (self.user.id) {
postData = {
name: self.formData.name,
roles: buildRoles(self.formData.roles, self.formData.alert)
};
UserSrv.update({'userId': self.user.id}, postData, onSuccess, onFailure);
} else {
postData = {
login: angular.lowercase(self.formData.id),
name: self.formData.name,
roles: buildRoles(self.formData.roles, self.formData.alert)
};
UserSrv.save(postData, onSuccess, onFailure);
}
};

self.cancel = function() {
$uibModalInstance.dismiss();
}
});
})();
54 changes: 48 additions & 6 deletions ui/app/scripts/controllers/admin/AdminUsersCtrl.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
'use strict';

angular.module('theHiveControllers').controller('AdminUsersCtrl',
function($scope, PSearchSrv, UserSrv, NotificationSrv, appConfig) {
function($scope, $uibModal, PSearchSrv, UserSrv, NotificationSrv, clipboard, appConfig) {
$scope.appConfig = appConfig;
$scope.canSetPass = appConfig.config.capabilities.indexOf('setPassword') !== -1;
$scope.newUser = {
Expand Down Expand Up @@ -48,15 +48,35 @@

$scope.usrKey = {};
$scope.getKey = function(user) {
UserSrv.get({
UserSrv.getKey(user.id)
.then(function(key) {
$scope.usrKey[user.id] = key;
});

};
$scope.createKey = function(user) {
UserSrv.setKey({
userId: user.id
}, function(usr) {
$scope.usrKey[user.id] = usr.key;
},{}, function() {
delete $scope.usrKey[user.id];
}, function(response) {
NotificationSrv.error('AdminUsersCtrl', response.data, response.status);
});
};

$scope.revokeKey = function(user) {
UserSrv.revokeKey({
userId: user.id
},{}, function() {
delete $scope.usrKey[user.id];
}, function(response) {
NotificationSrv.error('AdminUsersCtrl', response.data, response.status);
});
};
$scope.createKey = function(user) {
$scope.updateField(user, 'with-key', true);

$scope.copyKey = function(user) {
clipboard.copyText($scope.usrKey[user.id]);
delete $scope.usrKey[user.id];
};

$scope.updateField = function(user, fieldName, newValue) {
Expand Down Expand Up @@ -86,6 +106,28 @@
});
};

$scope.copyPwd = function(password) {
clipboard.copyText(password);
};

$scope.showUserDialog = function(user) {
var modalInstance = $uibModal.open({
templateUrl: 'views/partials/admin/user-dialog.html',
controller: 'AdminUserDialogCtrl',
controllerAs: '$vm',
size: 'lg',
resolve: {
user: angular.copy(user) || {}
}
});

modalInstance.result.then(function(data) {
//self.initCustomfields();
//CustomFieldsCacheSrv.clearCache();
//$scope.$emit('custom-fields:refresh');
});
}

});

})();
23 changes: 23 additions & 0 deletions ui/app/scripts/services/UserSrv.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,18 @@ angular.module('theHiveServices')
setPass: {
method: 'POST',
url: './api/user/:userId/password/set'
},
// getKey: {
// method: 'GET',
// url: './api/user/:userId/key'
// },
setKey: {
method: 'POST',
url: './api/user/:userId/key/renew'
},
revokeKey: {
method: 'DELETE',
url: './api/user/:userId/key'
}
});
/**
Expand Down Expand Up @@ -70,6 +82,17 @@ angular.module('theHiveServices')
return defer.promise;
};

res.getKey = function(userId) {
var defer = $q.defer();

$http.get('./api/user/'+userId+'/key')
.then(function(response) {
defer.resolve(response.data);
});

return defer.promise;
};

res.list = function(query) {
var defer = $q.defer();

Expand Down
75 changes: 75 additions & 0 deletions ui/app/views/partials/admin/user-dialog.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
<form class="form-horizontal" name="userForm" ng-submit="$vm.saveUser(userForm)" novalidate>
<div class="modal-header bg-primary">
<h3 class="modal-title">{{$vm.formData.id ? 'Update' : 'Add'}} user</h3>
</div>
<div class="modal-body">
<div class="form-group" ng-class="{ 'has-error' : userForm.id.$invalid && !userForm.id.$pristine }">
<label class="col-sm-3 control-label">
Login
<i class="fa fa-asterisk text-danger"></i>
</label>
<div class="col-sm-9">
<input class="form-control" name="id"
placeholder="User's login"
ng-disabled="$vm.isEdit"
ng-model="$vm.formData.id"
required type="text">
<p class="help-block" ng-show="userForm.id.$invalid && !userForm.id.$pristine">This field is required.</p>
</div>
</div>

<div class="form-group" ng-class="{ 'has-error' : userForm.name.$invalid && !userForm.name.$pristine }">
<label class="col-sm-3 control-label">
Full name
<i class="fa fa-asterisk text-danger"></i>
</label>
<div class="col-sm-9">
<input class="form-control" name="login"
placeholder="User's name"
ng-model="$vm.formData.name"
required type="text">
<p class="help-block" ng-show="userForm.name.$invalid && !userForm.name.$pristine">This field is required.</p>
</div>
</div>

<div class="form-group">
<label class="col-sm-3 control-label">
Roles
<i class="fa fa-asterisk text-danger"></i>
</label>
<div class="col-sm-9">
<div class="btn-group" uib-dropdown>
<button class="btn btn-sm dropdown-toggle" uib-dropdown-toggle type="button">
{{$vm.formData.roles.join(', ') || 'none'}}&nbsp;&nbsp;
<span class="caret"></span>
</button>
<ul class="dropdown-menu" uib-dropdown-menu>
<li>
<a ng-click="$vm.formData.roles = []">none</a>
<a ng-click="$vm.formData.roles = ['read']">read</a>
<a ng-click="$vm.formData.roles = ['read','write']">read, write</a>
<a ng-click="$vm.formData.roles = ['read','write','admin']">read, write, admin</a>
</li>
</ul>
</div>
</div>
</div>

<div class="form-group">
<label class="col-sm-3 control-label">
Additional Permissions
</label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input type="checkbox" ng-model="$vm.formData.alert"> Allow alerts creation
</label>
</div>
</div>
</div>
</div>
<div class="modal-footer text-left">
<button class="btn btn-default" ng-click="$vm.cancel()" type="button">Cancel</button>
<button class="btn btn-primary pull-right" ng-disabled="userForm.$invalid" type="submit">Save user</button>
</div>
</form>
Loading

0 comments on commit a9c0980

Please sign in to comment.