Viewing file: SOAP5.php (7.88 KB) -rw-rw-rw- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 foldmethod=marker: */
/** * Storage driver for use against a SOAP service using PHP5 SoapClient * * PHP version 5 * * LICENSE: This source file is subject to version 3.01 of the PHP license * that is available through the world-wide-web at the following URI: * http://www.php.net/license/3_01.txt. If you did not receive a copy of * the PHP License and are unable to obtain it through the web, please * send a note to license@php.net so we can mail you a copy immediately. * * @category Authentication * @package Auth * @author Based upon Auth_Container_SOAP by Bruno Pedro <bpedro@co.sapo.pt> * @author Marcel Oelke <puRe@rednoize.com> * @author Adam Ashley <aashley@php.net> * @copyright 2001-2006 The PHP Group * @license http://www.php.net/license/3_01.txt PHP License 3.01 * @version CVS: $Id: SOAP5.php 238999 2007-07-02 08:25:41Z aashley $ * @since File available since Release 1.4.0 */
/** * Include Auth_Container base class */ require_once "Auth/Container.php"; /** * Include PEAR package for error handling */ require_once "PEAR.php";
/** * Storage driver for fetching login data from SOAP using the PHP5 Builtin SOAP * functions. This is a modification of the SOAP Storage driver from Bruno Pedro * thats using the PEAR SOAP Package. * * This class takes one parameter (options), where * you specify the following fields: * * location and uri, or wsdl file * * method to call on the SOAP service * * usernamefield, the name of the parameter where the username is supplied * * passwordfield, the name of the parameter where the password is supplied * * matchpassword, whether to look for the password in the response from * the function call or assume that no errors means user * authenticated. * * See http://www.php.net/manual/en/ref.soap.php for further details * on options for the PHP5 SoapClient which are passed through. * * Example usage without WSDL: * * <?php * * $options = array ( * 'wsdl' => NULL, * 'location' => 'http://your.soap.service/endpoint', * 'uri' => 'urn:/Your/Namespace', * 'method' => 'checkAuth', * 'usernamefield' => 'username', * 'passwordfield' => 'password', * 'matchpasswords' => false, * '_features' => array ( * 'extra_parameter' => 'example_value', * 'another_parameter' => 'foobar' * ) * ); * * $auth = new Auth('SOAP5', $options); * $auth->start(); * * ?> * * Example usage with WSDL: * * <?php * * $options = array ( * 'wsdl' => 'http://your.soap.service/wsdl', * 'method' => 'checkAuth', * 'usernamefield' => 'username', * 'passwordfield' => 'password', * 'matchpasswords' => false, * '_features' => array ( * 'extra_parameter' => 'example_value', * 'another_parameter' => 'foobar' * ) * ); * * $auth = new Auth('SOAP5', $options); * $auth->start(); * * ?> * * @category Authentication * @package Auth * @author Based upon Auth_Container_SOAP by Bruno Pedro <bpedro@co.sapo.pt> * @author Marcel Oelke <puRe@rednoize.com> * @author Adam Ashley <aashley@php.net> * @copyright 2001-2006 The PHP Group * @license http://www.php.net/license/3_01.txt PHP License 3.01 * @version Release: @package_version@ File: $Revision: 238999 $ * @since Class available since Release 1.4.0 */ class Auth_Container_SOAP5 extends Auth_Container {
// {{{ properties
/** * Required options for the class * @var array * @access private */ var $_requiredOptions = array( 'location', 'uri', 'method', 'usernamefield', 'passwordfield', 'wsdl', );
/** * Options for the class * @var array * @access private */ var $_options = array();
/** * Optional SOAP features * @var array * @access private */ var $_features = array();
/** * The SOAP response * @var array * @access public */ var $soapResponse = array();
// }}} // {{{ Auth_Container_SOAP5()
/** * Constructor of the container class * * @param $options, associative array with endpoint, namespace, method, * usernamefield, passwordfield and optional features */ function Auth_Container_SOAP5($options) { $this->_setDefaults();
foreach ($options as $name => $value) { $this->_options[$name] = $value; }
if (!empty($this->_options['_features'])) { $this->_features = $this->_options['_features']; unset($this->_options['_features']); } }
// }}} // {{{ fetchData()
/** * Fetch data from SOAP service * * Requests the SOAP service for the given username/password * combination. * * @param string Username * @param string Password * @return mixed Returns the SOAP response or false if something went wrong */ function fetchData($username, $password) { $this->log('Auth_Container_SOAP5::fetchData() called.', AUTH_LOG_DEBUG); $result = $this->_validateOptions(); if (PEAR::isError($result)) return $result;
// create a SOAP client $soapClient = new SoapClient($this->_options["wsdl"], $this->_options);
$params = array(); // first, assign the optional features foreach ($this->_features as $fieldName => $fieldValue) { $params[$fieldName] = $fieldValue; } // assign username and password ... $params[$this->_options['usernamefield']] = $username; $params[$this->_options['passwordfield']] = $password;
try { $this->soapResponse = $soapClient->__soapCall($this->_options['method'], $params);
if ($this->_options['matchpasswords']) { // check if passwords match if ($password == $this->soapResponse[$this->_options['passwordfield']]) { return true; } else { return false; } } else { return true; } } catch (SoapFault $e) { return PEAR::raiseError("Error retrieving authentication data. Received SOAP Fault: ".$e->faultstring, $e->faultcode); } }
// }}} // {{{ _validateOptions()
/** * Validate that the options passed to the container class are enough for us to proceed * * @access private * @param array */ function _validateOptions() { if ( ( is_null($this->_options['wsdl']) && is_null($this->_options['location']) && is_null($this->_options['uri'])) || ( is_null($this->_options['wsdl']) && ( is_null($this->_options['location']) || is_null($this->_options['uri'])))) { return PEAR::raiseError('Either a WSDL file or a location/uri pair must be specified.'); } if (is_null($this->_options['method'])) { return PEAR::raiseError('A method to call on the soap service must be specified.'); } return true; }
// }}} // {{{ _setDefaults()
/** * Set some default options * * @access private * @return void */ function _setDefaults() { $this->_options['wsdl'] = null; $this->_options['location'] = null; $this->_options['uri'] = null; $this->_options['method'] = null; $this->_options['usernamefield'] = 'username'; $this->_options['passwordfield'] = 'password'; $this->_options['matchpasswords'] = true; }
// }}}
} ?>
|