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