diff --git a/src/app/services/cipherService.js b/src/app/services/cipherService.js index 855ef6df..94e0d955 100644 --- a/src/app/services/cipherService.js +++ b/src/app/services/cipherService.js @@ -43,6 +43,7 @@ angular login.password = loginData.Password && loginData.Password !== '' ? cryptoService.decrypt(loginData.Password, key) : null; login.notes = loginData.Notes && loginData.Notes !== '' ? cryptoService.decrypt(loginData.Notes, key) : null; login.totp = loginData.Totp && loginData.Totp !== '' ? cryptoService.decrypt(loginData.Totp, key) : null; + login.fields = _service.decryptFields(key, loginData.Fields); } if (!encryptedLogin.Attachments) { @@ -134,6 +135,28 @@ angular return deferred.promise; }; + _service.decryptFields = function (key, encryptedFields) { + var unencryptedFields = []; + + if (encryptedFields) { + for (var i = 0; i < encryptedFields.length; i++) { + unencryptedFields.push(_service.decryptField(key, encryptedFields[i])); + } + } + + return unencryptedFields; + }; + + _service.decryptField = function (key, encryptedField) { + if (!encryptedField) throw "encryptedField is undefined or null"; + + return { + type: encryptedField.Type.toString(), + name: encryptedField.Name && encryptedField.Name !== '' ? cryptoService.decrypt(encryptedField.Name, key) : null, + value: encryptedField.Value && encryptedField.Value !== '' ? cryptoService.decrypt(encryptedField.Value, key) : null + }; + }; + _service.decryptFolders = function (encryptedFolders) { if (!encryptedFolders) throw "encryptedFolders is undefined or null"; @@ -234,7 +257,8 @@ angular username: !unencryptedLogin.username || unencryptedLogin.username === '' ? null : cryptoService.encrypt(unencryptedLogin.username, key), password: !unencryptedLogin.password || unencryptedLogin.password === '' ? null : cryptoService.encrypt(unencryptedLogin.password, key), totp: !unencryptedLogin.totp || unencryptedLogin.totp === '' ? null : cryptoService.encrypt(unencryptedLogin.totp, key) - } + }, + fields: _service.encryptFields(unencryptedLogin.fields, key) }; if (unencryptedLogin.attachments && attachments) { @@ -274,6 +298,33 @@ angular return deferred.promise; }; + _service.encryptFields = function (unencryptedFields, key) { + if (!unencryptedFields || !unencryptedFields.length) { + return null; + } + + var encFields = []; + for (var i = 0; i < unencryptedFields.length; i++) { + if (!unencryptedFields[i]) { + continue; + } + + encFields.push(_service.encryptField(unencryptedFields[i], key)); + } + + return encFields; + }; + + _service.encryptField = function (unencryptedField, key) { + if (!unencryptedField) throw "unencryptedField is undefined or null"; + + return { + type: parseInt(unencryptedField.type), + name: unencryptedField.name ? cryptoService.encrypt(unencryptedField.name, key) : null, + value: unencryptedField.value ? cryptoService.encrypt(unencryptedField.value.toString(), key) : null + }; + }; + _service.encryptFolders = function (unencryptedFolders, key) { if (!unencryptedFolders) throw "unencryptedFolders is undefined or null"; diff --git a/src/app/vault/vaultEditLoginController.js b/src/app/vault/vaultEditLoginController.js index 38f699c9..741b4381 100644 --- a/src/app/vault/vaultEditLoginController.js +++ b/src/app/vault/vaultEditLoginController.js @@ -54,6 +54,21 @@ } }; + $scope.addField = function () { + $scope.login.fields.push({ + type: 0, + name: null, + value: null + }); + } + + $scope.removeField = function (field) { + var index = $scope.login.fields.indexOf(field); + if (index > -1) { + $scope.login.fields.splice(index, 1); + } + } + $scope.clipboardSuccess = function (e) { e.clearSelection(); selectPassword(e); diff --git a/src/app/vault/views/vaultEditLogin.html b/src/app/vault/views/vaultEditLogin.html index f9374b9e..bfcb6ff2 100644 --- a/src/app/vault/views/vaultEditLogin.html +++ b/src/app/vault/views/vaultEditLogin.html @@ -112,6 +112,51 @@ +

+ Custom Fields + + Add + +

+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ +
+ + +
+ +
+
+
+
+ + + Remove + +
+