From f6807bcc4c60def86e82a6c36914f0d55af04a33 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Fri, 14 Jun 2019 19:06:32 +0200 Subject: [PATCH] Added 'keyservers' option to define list of HKP servers for Enigma/Mailvelope (#6326) --- CHANGELOG | 1 + config/defaults.inc.php | 4 ++++ plugins/enigma/lib/enigma_ui.php | 2 ++ program/js/app.js | 4 ++-- program/lib/Roundcube/rcube_config.php | 20 ++++++++++++++++++++ program/steps/mail/compose.inc | 1 + 6 files changed, 30 insertions(+), 2 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 21a543f3b..a2523573d 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -10,6 +10,7 @@ CHANGELOG Roundcube Webmail - Support PECL memcached extension as a session and cache storage driver (experimental) - installto.sh: Add possibility to run the update even on the up-to-date installation (#6533) - Plugin API: Add 'render_folder_selector' hook +- Added 'keyservers' option to define list of HKP servers for Enigma/Mailvelope (#6326) - Redis: Support connection to unix socket - Elastic: Add Prev/Next buttons on message page toolbar (#6648) - Elastic: Close search options on Enter key press in quick-search input (#6660) diff --git a/config/defaults.inc.php b/config/defaults.inc.php index 7ae6b117b..4808bf1af 100644 --- a/config/defaults.inc.php +++ b/config/defaults.inc.php @@ -813,6 +813,10 @@ $config['compose_responses_static'] = array( // array('name' => 'Canned Response 2', 'text' => 'Static Response Two'), ); +// List of HKP key servers for PGP public key lookups in Enigma/Mailvelope +// Default: array("keys.fedoraproject.org", "keybase.io") +$config['keyservers'] = array(); + // ---------------------------------- // ADDRESSBOOK SETTINGS // ---------------------------------- diff --git a/plugins/enigma/lib/enigma_ui.php b/plugins/enigma/lib/enigma_ui.php index f0e97b4e2..00156c69c 100644 --- a/plugins/enigma/lib/enigma_ui.php +++ b/plugins/enigma/lib/enigma_ui.php @@ -138,6 +138,8 @@ class enigma_ui $this->enigma->include_script('enigma.js'); + $this->rc->output->set_env('keyservers', $this->rc->config->keyservers()); + $this->js_loaded = true; } diff --git a/program/js/app.js b/program/js/app.js index a548d04f1..668474b20 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -3977,7 +3977,7 @@ function rcube_webmail() { // query with publickey.js var deferreds = [], - pk = new PublicKey(), + pk = new PublicKey(this.env.keyservers), lock = ref.display_message('', 'loading'); $.each(emails, function(i, email) { @@ -4094,7 +4094,7 @@ function rcube_webmail() ul.on('click', 'button.importkey', function() { var btn = $(this), keyid = btn.attr('rel'), - pk = new PublicKey(), + pk = new PublicKey(ref.env.keyservers), lock = ref.display_message('', 'loading'); // fetch from keyserver and import to Mailvelope keyring diff --git a/program/lib/Roundcube/rcube_config.php b/program/lib/Roundcube/rcube_config.php index 493e65783..9c22fdb2b 100644 --- a/program/lib/Roundcube/rcube_config.php +++ b/program/lib/Roundcube/rcube_config.php @@ -578,6 +578,26 @@ class rcube_config return "\n"; } + /** + * Returns list of configured PGP key servers + * + * @return array|null List of keyservers' URLs + */ + public function keyservers() + { + $list = (array) $this->prop['keyservers']; + + foreach ($list as $idx => $host) { + if (!preg_match('|^[a-z]://|', $host)) { + $host = "https://$host"; + } + + $list[$idx] = slashify($host); + } + + return !empty($list) ? $list : null; + } + /** * Return the mail domain configured for the given host * diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc index 08bce3bce..01bf555b6 100644 --- a/program/steps/mail/compose.inc +++ b/program/steps/mail/compose.inc @@ -92,6 +92,7 @@ $OUTPUT->set_env('sig_below', $RCMAIL->config->get('sig_below')); $OUTPUT->set_env('save_localstorage', (bool)$RCMAIL->config->get('compose_save_localstorage')); $OUTPUT->set_env('is_sent', false); $OUTPUT->set_env('mimetypes', rcmail_supported_mimetypes()); +$OUTPUT->set_env('keyservers', $RCMAIL->config->keyservers()); $drafts_mbox = $RCMAIL->config->get('drafts_mbox'); $config_show_sig = $RCMAIL->config->get('show_sig', 1);