diff --git a/confidant/public/modules/resources/controllers/ServiceDetailsCtrl.js b/confidant/public/modules/resources/controllers/ServiceDetailsCtrl.js index 5b3b2062..21a5f142 100644 --- a/confidant/public/modules/resources/controllers/ServiceDetailsCtrl.js +++ b/confidant/public/modules/resources/controllers/ServiceDetailsCtrl.js @@ -30,19 +30,11 @@ if (!$scope.service.credentials) { $scope.service.credentials = []; } - var credentialList = []; - for (var i = $scope.$parent.credentialList.length; i--;) { - if ($scope.service.credentials.indexOf($scope.$parent.credentialList[i].id) > -1) { - credentialList.push($scope.$parent.credentialList[i]); - } - } - $scope.service.credentialList = credentialList; }, function(res) { if (res.status == 404) { $scope.service = { id: $stateParams.serviceId, - credentials: [], - credentialList: [] + credentials: [] }; $scope.missingService = true; } @@ -51,14 +43,13 @@ $scope.shown = true; $scope.service = { id: '', - credentials: [], - credentialList: [] + credentials: [] }; $scope.newService = true; } $scope.showCredential = function(credential) { - return $scope.service.credentialList[credential.id]; + return $scope.service.credentials[credential.id]; } $scope.filterCredentials = function(credential) { @@ -66,14 +57,14 @@ }; $scope.deleteCredential = function($$hashKey) { - var filtered = $filter('filter')($scope.service.credentialList, {'$$hashKey': $$hashKey}); + var filtered = $filter('filter')($scope.service.credentials, {'$$hashKey': $$hashKey}); if (filtered.length) { filtered[0].isDeleted = true; } }; $scope.addCredential = function() { - $scope.service.credentialList.push({ + $scope.service.credentials.push({ id: '', name: '', isNew: true @@ -81,13 +72,13 @@ }; $scope.cancel = function() { - for (var i = $scope.service.credentialList.length; i--;) { - var credential = $scope.service.credentialList[i]; + for (var i = $scope.service.credentials.length; i--;) { + var credential = $scope.service.credentials[i]; if (credential.isDeleted) { delete credential.isDeleted; } if (credential.isNew) { - $scope.service.credentialList.splice(i, 1); + $scope.service.credentials.splice(i, 1); } }; }; @@ -99,8 +90,8 @@ _service.credentials = []; $scope.saveError = ''; // Ensure credentials are unique and flatten credentiaList into a list of ids. - for (var i = $scope.service.credentialList.length; i--;) { - var credential = $scope.service.credentialList[i]; + for (var i = $scope.service.credentials.length; i--;) { + var credential = $scope.service.credentials[i]; if (credential.isDeleted) { continue; } @@ -113,10 +104,9 @@ Service.update({'id': $scope.service.id}, _service).$promise.then(function(newService) { $scope.$emit('updateServiceList'); deferred.resolve(); + $scope.service = newService; if ($scope.newService) { $location.path('/resources/service/' + newService.id); - } else { - $scope.service = newService; } }, function(res) { $scope.saveError = res; diff --git a/confidant/public/modules/resources/views/service-details.html b/confidant/public/modules/resources/views/service-details.html index 615b7091..1037b733 100644 --- a/confidant/public/modules/resources/views/service-details.html +++ b/confidant/public/modules/resources/views/service-details.html @@ -7,13 +7,16 @@
-
+
- - {{ credential.name }} - + + {{ credential.name }} + + (Revision: {{ credential.revision }}) +
+
+ Del
- Del
diff --git a/confidant/routes/v1.py b/confidant/routes/v1.py index 5a4b5c95..654ca8a1 100644 --- a/confidant/routes/v1.py +++ b/confidant/routes/v1.py @@ -153,9 +153,8 @@ def get_service(id): if (service.data_type != 'service' and service.data_type != 'archive-service'): return jsonify({}), 404 - credential_pairs = {} - for credential in service.credentials: - cred = Credential.get(credential) + credentials = [] + for cred in Credential.batch_get(service.credentials): try: data_key = keymanager.get_archive_datakey(cred.data_key_revision) except KeyError: @@ -163,11 +162,15 @@ def get_service(id): cipher = AESCipher(data_key) _credential_pairs = cipher.decrypt(cred.credential_pairs) _credential_pairs = json.loads(_credential_pairs) - credential_pairs.update(_credential_pairs) + credentials.append({ + 'id': cred.id, + 'name': cred.name, + 'revision': cred.revision, + 'credential_pairs': _credential_pairs + }) return jsonify({ 'id': service.id, - 'credentials': list(service.credentials), - 'credential_pairs': credential_pairs, + 'credentials': credentials, 'revision': service.revision, 'modified_date': service.modified_date, 'modified_by': service.modified_by @@ -239,10 +242,26 @@ def map_service_credentials(id): except PutError as e: log.error(e) return jsonify({'error': 'Failed to update active service.'}), 500 + credentials = [] + for credential_id in service.credentials: + cred = Credential.get(credential_id) + try: + data_key = keymanager.get_archive_datakey(cred.data_key_revision) + except KeyError: + return jsonify({'error': 'Decryption error.'}), 500 + cipher = AESCipher(data_key) + _credential_pairs = cipher.decrypt(cred.credential_pairs) + _credential_pairs = json.loads(_credential_pairs) + credentials.append({ + 'id': cred.id, + 'name': cred.name, + 'revision': cred.revision, + 'credential_pairs': _credential_pairs + }) return jsonify({ 'id': service.id, 'revision': service.revision, - 'credentials': list(service.credentials), + 'credentials': credentials, 'modified_date': service.modified_date, 'modified_by': service.modified_by })