From 211929876b84beba330a8fed2130feaed616cd9f Mon Sep 17 00:00:00 2001 From: Aleksander Machniak <alec@alec.pl> Date: Sun, 06 Sep 2015 09:52:31 -0400 Subject: [PATCH] Enigma: GPG keys export --- plugins/enigma/lib/enigma_ui.php | 41 +++++++++++++++++++++++++++++++++++++---- 1 files changed, 37 insertions(+), 4 deletions(-) diff --git a/plugins/enigma/lib/enigma_ui.php b/plugins/enigma/lib/enigma_ui.php index 8bb29d6..455821b 100644 --- a/plugins/enigma/lib/enigma_ui.php +++ b/plugins/enigma/lib/enigma_ui.php @@ -59,6 +59,10 @@ $this->key_import(); break; + case 'export': + $this->key_export(); + break; + case 'generate': $this->key_generate(); break; @@ -260,6 +264,7 @@ } } + $this->rc->output->set_env('rowcount', $size); $this->rc->output->set_env('search_request', $search); $this->rc->output->set_env('pagecount', ceil($listsize/$pagesize)); $this->rc->output->set_env('current_page', $page); @@ -398,6 +403,35 @@ $this->enigma->gettext('userids')) . $table->show($attrib)); */ return $out; + } + + /** + * Key(s) export handler + */ + private function key_export() + { + $keys = rcube_utils::get_input_value('_keys', rcube_utils::INPUT_GPC); + $engine = $this->enigma->load_engine(); + $list = $keys == '*' ? $engine->list_keys() : explode(',', $keys); + + if (is_array($list)) { + $filename = 'export.pgp'; + if (count($list) == 1) { + $filename = (is_object($list[0]) ? $list[0]->id : $list[0]) . '.pgp'; + } + + // send downlaod headers + header('Content-Type: application/pgp-keys'); + header('Content-Disposition: attachment; filename="' . $filename . '"'); + + if ($fp = fopen('php://output', 'w')) { + foreach ($list as $key) { + $engine->export_key(is_object($key) ? $key->id : $key, $fp); + } + } + } + + exit; } /** @@ -594,12 +628,11 @@ */ private function key_delete() { - $keys = rcube_utils::get_input_value('_keys', rcube_utils::INPUT_POST); - - $this->enigma->load_engine(); + $keys = rcube_utils::get_input_value('_keys', rcube_utils::INPUT_POST); + $engine = $this->enigma->load_engine(); foreach ((array)$keys as $key) { - $res = $this->enigma->engine->delete_key($key); + $res = $engine->delete_key($key); if ($res !== true) { $this->rc->output->show_message('enigma.keyremoveerror', 'error'); -- Gitblit v1.9.1