Copyright 2003-2016 Horde LLC (http://www.horde.org/) See the enclosed file COPYING for license information (LGPL). If you did not receive this file, see http://www.horde.org/licenses/lgpl21.
Author: Michael Rubinsky (mrubinsk@horde.org)
Ejemplo n.º 1
0
 /**
  * Private authentication function.
  *
  * @param string $userID      Username for IMSP server.
  * @param array $credentials  Hash containing 'password' element.
  *
  * @return boolean  True on success / False on failure.
  */
 protected function _authenticate($userID, $credentials)
 {
     // Need to create the Imsp socket here since it requires a user/password
     // to create, and we don't have one until this method.
     $this->_params['username'] = $userID;
     $this->_params['password'] = $credentials['password'];
     $this->_imsp = $GLOBALS['injector']->getInstance('Horde_Core_Factory_Imsp')->create(null, $this->_params);
     if (!$this->_imsp->authenticate(false)) {
         throw new Horde_Auth_Exception('', Horde_Auth::REASON_BADLOGIN);
     }
 }
Ejemplo n.º 2
0
Archivo: Base.php Proyecto: horde/horde
 /**
  * Attempts to login to IMSP server.
  *
  * @param Horde_Imsp_Client_Base $client  The Imsp client connection.
  * @param boolean $login                  Remain logged in after auth?
  *
  * @return boolean
  */
 public function authenticate(Horde_Imsp_Client_Base $client, $login = true)
 {
     $this->_imsp = $client;
     if (!$this->_authenticate()) {
         return false;
     }
     if (!$login) {
         $this->_imsp->logout();
     }
     return true;
 }
Ejemplo n.º 3
0
 /**
  * Constructor function.
  * Required parameters:
  *<pre>
  *  authObj  <Horde_Imsp_Auth>  The object to handle the authentication
  *</pre>
  *
  * Optional parameters:
  *<pre>
  *  server   <string>           The IMSP host
  *  port     <string>           The port the IMSP server listens on
  *  logger  <Horde_Log_Logger>  The logger.
  *</pre>
  * @param array $params Hash containing server parameters.
  */
 public function __construct(array $params)
 {
     parent::__construct($params);
     $this->_imspOpen();
     $this->_logger->debug('Initializing Horde_Imsp object.');
 }
Ejemplo n.º 4
0
 /**
  * Parses a IMSP fetchaddress response text string into key-value pairs
  *
  * @param  string  $server_response The raw fetchaddress response.
  *
  * @return array   Address book entry information as key=>value pairs.
  */
 protected function _parseFetchAddressResponse($server_response)
 {
     $abook = '';
     if (!preg_match("/^\\* FETCHADDRESS /", $server_response)) {
         $this->_imsp->_logger->err('Did not receive a FETCHADDRESS response from server.');
         throw new Horde_Imsp_Exception('Did not receive the expected response from the server.');
     }
     /* NOTES
      * Parse out the server response string
      *
      * After choping off the server command response tags and
      * explode()'ing the server_response string
      * the $parts array contains the chunks of the server returned data.
      *
      * The predifined 'name' field starts in $parts[1].
      * The server should return any single item of data
      * that contains spaces within it as a double quoted string.
      * So we can interpret the existence of a double quote at the beginning
      * of a chunk to mean that the next chunk(s) are part of
      * the same value.  A double quote at the end of a chunk signifies the
      * end of that value and the chunk following that can be interpreted
      * as a key name.
      *
      * We also need to watch for the server returning a {} response for the
      * value of the key as well. */
     // Was the address book name a  {}?
     if (preg_match("/(^\\* FETCHADDRESS )({)([0-9]{1,})(\\}\$)/", $server_response, $tempArray)) {
         $abook = $this->_imsp->receiveStringLiteral($tempArray[3]);
         $chopped_response = trim($this->_imsp->receive());
     } else {
         // Take off the stuff from the beginning of the response
         $chopped_response = trim(preg_replace("/^\\* FETCHADDRESS /", '', $server_response));
     }
     $parts = explode(' ', $chopped_response);
     /* If addres book was sent as a {} then we must 'push' a blank
      * value to the start of this array so the rest of the routine
      * will work with the correct indexes. */
     if (!empty($abook)) {
         array_unshift($parts, ' ');
     }
     // Was the address book name quoted?
     $numOfParts = count($parts);
     $name = $parts[0];
     $firstNameIdx = 1;
     $firstChar = substr($name, 0, 1);
     if ($firstChar == "\"") {
         for ($i = 1; $i < $numOfParts; $i++) {
             $lastChar = substr($parts[$i], strlen($parts[$i]) - 1, 1);
             $firstNameIdx++;
             if ($lastChar == "\"") {
                 break;
             }
         }
     }
     // Now start working on the entry name
     $name = $parts[$firstNameIdx];
     $firstChar = substr($name, 0, 1);
     // Check to see if the first char of the name string is a double quote
     // so we know if we have to extract more of the name.
     if ($firstChar == "\"") {
         $name = ltrim($name, "\"");
         for ($i = $firstNameIdx + 1; $i < $numOfParts; $i++) {
             $name .= ' ' . $parts[$i];
             $lastChar = substr($parts[$i], strlen($parts[$i]) - 1, 1);
             if ($lastChar == "\"") {
                 $name = rtrim($name, "\"");
                 $nextKey = $i + 1;
                 break;
             }
         }
         // Check for {}
     } elseif (preg_match('/\\{(\\d+)\\}/', $name, $matches)) {
         $name = $this->_imsp->receiveStringLiteral($matches[1]);
         $response = $this->_imsp->receive();
         $parts = explode(' ', $response);
         $numOfParts = count($parts);
         $nextKey = 0;
     } else {
         // If only one chunk for 'name' then we just have to point
         // to the next chunk in the array...which will hopefully
         // be '2'
         $nextKey = $firstNameIdx + 1;
     }
     $lastChar = '';
     $entry['name'] = $name;
     // Start parsing the rest of the response.
     for ($i = $nextKey; $i < $numOfParts; $i += 2) {
         $key = $parts[$i];
         /* Check for {} */
         if (@preg_match(Horde_Imsp_Client_Base::OCTET_COUNT, $parts[$i + 1], $tempArray)) {
             $server_data = $this->_imsp->receiveStringLiteral($tempArray[2]);
             $entry[$key] = $server_data;
             /* Read any remaining data from the stream and reset
              * the counter variables so the loop will continue
              * correctly. Note we set $i  to -2 because it will
              * be incremented by 2 before the loop will run again */
             $parts = $this->_imsp->getServerResponseChunks();
             $i = -2;
             $numOfParts = count($parts);
         } else {
             // Not a string literal response
             @($entry[$key] = $parts[$i + 1]);
             // Check to see if the value started with a double
             // quote.  We also need to check if the last char is a
             // quote to make sure we REALLY have to check the next
             // elements for a closing quote.
             if (@substr($parts[$i + 1], 0, 1) == '"' && substr($parts[$i + 1], strlen($parts[$i + 1]) - 1, 1) != '"') {
                 do {
                     $nextElement = $parts[$i + 2];
                     // Was this element the last one?
                     $lastChar = substr($nextElement, strlen($nextElement) - 1, 1);
                     $entry[$key] .= ' ' . $nextElement;
                     // NOW, we can check the lastChar.
                     if ($lastChar == '"') {
                         $done = true;
                         $i++;
                     } else {
                         // Check to see if the next element is the
                         // last one. If so, the do loop will terminate.
                         $done = false;
                         $lastChar = substr($parts[$i + 3], strlen($parts[$i + 3]) - 1, 1);
                         $i++;
                     }
                 } while ($lastChar != '"');
                 // Do we need to add the final element, or were
                 // there only two total?
                 if (!$done) {
                     $nextElement = $parts[$i + 2];
                     $entry[$key] .= ' ' . $nextElement;
                     $i++;
                 }
                 // Remove the quotes sent back to us from the server.
                 if (substr($entry[$key], 0, 1) == '"') {
                     $entry[$key] = substr($entry[$key], 1, strlen($entry[$key]) - 2);
                 }
                 if (substr($entry[$key], strlen($entry[$key]) - 1, 1) == '"') {
                     $entry[$key] = substr($entry[$key], 0, strlen($entry[$key]) - 2);
                 }
             } elseif (@substr($parts[$i + 1], 0, 1) == '"' && substr($parts[$i + 1], -1, 1) == '"') {
                 // Remove the quotes sent back to us from the server.
                 if (substr($entry[$key], 0, 1) == '"') {
                     $entry[$key] = substr($entry[$key], 1, strlen($entry[$key]) - 2);
                 }
                 if (substr($entry[$key], -1, 1) == '"') {
                     $entry[$key] = substr($entry[$key], 0, strlen($entry[$key]) - 2);
                 }
             }
         }
     }
     return $entry;
 }
Ejemplo n.º 5
0
 public function logout()
 {
     $this->_imsp->logout();
 }