diff --git a/src/app/services/apiService.js b/src/app/services/apiService.js index 685b946a67..6326c6e953 100644 --- a/src/app/services/apiService.js +++ b/src/app/services/apiService.js @@ -27,6 +27,7 @@ listSubvaults: { url: _apiUri + '/ciphers/subvaults', method: 'GET', params: {} }, 'import': { url: _apiUri + '/ciphers/import', method: 'POST', params: {} }, favorite: { url: _apiUri + '/ciphers/:id/favorite', method: 'POST', params: { id: '@id' } }, + putPartial: { url: _apiUri + '/ciphers/:id/partial', method: 'POST', params: { id: '@id' } }, move: { url: _apiUri + '/ciphers/:id/move', method: 'POST', params: { id: '@id' } }, del: { url: _apiUri + '/ciphers/:id/delete', method: 'POST', params: { id: '@id' } } }); diff --git a/src/app/settings.js b/src/app/settings.js index 00329f52c1..5ad8af7f60 100644 --- a/src/app/settings.js +++ b/src/app/settings.js @@ -1,2 +1,2 @@ angular.module("bit") -.constant("appSettings", {"rememberedEmailCookieName":"bit.rememberedEmail","apiUri":"https://api.bitwarden.com","version":"1.9.1","environment":"Production"}); +.constant("appSettings", {"rememberedEmailCookieName":"bit.rememberedEmail","apiUri":"http://localhost:4000","version":"1.9.1","environment":"Development"}); diff --git a/src/app/vault/vaultController.js b/src/app/vault/vaultController.js index aa86ce5027..50f54026fc 100644 --- a/src/app/vault/vaultController.js +++ b/src/app/vault/vaultController.js @@ -62,7 +62,6 @@ editModel.result.then(function (returnVal) { if (returnVal.action === 'edit') { var loginToUpdate = $filter('filter')($scope.logins, { id: returnVal.data.id }, true); - if (loginToUpdate && loginToUpdate.length > 0) { loginToUpdate[0].folderId = returnVal.data.folderId; loginToUpdate[0].name = returnVal.data.name; @@ -70,6 +69,13 @@ loginToUpdate[0].favorite = returnVal.data.favorite; } } + else if (returnVal.action === 'partialEdit') { + var loginToUpdate = $filter('filter')($scope.logins, { id: returnVal.data.id }, true); + if (loginToUpdate && loginToUpdate.length > 0) { + loginToUpdate[0].folderId = returnVal.data.folderId; + loginToUpdate[0].favorite = returnVal.data.favorite; + } + } else if (returnVal.action === 'delete') { var loginToDelete = $filter('filter')($scope.logins, { id: returnVal.data }, true); if (loginToDelete && loginToDelete.length > 0) { @@ -184,7 +190,7 @@ }); modal.result.then(function () { - + }); }; }); diff --git a/src/app/vault/vaultEditLoginController.js b/src/app/vault/vaultEditLoginController.js index f614e7a8ed..4d240cc701 100644 --- a/src/app/vault/vaultEditLoginController.js +++ b/src/app/vault/vaultEditLoginController.js @@ -1,25 +1,46 @@ angular .module('bit.vault') - .controller('vaultEditLoginController', function ($scope, apiService, $uibModalInstance, cryptoService, cipherService, passwordService, loginId, folders, $analytics) { + .controller('vaultEditLoginController', function ($scope, apiService, $uibModalInstance, cryptoService, cipherService, + passwordService, loginId, folders, $analytics) { $analytics.eventTrack('vaultEditLoginController', { category: 'Modal' }); $scope.folders = folders; $scope.login = {}; + $scope.readOnly = false; apiService.logins.get({ id: loginId }, function (login) { $scope.login = cipherService.decryptLogin(login); + $scope.readOnly = !login.Edit; }); $scope.save = function (model) { - var login = cipherService.encryptLogin(model); - $scope.savePromise = apiService.logins.put({ id: loginId }, login, function (loginResponse) { - $analytics.eventTrack('Edited Login'); - var decLogin = cipherService.decryptLogin(loginResponse); - $uibModalInstance.close({ - action: 'edit', - data: decLogin - }); - }).$promise; + if ($scope.readOnly) { + $scope.savePromise = apiService.ciphers.putPartial({ id: loginId }, { + folderId: model.folderId, + favorite: model.favorite + }, function (response) { + $analytics.eventTrack('Partially Edited Login'); + $uibModalInstance.close({ + action: 'partialEdit', + data: { + id: loginId, + favorite: model.favorite, + folderId: model.folderId && model.folderId !== '' ? model.folderId : null + } + }); + }).$promise; + } + else { + var login = cipherService.encryptLogin(model); + $scope.savePromise = apiService.logins.put({ id: loginId }, login, function (loginResponse) { + $analytics.eventTrack('Edited Login'); + var decLogin = cipherService.decryptLogin(loginResponse); + $uibModalInstance.close({ + action: 'edit', + data: decLogin + }); + }).$promise; + } }; $scope.generatePassword = function () { diff --git a/src/app/vault/views/vaultEditLogin.html b/src/app/vault/views/vaultEditLogin.html index 56c244a123..ffbcd41d46 100644 --- a/src/app/vault/views/vaultEditLogin.html +++ b/src/app/vault/views/vaultEditLogin.html @@ -1,6 +1,8 @@