[ Index ]

PHP Cross Reference of moodle-2.8

title

Body

[close]

/lib/zend/Zend/Service/DeveloperGarden/Client/ -> Soap.php (source)

   1  <?php
   2  /**
   3   * Zend Framework
   4   *
   5   * LICENSE
   6   *
   7   * This source file is subject to the new BSD license that is bundled
   8   * with this package in the file LICENSE.txt.
   9   * It is also available through the world-wide-web at this URL:
  10   * http://framework.zend.com/license/new-bsd
  11   * If you did not receive a copy of the license and are unable to
  12   * obtain it through the world-wide-web, please send an email
  13   * to [email protected] so we can send you a copy immediately.
  14   *
  15   * @category   Zend
  16   * @package    Zend_Service
  17   * @subpackage DeveloperGarden
  18   * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
  19   * @license    http://framework.zend.com/license/new-bsd     New BSD License
  20   * @version    $Id$
  21   */
  22  
  23  /**
  24   * @see Zend_Soap_Client
  25   */
  26  require_once 'Zend/Soap/Client.php';
  27  
  28  /**
  29   * @category   Zend
  30   * @package    Zend_Service
  31   * @subpackage DeveloperGarden
  32   * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
  33   * @author     Marco Kaiser
  34   * @license    http://framework.zend.com/license/new-bsd     New BSD License
  35   */
  36  class Zend_Service_DeveloperGarden_Client_Soap extends Zend_Soap_Client
  37  {
  38      /**
  39       * class with credential interface
  40       *
  41       * @var Zend_Service_DeveloperGarden_Credential
  42       */
  43      private $_credential = null;
  44  
  45      /**
  46       * WSSE Security Ext Namespace
  47       *
  48       * @var string
  49       */
  50      const WSSE_NAMESPACE_SECEXT = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd';
  51  
  52      /**
  53       * WSSE Saml Namespace
  54       *
  55       * @var string
  56       */
  57      const WSSE_NAMESPACE_SAML = 'urn:oasis:names:tc:SAML:2.0:assertion';
  58  
  59      /**
  60       * Security Element
  61       *
  62       * @var string
  63       */
  64      const WSSE_SECURITY_ELEMENT = 'Security';
  65  
  66      /**
  67       * UsernameToken Element
  68       *
  69       * @var string
  70       */
  71      const WSSE_ELEMENT_USERNAMETOKEN = 'UsernameToken';
  72  
  73      /**
  74       * Usernae Element
  75       *
  76       * @var string
  77       */
  78      const WSSE_ELEMENT_USERNAME = 'Username';
  79  
  80      /**
  81       * Password Element
  82       *
  83       * @var string
  84       */
  85      const WSSE_ELEMENT_PASSWORD = 'Password';
  86  
  87      /**
  88       * Password Element WSSE Type
  89       *
  90       */
  91      const WSSE_ELEMENT_PASSWORD_TYPE = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText';
  92  
  93      /**
  94       * is this client used by the token service
  95       *
  96       * @var Zend_Service_DeveloperGarden_SecurityTokenServer
  97       */
  98      protected $_tokenService = null;
  99  
 100      /**
 101       * Perform a SOAP call but first check for adding STS Token or fetch one
 102       *
 103       * @param string $name
 104       * @param array  $arguments
 105       * @return mixed
 106       */
 107      public function __call($name, $arguments)
 108      {
 109          /**
 110           * add WSSE Security header
 111           */
 112          if (!is_null($this->_tokenService)) {
 113              // if login method we addWsseLoginHeader
 114              if (in_array('login', $arguments)) {
 115                  $this->addWsseLoginHeader();
 116              } elseif ($name == 'getTokens') {
 117                  $this->addWsseTokenHeader($this->_tokenService->getLoginToken());
 118              } else {
 119                  $this->addWsseSecurityTokenHeader($this->_tokenService->getTokens());
 120              }
 121          }
 122          return parent::__call($name, $arguments);
 123      }
 124  
 125      /**
 126       * sets the internal handling for handle token service
 127       *
 128       * @param Zend_Service_DeveloperGarden_SecurityTokenServer $isTokenService
 129       * @return Zend_Service_DeveloperGarden_Client_Soap
 130       */
 131      public function setTokenService(Zend_Service_DeveloperGarden_SecurityTokenServer $tokenService)
 132      {
 133          $this->_tokenService = $tokenService;
 134          return $this;
 135      }
 136  
 137      /**
 138       * returns the currently configured tokenService object
 139       *
 140       * @return Zend_Service_DeveloperGarden_SecurityTokenServer
 141       */
 142      public function getTokenService()
 143      {
 144          return $this->_tokenService;
 145      }
 146  
 147      /**
 148       * Sets new credential callback object
 149       *
 150       * @param Zend_Service_DeveloperGarden_Credential $credential
 151       * @return Zend_Service_DeveloperGarden_Client_Soap
 152       */
 153      public function setCredential(Zend_Service_DeveloperGarden_Credential $credential)
 154      {
 155          $this->_credential = $credential;
 156          return $this;
 157      }
 158  
 159      /**
 160       * returns the internal credential callback object
 161       *
 162       * @return Zend_Service_DeveloperGarden_Credential
 163       */
 164      public function getCredential()
 165      {
 166          return $this->_credential;
 167      }
 168  
 169      /**
 170       * creates the login header and add
 171       *
 172       * @return SoapHeader
 173       */
 174      public function getWsseLoginHeader()
 175      {
 176          $dom = new DOMDocument();
 177  
 178          /**
 179           * Security Element
 180           */
 181          $securityElement = $dom->createElementNS(
 182              self::WSSE_NAMESPACE_SECEXT,
 183              'wsse:' . self::WSSE_SECURITY_ELEMENT
 184          );
 185          $securityElement->setAttribute('mustUnderstand', true);
 186  
 187          /**
 188           * Username Token Element
 189           */
 190          $usernameTokenElement = $dom->createElementNS(
 191              self::WSSE_NAMESPACE_SECEXT,
 192              self::WSSE_ELEMENT_USERNAMETOKEN
 193          );
 194  
 195          /**
 196           * Username Element
 197           */
 198          $usernameElement = $dom->createElementNS(
 199              self::WSSE_NAMESPACE_SECEXT,
 200              self::WSSE_ELEMENT_USERNAME,
 201              $this->_credential->getUsername(true)
 202          );
 203  
 204          /**
 205           * Password Element
 206           */
 207          $passwordElement = $dom->createElementNS(
 208              self::WSSE_NAMESPACE_SECEXT,
 209              self::WSSE_ELEMENT_PASSWORD,
 210              $this->_credential->getPassword()
 211          );
 212          $passwordElement->setAttribute('Type', self::WSSE_ELEMENT_PASSWORD_TYPE);
 213  
 214          $usernameTokenElement->appendChild($usernameElement);
 215          $usernameTokenElement->appendChild($passwordElement);
 216  
 217          $securityElement->appendChild($usernameTokenElement);
 218          $dom->appendChild($securityElement);
 219  
 220          $authSoapVar = new SoapVar(
 221              $dom->saveXML($securityElement),
 222              XSD_ANYXML,
 223              self::WSSE_NAMESPACE_SECEXT,
 224              self::WSSE_SECURITY_ELEMENT
 225          );
 226  
 227          $authSoapHeader = new SoapHeader(
 228              self::WSSE_NAMESPACE_SECEXT,
 229              self::WSSE_SECURITY_ELEMENT,
 230              $authSoapVar,
 231              true
 232          );
 233  
 234          return $authSoapHeader;
 235      }
 236  
 237      /**
 238       * creates the token auth header for direct calls
 239       *
 240       * @param Zend_Service_DeveloperGarden_Response_SecurityTokenServer_SecurityTokenResponse $token
 241       * @return SoapHeader
 242       */
 243      public function getWsseTokenHeader(
 244          Zend_Service_DeveloperGarden_Response_SecurityTokenServer_SecurityTokenResponse $token
 245      ) {
 246          $format = '<wsse:%s xmlns:wsse="%s" SOAP-ENV:mustUnderstand="1">%s</wsse:%s>';
 247          $securityHeader = sprintf(
 248              $format,
 249              self::WSSE_SECURITY_ELEMENT,
 250              self::WSSE_NAMESPACE_SECEXT,
 251              $token->getTokenData(),
 252              self::WSSE_SECURITY_ELEMENT
 253          );
 254  
 255          $authSoapVar = new SoapVar(
 256              $securityHeader,
 257              XSD_ANYXML,
 258              self::WSSE_NAMESPACE_SECEXT,
 259              self::WSSE_SECURITY_ELEMENT
 260          );
 261  
 262          $authSoapHeader = new SoapHeader(
 263              self::WSSE_NAMESPACE_SECEXT,
 264              self::WSSE_SECURITY_ELEMENT,
 265              $authSoapVar,
 266              true
 267          );
 268  
 269          return $authSoapHeader;
 270      }
 271  
 272      /**
 273       * creates the security token auth header for direct calls
 274       *
 275       * @param Zend_Service_DeveloperGarden_Response_SecurityTokenServer_SecurityTokenResponse $token
 276       * @return SoapHeader
 277       */
 278      public function getWsseSecurityTokenHeader(
 279          Zend_Service_DeveloperGarden_Response_SecurityTokenServer_GetTokensResponse $token
 280      ) {
 281          $format = '<wsse:%s xmlns:wsse="%s" SOAP-ENV:mustUnderstand="1">%s</wsse:%s>';
 282          $securityHeader = sprintf(
 283              $format,
 284              self::WSSE_SECURITY_ELEMENT,
 285              self::WSSE_NAMESPACE_SECEXT,
 286              $token->getTokenData(),
 287              self::WSSE_SECURITY_ELEMENT
 288          );
 289  
 290          $authSoapVar = new SoapVar(
 291              $securityHeader,
 292              XSD_ANYXML,
 293              self::WSSE_NAMESPACE_SECEXT,
 294              self::WSSE_SECURITY_ELEMENT
 295          );
 296  
 297          $authSoapHeader = new SoapHeader(
 298              self::WSSE_NAMESPACE_SECEXT,
 299              self::WSSE_SECURITY_ELEMENT,
 300              $authSoapVar,
 301              true
 302          );
 303  
 304          return $authSoapHeader;
 305      }
 306  
 307      /**
 308       * adds the login specific header to the client
 309       *
 310       * @return Zend_Service_DeveloperGarden_Client_Soap
 311       */
 312      public function addWsseLoginHeader()
 313      {
 314          return $this->addSoapInputHeader($this->getWsseLoginHeader());
 315      }
 316  
 317      /**
 318       * adds the earlier fetched token to the header
 319       *
 320       * @param Zend_Service_DeveloperGarden_Response_SecurityTokenServer_SecurityTokenResponse $token
 321       * @return Zend_Service_DeveloperGarden_Client_Soap
 322       */
 323      public function addWsseTokenHeader(
 324          Zend_Service_DeveloperGarden_Response_SecurityTokenServer_SecurityTokenResponse $token
 325      ) {
 326          return $this->addSoapInputHeader($this->getWsseTokenHeader($token));
 327      }
 328  
 329      /**
 330       * adds the earlier fetched token to the header
 331       *
 332       * @param Zend_Service_DeveloperGarden_Response_SecurityTokenServer_SecurityTokenResponse $token
 333       * @return Zend_Service_DeveloperGarden_Client_Soap
 334       */
 335      public function addWsseSecurityTokenHeader(
 336          Zend_Service_DeveloperGarden_Response_SecurityTokenServer_GetTokensResponse $token
 337      ) {
 338          return $this->addSoapInputHeader($this->getWsseSecurityTokenHeader($token));
 339      }
 340  }


Generated: Fri Nov 28 20:29:05 2014 Cross-referenced by PHPXref 0.7.1