From 97d853738a59c55a6a44aa4fca622f8af05f0de6 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Wed, 16 Jul 2014 08:57:29 -0400
Subject: [PATCH] Merge pull request #203 from mdamt/gearman-password

---
 plugins/password/config.inc.php.dist |    5 +++++
 plugins/password/drivers/gearman.php |   50 ++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 55 insertions(+), 0 deletions(-)

diff --git a/plugins/password/config.inc.php.dist b/plugins/password/config.inc.php.dist
index 16b7f93..d979a19 100644
--- a/plugins/password/config.inc.php.dist
+++ b/plugins/password/config.inc.php.dist
@@ -367,3 +367,8 @@
 $config['password_smb_host'] = 'localhost';
 // Location of smbpasswd binary
 $config['password_smb_cmd'] = '/usr/bin/smbpasswd';
+
+// gearman driver options
+// ---------------------
+// Gearman host (default: localhost)
+$config['password_gearman_host'] = 'localhost';
diff --git a/plugins/password/drivers/gearman.php b/plugins/password/drivers/gearman.php
new file mode 100644
index 0000000..6c1ad3c
--- /dev/null
+++ b/plugins/password/drivers/gearman.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Gearman Password Driver
+ *
+ * Payload is json string containing username, oldPassword and newPassword
+ * Return value is a json string saying result: true if success.
+ *
+ * @version 1.0
+ * @author Mohammad Anwari <mdamt@mdamt.net>
+ */
+
+class rcube_gearman_password
+{
+  function save($currpass, $newpass)
+  {
+    $user = $_SESSION['username'];
+    $rcmail = rcmail::get_instance();
+
+    if (extension_loaded('gearman')) {
+      $success = false;
+      $gmc= new GearmanClient();
+
+      $gmc->addServer($rcmail->config->get('password_gearman_host'));
+      $payload = array("username" => $user, "oldPassword" => $currpass, "newPassword" => $newpass);
+      $result = $gmc->doNormal("setPassword", json_encode($payload));
+      $success = json_decode($result);
+      if ($success->result == 1) {
+        return PASSWORD_SUCCESS;
+      } else {
+        rcube::raise_error(array(
+          'code' => 600,
+          'type' => 'php',
+          'file' => __FILE__, 'line' => __LINE__,
+          'message' => "Password plugin: Gearman authentication failed for user $user: $error"
+        ), true, false);
+      }
+    }
+    else {
+      rcube::raise_error(array(
+        'code' => 600,
+        'type' => 'php',
+        'file' => __FILE__, 'line' => __LINE__,
+        'message' => "Password plugin: PECL Gearman module not loaded"
+      ), true, false);
+    }
+
+    return PASSWORD_ERROR;
+  }
+}
+?>

--
Gitblit v1.9.1