From 1cb97c7efdfe5cd17375d7882e7d90e88e0218d3 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Sun, 21 Jan 2018 12:14:33 +0100 Subject: [PATCH] Add 'encryption' block to identity settings If Mailvelope is installed, this box will become visible and offer functions to generate a key pair for the selected identity or list existing private keys. --- program/js/app.js | 125 +++++++++++++++++++++++ program/localization/en_US/labels.inc | 7 ++ program/localization/en_US/messages.inc | 1 + program/steps/settings/edit_identity.inc | 13 ++- skins/larry/settings.css | 15 +++ 5 files changed, 158 insertions(+), 3 deletions(-) diff --git a/program/js/app.js b/program/js/app.js index 26a6f6fb7..4ff79be89 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -511,6 +511,8 @@ function rcube_webmail() // initialize HTML editor this.editor_init(this.env.editor_config, 'rcmfd_signature'); + + this.check_mailvelope(this.env.action); } else if (this.env.action == 'folders') { this.enable_command('subscribe', 'unsubscribe', 'create-folder', 'rename-folder', true); @@ -3638,6 +3640,8 @@ function rcube_webmail() if (args.ret && args.action == 'toggle-editor') ref.enable_command('compose-encrypted', !args.props.html); }); + } else if (action == 'edit-identity') { + ref.mailvelope_identity_keygen(); } }; @@ -4000,6 +4004,127 @@ function rcube_webmail() }; + // enable key management for identity + this.mailvelope_identity_keygen = function() + { + var container = $(this.gui_objects.editform).find('.identity-encryption').first(); + var identity_email = $.trim($(this.gui_objects.editform).find('.ff_email').val()); + if (!container.length || !identity_email || !this.mailvelope_keyring.createKeyGenContainer) + return; + + var key_fingerprint; + this.mailvelope_keyring.validKeyForAddress([identity_email]) + .then(function(keys) { + var private_keys = []; + + if (keys && keys[identity_email] && Array.isArray(keys[identity_email].keys)) { + var checks = []; + for (var j=0; j < keys[identity_email].keys.length; j++) { + checks.push((function(key) { + return ref.mailvelope_keyring.hasPrivateKey(key.fingerprint) + .then(function(found) { + if (found) { + private_keys.push(key); + } + }); + })(keys[identity_email].keys[j])); + } + return Promise.all(checks) + .then(function() { + return private_keys; + }); + } + + return private_keys; + }).then(function(private_keys) { + var content = container.find('.identity-encryption-block').empty(); + if (private_keys && private_keys.length) { + // show private key information + $('

').text(ref.get_label('encryptionprivkeysinmailvelope').replace('$nr', private_keys.length)).appendTo(content); + var ul = $('