|
Moodle
2.2.1
http://www.collinsharper.com
|
00001 <?php 00026 require_once 'Zend/Soap/Client.php'; 00027 00036 class Zend_Service_DeveloperGarden_Client_Soap extends Zend_Soap_Client 00037 { 00043 private $_credential = null; 00044 00050 const WSSE_NAMESPACE_SECEXT = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd'; 00051 00057 const WSSE_NAMESPACE_SAML = 'urn:oasis:names:tc:SAML:2.0:assertion'; 00058 00064 const WSSE_SECURITY_ELEMENT = 'Security'; 00065 00071 const WSSE_ELEMENT_USERNAMETOKEN = 'UsernameToken'; 00072 00078 const WSSE_ELEMENT_USERNAME = 'Username'; 00079 00085 const WSSE_ELEMENT_PASSWORD = 'Password'; 00086 00091 const WSSE_ELEMENT_PASSWORD_TYPE = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText'; 00092 00098 protected $_tokenService = null; 00099 00107 public function __call($name, $arguments) 00108 { 00112 if (!is_null($this->_tokenService)) { 00113 // if login method we addWsseLoginHeader 00114 if (in_array('login', $arguments)) { 00115 $this->addWsseLoginHeader(); 00116 } elseif ($name == 'getTokens') { 00117 $this->addWsseTokenHeader($this->_tokenService->getLoginToken()); 00118 } else { 00119 $this->addWsseSecurityTokenHeader($this->_tokenService->getTokens()); 00120 } 00121 } 00122 return parent::__call($name, $arguments); 00123 } 00124 00131 public function setTokenService(Zend_Service_DeveloperGarden_SecurityTokenServer $tokenService) 00132 { 00133 $this->_tokenService = $tokenService; 00134 return $this; 00135 } 00136 00142 public function getTokenService() 00143 { 00144 return $this->_tokenService; 00145 } 00146 00153 public function setCredential(Zend_Service_DeveloperGarden_Credential $credential) 00154 { 00155 $this->_credential = $credential; 00156 return $this; 00157 } 00158 00164 public function getCredential() 00165 { 00166 return $this->_credential; 00167 } 00168 00174 public function getWsseLoginHeader() 00175 { 00176 $dom = new DOMDocument(); 00177 00181 $securityElement = $dom->createElementNS( 00182 self::WSSE_NAMESPACE_SECEXT, 00183 'wsse:' . self::WSSE_SECURITY_ELEMENT 00184 ); 00185 $securityElement->setAttribute('mustUnderstand', true); 00186 00190 $usernameTokenElement = $dom->createElementNS( 00191 self::WSSE_NAMESPACE_SECEXT, 00192 self::WSSE_ELEMENT_USERNAMETOKEN 00193 ); 00194 00198 $usernameElement = $dom->createElementNS( 00199 self::WSSE_NAMESPACE_SECEXT, 00200 self::WSSE_ELEMENT_USERNAME, 00201 $this->_credential->getUsername(true) 00202 ); 00203 00207 $passwordElement = $dom->createElementNS( 00208 self::WSSE_NAMESPACE_SECEXT, 00209 self::WSSE_ELEMENT_PASSWORD, 00210 $this->_credential->getPassword() 00211 ); 00212 $passwordElement->setAttribute('Type', self::WSSE_ELEMENT_PASSWORD_TYPE); 00213 00214 $usernameTokenElement->appendChild($usernameElement); 00215 $usernameTokenElement->appendChild($passwordElement); 00216 00217 $securityElement->appendChild($usernameTokenElement); 00218 $dom->appendChild($securityElement); 00219 00220 $authSoapVar = new SoapVar( 00221 $dom->saveXML($securityElement), 00222 XSD_ANYXML, 00223 self::WSSE_NAMESPACE_SECEXT, 00224 self::WSSE_SECURITY_ELEMENT 00225 ); 00226 00227 $authSoapHeader = new SoapHeader( 00228 self::WSSE_NAMESPACE_SECEXT, 00229 self::WSSE_SECURITY_ELEMENT, 00230 $authSoapVar, 00231 true 00232 ); 00233 00234 return $authSoapHeader; 00235 } 00236 00243 public function getWsseTokenHeader( 00244 Zend_Service_DeveloperGarden_Response_SecurityTokenServer_SecurityTokenResponse $token 00245 ) { 00246 $format = '<wsse:%s xmlns:wsse="%s" SOAP-ENV:mustUnderstand="1">%s</wsse:%s>'; 00247 $securityHeader = sprintf( 00248 $format, 00249 self::WSSE_SECURITY_ELEMENT, 00250 self::WSSE_NAMESPACE_SECEXT, 00251 $token->getTokenData(), 00252 self::WSSE_SECURITY_ELEMENT 00253 ); 00254 00255 $authSoapVar = new SoapVar( 00256 $securityHeader, 00257 XSD_ANYXML, 00258 self::WSSE_NAMESPACE_SECEXT, 00259 self::WSSE_SECURITY_ELEMENT 00260 ); 00261 00262 $authSoapHeader = new SoapHeader( 00263 self::WSSE_NAMESPACE_SECEXT, 00264 self::WSSE_SECURITY_ELEMENT, 00265 $authSoapVar, 00266 true 00267 ); 00268 00269 return $authSoapHeader; 00270 } 00271 00278 public function getWsseSecurityTokenHeader( 00279 Zend_Service_DeveloperGarden_Response_SecurityTokenServer_GetTokensResponse $token 00280 ) { 00281 $format = '<wsse:%s xmlns:wsse="%s" SOAP-ENV:mustUnderstand="1">%s</wsse:%s>'; 00282 $securityHeader = sprintf( 00283 $format, 00284 self::WSSE_SECURITY_ELEMENT, 00285 self::WSSE_NAMESPACE_SECEXT, 00286 $token->getTokenData(), 00287 self::WSSE_SECURITY_ELEMENT 00288 ); 00289 00290 $authSoapVar = new SoapVar( 00291 $securityHeader, 00292 XSD_ANYXML, 00293 self::WSSE_NAMESPACE_SECEXT, 00294 self::WSSE_SECURITY_ELEMENT 00295 ); 00296 00297 $authSoapHeader = new SoapHeader( 00298 self::WSSE_NAMESPACE_SECEXT, 00299 self::WSSE_SECURITY_ELEMENT, 00300 $authSoapVar, 00301 true 00302 ); 00303 00304 return $authSoapHeader; 00305 } 00306 00312 public function addWsseLoginHeader() 00313 { 00314 return $this->addSoapInputHeader($this->getWsseLoginHeader()); 00315 } 00316 00323 public function addWsseTokenHeader( 00324 Zend_Service_DeveloperGarden_Response_SecurityTokenServer_SecurityTokenResponse $token 00325 ) { 00326 return $this->addSoapInputHeader($this->getWsseTokenHeader($token)); 00327 } 00328 00335 public function addWsseSecurityTokenHeader( 00336 Zend_Service_DeveloperGarden_Response_SecurityTokenServer_GetTokensResponse $token 00337 ) { 00338 return $this->addSoapInputHeader($this->getWsseSecurityTokenHeader($token)); 00339 } 00340 }