summaryrefslogtreecommitdiff
path: root/program/lib/Roundcube/rcube_imap.php
diff options
context:
space:
mode:
authorThomas Bruederli <thomas@roundcube.net>2014-08-07 17:04:05 +0200
committerThomas Bruederli <thomas@roundcube.net>2014-08-07 17:04:05 +0200
commitf954922c03e30bfe06b60f35336f9274fa45ee4e (patch)
tree4a47d56752e20dbd5a750d0d3f0d16ed13a1f8f1 /program/lib/Roundcube/rcube_imap.php
parent1db9a4931cd8f33a0c7305c4ed0e90e32c83db57 (diff)
- Implemented 'storage_connected' API hook after successful IMAP login (#1490025)
- Added config option 'imap_log_session' to enable Roundcube <-> IMAP session ID logging - Added config option 'log_session_id' to control the lengh of the session identifer in logs
Diffstat (limited to 'program/lib/Roundcube/rcube_imap.php')
-rw-r--r--program/lib/Roundcube/rcube_imap.php24
1 files changed, 19 insertions, 5 deletions
diff --git a/program/lib/Roundcube/rcube_imap.php b/program/lib/Roundcube/rcube_imap.php
index 79a8973db..ec961c8d1 100644
--- a/program/lib/Roundcube/rcube_imap.php
+++ b/program/lib/Roundcube/rcube_imap.php
@@ -56,6 +56,7 @@ class rcube_imap extends rcube_storage
*/
protected $icache = array();
+ protected $plugins;
protected $list_page = 1;
protected $delimiter;
protected $namespace;
@@ -82,6 +83,7 @@ class rcube_imap extends rcube_storage
public function __construct()
{
$this->conn = new rcube_imap_generic();
+ $this->plugins = rcube::get_instance()->plugins;
// Set namespace and delimiter from session,
// so some methods would work before connection
@@ -147,7 +149,7 @@ class rcube_imap extends rcube_storage
$attempt = 0;
do {
- $data = rcube::get_instance()->plugins->exec_hook('storage_connect',
+ $data = $this->plugins->exec_hook('storage_connect',
array_merge($this->options, array('host' => $host, 'user' => $user,
'attempt' => ++$attempt)));
@@ -170,8 +172,20 @@ class rcube_imap extends rcube_storage
$this->connect_done = true;
if ($this->conn->connected()) {
+ // check for session identifier
+ $session = null;
+ if (preg_match('/\s+SESSIONID=([^=\s]+)/', $this->conn->result, $m)) {
+ $session = $m[1];
+ }
+
// get namespace and delimiter
$this->set_env();
+
+ // trigger post-connect hook
+ $this->plugins->exec_hook('storage_connected', array(
+ 'host' => $host, 'user' => $user, 'session' => $session
+ ));
+
return true;
}
// write error log
@@ -1506,7 +1520,7 @@ class rcube_imap extends rcube_storage
$folder = $this->folder;
}
- $plugin = rcube::get_instance()->plugins->exec_hook('imap_search_before', array(
+ $plugin = $this->plugins->exec_hook('imap_search_before', array(
'folder' => $folder,
'search' => $search,
'charset' => $charset,
@@ -2501,7 +2515,7 @@ class rcube_imap extends rcube_storage
// increase messagecount of the target folder
$this->set_messagecount($folder, 'ALL', 1);
- rcube::get_instance()->plugins->exec_hook('message_saved', array(
+ $this->plugins->exec_hook('message_saved', array(
'folder' => $folder,
'message' => $message,
'headers' => $headers,
@@ -2777,7 +2791,7 @@ class rcube_imap extends rcube_storage
}
// Give plugins a chance to provide a list of folders
- $data = rcube::get_instance()->plugins->exec_hook('storage_folders',
+ $data = $this->plugins->exec_hook('storage_folders',
array('root' => $root, 'name' => $name, 'filter' => $filter, 'mode' => 'LSUB'));
if (isset($data['folders'])) {
@@ -2909,7 +2923,7 @@ class rcube_imap extends rcube_storage
}
// Give plugins a chance to provide a list of folders
- $data = rcube::get_instance()->plugins->exec_hook('storage_folders',
+ $data = $this->plugins->exec_hook('storage_folders',
array('root' => $root, 'name' => $name, 'filter' => $filter, 'mode' => 'LIST'));
if (isset($data['folders'])) {