芝麻web文件管理V1.00
编辑当前文件:/home/strato/chroot/opt/RZphp74/includes/Auth/Container/SOAP5.php
* @author Marcel Oelke
* @author Adam Ashley
* @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: * * 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: * * '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
* @author Marcel Oelke
* @author Adam Ashley
* @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; } // }}} } ?>