[ Index ] |
PHP Cross Reference of moodle-2.8 |
[Summary view] [Print] [Text view]
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 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 20:29:05 2014 | Cross-referenced by PHPXref 0.7.1 |