From a0dfcb14a8d51d5cb9e60ec90af2ef5b7a446ca1 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Tue, 18 Aug 2015 07:41:44 -0400
Subject: [PATCH] Enigma: Optional server-side key generation

---
 plugins/enigma/lib/enigma_driver_gnupg.php |   33 ++++++++++++++++++++++++++++++---
 1 files changed, 30 insertions(+), 3 deletions(-)

diff --git a/plugins/enigma/lib/enigma_driver_gnupg.php b/plugins/enigma/lib/enigma_driver_gnupg.php
index b9376e1..c7fc2dc 100644
--- a/plugins/enigma/lib/enigma_driver_gnupg.php
+++ b/plugins/enigma/lib/enigma_driver_gnupg.php
@@ -188,8 +188,32 @@
         return $list;
     }
 
+    /**
+     * Key pair generation.
+     *
+     * @param array Key/User data (user, email, password, size)
+     *
+     * @return mixed Key (enigma_key) object or enigma_error
+     */
     public function gen_key($data)
     {
+        try {
+            $keygen = new Crypt_GPG_KeyGenerator(array(
+                    'homedir' => $this->homedir,
+                    // 'binary'  => '/usr/bin/gpg2',
+                    // 'debug'   => true,
+            ));
+
+            $key = $keygen
+                ->setExpirationDate(0)
+                ->setPassphrase($data['password'])
+                ->generateKey($data['user'], $data['email']);
+
+            return $this->parse_key($key);
+        }
+        catch (Exception $e) {
+            return $this->get_error_from_exception($e);
+        }
     }
 
     public function delete_key($keyid)
@@ -263,12 +287,15 @@
             $data['bad']     = $e->getBadPassphrases();
             $data['missing'] = $e->getMissingPassphrases();
         }
-        else if ($e instanceof Crypt_GPG_NoDataException)
+        else if ($e instanceof Crypt_GPG_NoDataException) {
             $error = enigma_error::E_NODATA;
-        else if ($e instanceof Crypt_GPG_DeletePrivateKeyException)
+        }
+        else if ($e instanceof Crypt_GPG_DeletePrivateKeyException) {
             $error = enigma_error::E_DELKEY;
-        else
+        }
+        else {
             $error = enigma_error::E_INTERNAL;
+        }
 
         $msg = $e->getMessage();
 

--
Gitblit v1.9.1