2 commits - plugins/calendar plugins/kolab_files plugins/libkolab

Aleksander Machniak machniak at kolabsys.com
Thu Sep 26 14:55:12 CEST 2013


 plugins/calendar/drivers/kolab/kolab_driver.php |   11 +---
 plugins/kolab_files/lib/kolab_files_engine.php  |   34 ++++--------
 plugins/kolab_files/package.xml                 |    4 +
 plugins/libkolab/config.inc.php.dist            |    8 +--
 plugins/libkolab/lib/kolab_storage_folder.php   |    4 -
 plugins/libkolab/libkolab.php                   |   64 ++++++++++++++++++++++++
 6 files changed, 87 insertions(+), 38 deletions(-)

New commits:
commit 1fd3b0a5e760b621741f42cbab91f13817282e2b
Merge: 5327dfc c891f82
Author: Aleksander Machniak <machniak at kolabsys.com>
Date:   Thu Sep 26 14:54:55 2013 +0200

    Merge branch 'master' of ssh://git.kolab.org/git/roundcube



commit 5327dfc64139839479d76fe76bef039b3075142e
Author: Aleksander Machniak <machniak at kolabsys.com>
Date:   Thu Sep 26 14:53:52 2013 +0200

    Implemented unified cross-plugin HTTP_Request2 object configuration (Request #2149)

diff --git a/plugins/calendar/drivers/kolab/kolab_driver.php b/plugins/calendar/drivers/kolab/kolab_driver.php
index 7ae8026..66a497b 100644
--- a/plugins/calendar/drivers/kolab/kolab_driver.php
+++ b/plugins/calendar/drivers/kolab/kolab_driver.php
@@ -874,8 +874,6 @@ class kolab_driver extends calendar_driver
    */
   public function get_freebusy_list($email, $start, $end)
   {
-    require_once('HTTP/Request2.php');
-
     if (empty($email)/* || $end < time()*/)
       return false;
 
@@ -888,14 +886,11 @@ class kolab_driver extends calendar_driver
 
     // ask kolab server first
     try {
-      $rcmail = rcube::get_instance();
-      $request = new HTTP_Request2(kolab_storage::get_freebusy_url($email));
-      $request->setConfig(array(
+      $request_config = array(
         'store_body'       => true,
         'follow_redirects' => true,
-        'ssl_verify_peer'  => $rcmail->config->get('kolab_ssl_verify_peer', true),
-      ));
-
+      );
+      $request  = libkolab::http_request(kolab_storage::get_freebusy_url($email), 'GET', $request_config);
       $response = $request->send();
 
       // authentication required
diff --git a/plugins/kolab_files/lib/kolab_files_engine.php b/plugins/kolab_files/lib/kolab_files_engine.php
index 419dcb0..fc14e80 100644
--- a/plugins/kolab_files/lib/kolab_files_engine.php
+++ b/plugins/kolab_files/lib/kolab_files_engine.php
@@ -581,35 +581,23 @@ class kolab_files_engine
         $url = $this->url . '/api/';
 
         if (!$this->request) {
-            require_once 'HTTP/Request2.php';
+            $config = array(
+                'store_body'       => true,
+                'follow_redirects' => true,
+            );
 
+            $this->request = libkolab::http_request($url, 'GET', $config);
+        }
+        else {
+            // cleanup
             try {
-                $request = new HTTP_Request2();
-                $request->setConfig(array(
-                    'store_body'       => true,
-                    'follow_redirects' => true,
-                    'ssl_verify_peer'  => $this->rc->config->get('kolab_ssl_verify_peer', true),
-                    'ssl_verify_host'  => $this->rc->config->get('kolab_ssl_verify_host', true),
-                ));
-
-                $this->request = $request;
+                $this->request->setBody('');
+                $this->request->setUrl($url);
+                $this->request->setMethod(HTTP_Request2::METHOD_GET);
             }
             catch (Exception $e) {
                 rcube::raise_error($e, true, true);
             }
-
-            // proxy User-Agent string
-            $this->request->setHeader('user-agent', $_SERVER['HTTP_USER_AGENT']);
-        }
-
-        // cleanup
-        try {
-            $this->request->setBody('');
-            $this->request->setUrl($url);
-            $this->request->setMethod(HTTP_Request2::METHOD_GET);
-        }
-        catch (Exception $e) {
-            rcube::raise_error($e, true, true);
         }
 
         if ($token) {
diff --git a/plugins/kolab_files/package.xml b/plugins/kolab_files/package.xml
index dbe6e82..8ac6e5b 100644
--- a/plugins/kolab_files/package.xml
+++ b/plugins/kolab_files/package.xml
@@ -68,6 +68,10 @@
 			<pearinstaller>
 				<min>1.7.0</min>
 			</pearinstaller>
+            <package>
+                <name>libkolab</name>
+                <uri>http://kolabsys.com</uri>
+            </package>
 		</required>
 	</dependencies>
 	<phprelease/>
diff --git a/plugins/libkolab/config.inc.php.dist b/plugins/libkolab/config.inc.php.dist
index aa0c8d0..6260f52 100644
--- a/plugins/libkolab/config.inc.php.dist
+++ b/plugins/libkolab/config.inc.php.dist
@@ -12,9 +12,6 @@ $rcmail_config['kolab_format_version']  = '3.0';
 // Defaults to https://<imap-server->/freebusy
 $rcmail_config['kolab_freebusy_server'] = 'https://<some-host>/<freebusy-path>';
 
-// Set this option to disable SSL certificate checks when triggering Free/Busy (enabled by default)
-$rcmail_config['kolab_ssl_verify_peer'] = false;
-
 // Enables listing of only subscribed folders. This e.g. will limit
 // folders in calendar view or available addressbooks
 $rcmail_config['kolab_use_subscriptions'] = false;
@@ -23,4 +20,7 @@ $rcmail_config['kolab_use_subscriptions'] = false;
 // for displaying resource folder names (experimental!)
 $rcmail_config['kolab_custom_display_names'] = false;
 
-?>
+// Configuration of HTTP requests.
+// See http://pear.php.net/manual/en/package.http.http-request2.config.php
+// for list of supported configuration options (array keys)
+$rcmail_config['kolab_http_request'] = array();
diff --git a/plugins/libkolab/lib/kolab_storage_folder.php b/plugins/libkolab/lib/kolab_storage_folder.php
index ddb5b3c..7da57ff 100644
--- a/plugins/libkolab/lib/kolab_storage_folder.php
+++ b/plugins/libkolab/lib/kolab_storage_folder.php
@@ -1110,9 +1110,7 @@ class kolab_storage_folder
         require_once('HTTP/Request2.php');
 
         try {
-            $rcmail = rcube::get_instance();
-            $request = new HTTP_Request2($url);
-            $request->setConfig(array('ssl_verify_peer' => $rcmail->config->get('kolab_ssl_verify_peer', true)));
+            $request = libkolab::http_request($url);
 
             // set authentication credentials
             if ($auth_user && $auth_passwd)
diff --git a/plugins/libkolab/libkolab.php b/plugins/libkolab/libkolab.php
index b5ff968..b5d1db7 100644
--- a/plugins/libkolab/libkolab.php
+++ b/plugins/libkolab/libkolab.php
@@ -27,6 +27,8 @@
 
 class libkolab extends rcube_plugin
 {
+    static $http_requests = array();
+
     /**
      * Required startup method of a Roundcube plugin
      */
@@ -59,4 +61,66 @@ class libkolab extends rcube_plugin
         $p['fetch_headers'] = trim($p['fetch_headers'] .' X-KOLAB-TYPE X-KOLAB-MIME-VERSION');
         return $p;
     }
+
+    /**
+     * Wrapper function to load and initalize the HTTP_Request2 Object
+     *
+     * @param string|Net_Url2 Request URL
+     * @param string          Request method ('OPTIONS','GET','HEAD','POST','PUT','DELETE','TRACE','CONNECT')
+     * @param array           Configuration for this Request instance, that will be merged
+     *                        with default configuration
+     *
+     * @return HTTP_Request2 Request object
+     */
+    public static function http_request($url = '', $method = 'GET', $config = array())
+    {
+        $rcube       = rcube::get_instance();
+        $http_config = (array) $rcube->config->get('kolab_http_request');
+
+        // deprecated configuration options
+        if (empty($$http_config)) {
+            foreach (array('ssl_verify_peer', 'ssl_verify_host') as $option) {
+                $value = $rcube->config->get('kolab_' . $option, true);
+                if (is_bool($value)) {
+                    $http_config[$option] = $value;
+                }
+            }
+        }
+
+        if (!empty($config)) {
+            $http_config = array_merge($http_config, $config);
+        }
+
+        $key = md5(serialize($http_config));
+
+        if (!($request = self::$http_requests[$key])) {
+            // load HTTP_Request2
+            require_once 'HTTP/Request2.php';
+
+            try {
+                $request = new HTTP_Request2();
+                $request->setConfig($http_config);
+            }
+            catch (Exception $e) {
+                rcube::raise_error($e, true, true);
+            }
+
+            // proxy User-Agent string
+            $request->setHeader('user-agent', $_SERVER['HTTP_USER_AGENT']);
+
+            self::$http_requests[$key] = $request;
+        }
+
+        // cleanup
+        try {
+            $request->setBody('');
+            $request->setUrl($url);
+            $request->setMethod($method);
+        }
+        catch (Exception $e) {
+            rcube::raise_error($e, true, true);
+        }
+
+        return $request;
+    }
 }




More information about the commits mailing list