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