From 5f845d9a57ea81260326facff8a1aa781a44140d Mon Sep 17 00:00:00 2001 From: Gunnar Wrobel Date: Thu, 5 Nov 2009 20:03:39 +0100 Subject: [PATCH] Allow to validate a stored session. --- .../Kolab_Session/lib/Horde/Kolab/Session.php | 7 +++++ .../lib/Horde/Kolab/Session/Anonymous.php | 10 +++++++ .../Kolab_Session/lib/Horde/Kolab/Session/Base.php | 31 +++++++++++++++++++++- .../lib/Horde/Kolab/Session/Logged.php | 10 +++++++ .../lib/Horde/Kolab/Session/Singleton.php | 4 ++- .../lib/Horde/Kolab/Session/Stored.php | 10 +++++++ 6 files changed, 70 insertions(+), 2 deletions(-) diff --git a/framework/Kolab_Session/lib/Horde/Kolab/Session.php b/framework/Kolab_Session/lib/Horde/Kolab/Session.php index f36a04ade..45a7c0273 100644 --- a/framework/Kolab_Session/lib/Horde/Kolab/Session.php +++ b/framework/Kolab_Session/lib/Horde/Kolab/Session.php @@ -106,4 +106,11 @@ interface Horde_Kolab_Session * @return Horde_Kolab_Storage The storage connection. */ public function getStorage(); + + /** + * Return the connection status of this session. + * + * @return boolean True if the session has been successfully connected. + */ + public function isConnected(); } diff --git a/framework/Kolab_Session/lib/Horde/Kolab/Session/Anonymous.php b/framework/Kolab_Session/lib/Horde/Kolab/Session/Anonymous.php index 9c046a6b2..ef31e5590 100644 --- a/framework/Kolab_Session/lib/Horde/Kolab/Session/Anonymous.php +++ b/framework/Kolab_Session/lib/Horde/Kolab/Session/Anonymous.php @@ -179,4 +179,14 @@ class Horde_Kolab_Session_Anonymous implements Horde_Kolab_Session { return $this->_session->getStorage(); } + + /** + * Return the connection status of this session. + * + * @return boolean True if the session has been successfully connected. + */ + public function isConnected() + { + return $this->_session->isConnected(); + } } diff --git a/framework/Kolab_Session/lib/Horde/Kolab/Session/Base.php b/framework/Kolab_Session/lib/Horde/Kolab/Session/Base.php index 8aa6e0da6..a2ec45562 100644 --- a/framework/Kolab_Session/lib/Horde/Kolab/Session/Base.php +++ b/framework/Kolab_Session/lib/Horde/Kolab/Session/Base.php @@ -104,6 +104,13 @@ class Horde_Kolab_Session_Base implements Horde_Kolab_Session private $_storage; /** + * Indicate if this session was successfully connected. + * + * @var array + */ + private $_connected = false; + + /** * Constructor. * * @param string $user_id The session will be setup for the user @@ -154,6 +161,8 @@ class Horde_Kolab_Session_Base implements Horde_Kolab_Session $this->_initName($user_object); $this->_initImapServer($user_object); $this->_initFreebusyServer($user_object); + + $this->_connected = true; } /** @@ -354,6 +363,26 @@ class Horde_Kolab_Session_Base implements Horde_Kolab_Session */ public function getStorage() { - throw new Horde_Kolab_Session_Exception('Not implemented!'); + if (empty($this->_storage)) { + //@todo: factory? + $this->_storage = new Horde_Kolab_Storage( + 'Imap', + //@todo: Use Session_Auth + array('hostspec' => $this->getImapServer(), + 'username' => Horde_Auth::getAuth(), + 'password' => Horde_Auth::getCredential('password')) + ); + } + return $this->_storage; + } + + /** + * Return the connection status of this session. + * + * @return boolean True if the session has been successfully connected. + */ + public function isConnected() + { + return $this->_connected; } } diff --git a/framework/Kolab_Session/lib/Horde/Kolab/Session/Logged.php b/framework/Kolab_Session/lib/Horde/Kolab/Session/Logged.php index bba8424bd..d99dd32d3 100644 --- a/framework/Kolab_Session/lib/Horde/Kolab/Session/Logged.php +++ b/framework/Kolab_Session/lib/Horde/Kolab/Session/Logged.php @@ -168,4 +168,14 @@ class Horde_Kolab_Session_Logged implements Horde_Kolab_Session { return $this->_session->getStorage(); } + + /** + * Return the connection status of this session. + * + * @return boolean True if the session has been successfully connected. + */ + public function isConnected() + { + return $this->_session->isConnected(); + } } diff --git a/framework/Kolab_Session/lib/Horde/Kolab/Session/Singleton.php b/framework/Kolab_Session/lib/Horde/Kolab/Session/Singleton.php index 72d0654a2..033f70b09 100644 --- a/framework/Kolab_Session/lib/Horde/Kolab/Session/Singleton.php +++ b/framework/Kolab_Session/lib/Horde/Kolab/Session/Singleton.php @@ -60,7 +60,9 @@ class Horde_Kolab_Session_Singleton $config['logger'] = Horde::getLogger(); $factory = new Horde_Kolab_Session_Factory_Configuration($config); self::$_instance = $factory->getSession($user); - self::$_instance->connect($credentials); + if (!self::$_instance->isConnected()) { + self::$_instance->connect($credentials); + } } return self::$_instance; } diff --git a/framework/Kolab_Session/lib/Horde/Kolab/Session/Stored.php b/framework/Kolab_Session/lib/Horde/Kolab/Session/Stored.php index c1455908f..f73215eca 100644 --- a/framework/Kolab_Session/lib/Horde/Kolab/Session/Stored.php +++ b/framework/Kolab_Session/lib/Horde/Kolab/Session/Stored.php @@ -167,4 +167,14 @@ class Horde_Kolab_Session_Stored implements Horde_Kolab_Session { return $this->_session->getStorage(); } + + /** + * Return the connection status of this session. + * + * @return boolean True if the session has been successfully connected. + */ + public function isConnected() + { + return $this->_session->isConnected(); + } } -- 2.11.0