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