Add UI support for multiple operations on keys
This commit is contained in:
parent
726cb5fe6a
commit
a55e92bc95
6 changed files with 283 additions and 22 deletions
|
@ -11,13 +11,19 @@ angular.module('quay').directive('serviceKeysManager', function () {
|
|||
scope: {
|
||||
'isEnabled': '=isEnabled'
|
||||
},
|
||||
controller: function($scope, $element, ApiService, TableService) {
|
||||
controller: function($scope, $element, ApiService, TableService, UIService) {
|
||||
$scope.options = {
|
||||
'filter': null,
|
||||
'predicate': 'expiration_datetime',
|
||||
'reverse': false,
|
||||
};
|
||||
|
||||
$scope.deleteKeysInfo = null;
|
||||
$scope.approveKeysInfo = null;
|
||||
$scope.changeKeysInfo = null;
|
||||
|
||||
$scope.checkedKeys = UIService.createCheckStateController([], 'kid');
|
||||
|
||||
$scope.TableService = TableService;
|
||||
$scope.newKey = null;
|
||||
$scope.creatingKey = false;
|
||||
|
@ -48,6 +54,8 @@ angular.module('quay').directive('serviceKeysManager', function () {
|
|||
$scope.orderedKeys = TableService.buildOrderedItems(keys, $scope.options,
|
||||
['name', 'kid', 'service'],
|
||||
['creation_datetime', 'expiration_datetime'])
|
||||
|
||||
$scope.checkedKeys = UIService.createCheckStateController($scope.orderedKeys.visibleEntries, 'kid');
|
||||
};
|
||||
|
||||
var loadServiceKeys = function() {
|
||||
|
@ -131,7 +139,10 @@ angular.module('quay').directive('serviceKeysManager', function () {
|
|||
};
|
||||
|
||||
$scope.changeKeyExpiration = function(changeInfo, callback) {
|
||||
var errorHandler = ApiService.errorDisplay('Could not change expiration on service key', callback);
|
||||
var errorHandler = ApiService.errorDisplay('Could not change expiration on service key', function() {
|
||||
loadServiceKeys();
|
||||
callback(false);
|
||||
});
|
||||
|
||||
var data = {
|
||||
'expiration': changeInfo.expiration_date
|
||||
|
@ -166,7 +177,10 @@ angular.module('quay').directive('serviceKeysManager', function () {
|
|||
};
|
||||
|
||||
$scope.approveKey = function(approvalKeyInfo, callback) {
|
||||
var errorHandler = ApiService.errorDisplay('Could not approve service key', callback);
|
||||
var errorHandler = ApiService.errorDisplay('Could not approve service key', function() {
|
||||
loadServiceKeys();
|
||||
callback(false);
|
||||
});
|
||||
|
||||
var data = {
|
||||
'notes': approvalKeyInfo.notes
|
||||
|
@ -197,7 +211,10 @@ angular.module('quay').directive('serviceKeysManager', function () {
|
|||
};
|
||||
|
||||
$scope.deleteKey = function(deleteKeyInfo, callback) {
|
||||
var errorHandler = ApiService.errorDisplay('Could not delete service key', callback);
|
||||
var errorHandler = ApiService.errorDisplay('Could not delete service key', function() {
|
||||
loadServiceKeys();
|
||||
callback(false);
|
||||
});
|
||||
|
||||
var params = {
|
||||
'kid': deleteKeyInfo.key.kid
|
||||
|
@ -225,6 +242,132 @@ angular.module('quay').directive('serviceKeysManager', function () {
|
|||
saveAs(blob, $scope.getKeyTitle(key) + '.pem');
|
||||
};
|
||||
|
||||
$scope.askDeleteMultipleKeys = function(keys) {
|
||||
$scope.deleteKeysInfo = {
|
||||
'keys': keys
|
||||
};
|
||||
};
|
||||
|
||||
$scope.askApproveMultipleKeys = function(keys) {
|
||||
$scope.approveKeysInfo = {
|
||||
'keys': keys
|
||||
};
|
||||
};
|
||||
|
||||
$scope.askChangeExpirationMultipleKeys = function(keys) {
|
||||
$scope.changeKeysInfo = {
|
||||
'keys': keys
|
||||
};
|
||||
};
|
||||
|
||||
$scope.allKeyFilter = function(key) {
|
||||
return true;
|
||||
};
|
||||
|
||||
$scope.noKeyFilter = function(key) {
|
||||
return false;
|
||||
};
|
||||
|
||||
$scope.unapprovedKeyFilter = function(key) {
|
||||
return !key.approval;
|
||||
};
|
||||
|
||||
$scope.expiredKeyFilter = function(key) {
|
||||
return $scope.getExpirationInfo(key)['className'] == 'expired';
|
||||
};
|
||||
|
||||
$scope.allRequireApproval = function(keys) {
|
||||
for (var i = 0; i < keys.length; ++i) {
|
||||
if (keys[i].approval) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
$scope.allExpired = function(keys) {
|
||||
for (var i = 0; i < keys.length; ++i) {
|
||||
if (!$scope.expiredKeyFilter(keys[i])) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
var forAllKeys = function(keys, error_msg, performer, callback) {
|
||||
var counter = 0;
|
||||
var performAction = function() {
|
||||
if (counter >= keys.length) {
|
||||
loadServiceKeys();
|
||||
callback(true);
|
||||
return;
|
||||
}
|
||||
|
||||
var key = keys[counter];
|
||||
var errorHandler = function(resp) {
|
||||
if (resp.status != 404) {
|
||||
bootbox.alert(error_msg);
|
||||
loadServiceKeys();
|
||||
callback(false);
|
||||
return;
|
||||
}
|
||||
|
||||
performAction();
|
||||
};
|
||||
|
||||
counter++;
|
||||
performer(key).then(performAction, errorHandler);
|
||||
};
|
||||
|
||||
performAction();
|
||||
};
|
||||
|
||||
$scope.deleteKeys = function(info, callback) {
|
||||
var performer = function(key) {
|
||||
var params = {
|
||||
'kid': key.kid
|
||||
};
|
||||
|
||||
return ApiService.deleteServiceKey(null, params);
|
||||
};
|
||||
|
||||
forAllKeys(info.keys, 'Could not delete service key', performer, callback);
|
||||
};
|
||||
|
||||
$scope.approveKeys = function(info, callback) {
|
||||
var performer = function(key) {
|
||||
var params = {
|
||||
'kid': key.kid
|
||||
};
|
||||
|
||||
var data = {
|
||||
'notes': $scope.approveKeysInfo.notes
|
||||
};
|
||||
|
||||
return ApiService.approveServiceKey(data, params);
|
||||
};
|
||||
|
||||
forAllKeys(info.keys, 'Could not approve service key', performer, callback);
|
||||
};
|
||||
|
||||
$scope.changeKeysExpiration = function(info, callback) {
|
||||
var performer = function(key) {
|
||||
var data = {
|
||||
'expiration': info.expiration_date || null
|
||||
};
|
||||
|
||||
var params = {
|
||||
'kid': key.kid
|
||||
};
|
||||
|
||||
return ApiService.updateServiceKey(data, params);
|
||||
};
|
||||
|
||||
forAllKeys(info.keys, 'Could not update service key', performer, callback);
|
||||
};
|
||||
|
||||
$scope.$watch('options.filter', buildOrderedKeys);
|
||||
$scope.$watch('options.predicate', buildOrderedKeys);
|
||||
$scope.$watch('options.reverse', buildOrderedKeys);
|
||||
|
|
Reference in a new issue