Skip to content

Commit

Permalink
Merge pull request #17 from lyft/LYFT-27559-credential-revision-data-…
Browse files Browse the repository at this point in the history
…for-services

Lyft 27559 credential revision data for services
  • Loading branch information
ryan-lane committed Feb 23, 2015
2 parents e433b05 + 28134be commit 3317f72
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand All @@ -51,43 +43,42 @@
$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) {
return credential.isDeleted !== true;
};

$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
});
};

$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);
}
};
};
Expand All @@ -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;
}
Expand All @@ -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;
Expand Down
13 changes: 8 additions & 5 deletions confidant/public/modules/resources/views/service-details.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,16 @@
</div>
<div class="form-group">
<label for="credentialInputs">Credentials</label>
<div ng-repeat="credential in service.credentialList | filter:filterCredentials" class="row">
<div ng-repeat="credential in service.credentials | filter:filterCredentials" class="row">
<div class="col-md-8">
<span editable-select="credential.id" e-ng-selected="credential.id == c.id" e-name="{{ credential.id }}SelectMenu" e-ng-options="c.id as c.name for c in $parent.credentialList">
{{ credential.name }}
</span>
<span editable-select="credential.id" e-ng-selected="credential.id == c.id" e-name="{{ credential.id }}SelectMenu" e-ng-options="c.id as c.name for c in $parent.credentialList">
{{ credential.name }}
</span>
<span ng-hide="editableForm.$visible">(Revision: {{ credential.revision }})</span>
</div>
<div class="col-md-4">
<span type="button" ng-click="deleteCredential(credential.$$hashKey)" class="btn btn-loud" ng-show="editableForm.$visible">Del</span>
</div>
<span type="button" ng-click="deleteCredential(credential.$$hashKey)" class="btn btn-loud col-md-1" ng-show="editableForm.$visible">Del</span>
</div>
</div>
<div class="form-group" ng-hide="newService || missingService">
Expand Down
33 changes: 26 additions & 7 deletions confidant/routes/v1.py
Original file line number Diff line number Diff line change
Expand Up @@ -153,21 +153,24 @@ 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:
return jsonify({'error': 'Decryption error.'}), 500
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
Expand Down Expand Up @@ -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
})
Expand Down

0 comments on commit 3317f72

Please sign in to comment.