diff -r 5b37998e522e -r 162c1de6545a web/lib/Zend/Service/DeveloperGarden/Client/Soap.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/lib/Zend/Service/DeveloperGarden/Client/Soap.php Fri Mar 11 15:05:35 2011 +0100 @@ -0,0 +1,340 @@ +_tokenService !== null) { + // if login method we addWsseLoginHeader + if (in_array('login', $arguments)) { + $this->addWsseLoginHeader(); + } elseif ($name == 'getTokens') { + $this->addWsseTokenHeader($this->_tokenService->getLoginToken()); + } else { + $this->addWsseSecurityTokenHeader($this->_tokenService->getTokens()); + } + } + return parent::__call($name, $arguments); + } + + /** + * sets the internal handling for handle token service + * + * @param Zend_Service_DeveloperGarden_SecurityTokenServer $isTokenService + * @return Zend_Service_DeveloperGarden_Client_Soap + */ + public function setTokenService(Zend_Service_DeveloperGarden_SecurityTokenServer $tokenService) + { + $this->_tokenService = $tokenService; + return $this; + } + + /** + * returns the currently configured tokenService object + * + * @return Zend_Service_DeveloperGarden_SecurityTokenServer + */ + public function getTokenService() + { + return $this->_tokenService; + } + + /** + * Sets new credential callback object + * + * @param Zend_Service_DeveloperGarden_Credential $credential + * @return Zend_Service_DeveloperGarden_Client_Soap + */ + public function setCredential(Zend_Service_DeveloperGarden_Credential $credential) + { + $this->_credential = $credential; + return $this; + } + + /** + * returns the internal credential callback object + * + * @return Zend_Service_DeveloperGarden_Credential + */ + public function getCredential() + { + return $this->_credential; + } + + /** + * creates the login header and add + * + * @return SoapHeader + */ + public function getWsseLoginHeader() + { + $dom = new DOMDocument(); + + /** + * Security Element + */ + $securityElement = $dom->createElementNS( + self::WSSE_NAMESPACE_SECEXT, + 'wsse:' . self::WSSE_SECURITY_ELEMENT + ); + $securityElement->setAttribute('mustUnderstand', true); + + /** + * Username Token Element + */ + $usernameTokenElement = $dom->createElementNS( + self::WSSE_NAMESPACE_SECEXT, + self::WSSE_ELEMENT_USERNAMETOKEN + ); + + /** + * Username Element + */ + $usernameElement = $dom->createElementNS( + self::WSSE_NAMESPACE_SECEXT, + self::WSSE_ELEMENT_USERNAME, + $this->_credential->getUsername(true) + ); + + /** + * Password Element + */ + $passwordElement = $dom->createElementNS( + self::WSSE_NAMESPACE_SECEXT, + self::WSSE_ELEMENT_PASSWORD, + $this->_credential->getPassword() + ); + $passwordElement->setAttribute('Type', self::WSSE_ELEMENT_PASSWORD_TYPE); + + $usernameTokenElement->appendChild($usernameElement); + $usernameTokenElement->appendChild($passwordElement); + + $securityElement->appendChild($usernameTokenElement); + $dom->appendChild($securityElement); + + $authSoapVar = new SoapVar( + $dom->saveXML($securityElement), + XSD_ANYXML, + self::WSSE_NAMESPACE_SECEXT, + self::WSSE_SECURITY_ELEMENT + ); + + $authSoapHeader = new SoapHeader( + self::WSSE_NAMESPACE_SECEXT, + self::WSSE_SECURITY_ELEMENT, + $authSoapVar, + true + ); + + return $authSoapHeader; + } + + /** + * creates the token auth header for direct calls + * + * @param Zend_Service_DeveloperGarden_Response_SecurityTokenServer_SecurityTokenResponse $token + * @return SoapHeader + */ + public function getWsseTokenHeader( + Zend_Service_DeveloperGarden_Response_SecurityTokenServer_SecurityTokenResponse $token + ) { + $format = '%s'; + $securityHeader = sprintf( + $format, + self::WSSE_SECURITY_ELEMENT, + self::WSSE_NAMESPACE_SECEXT, + $token->getTokenData(), + self::WSSE_SECURITY_ELEMENT + ); + + $authSoapVar = new SoapVar( + $securityHeader, + XSD_ANYXML, + self::WSSE_NAMESPACE_SECEXT, + self::WSSE_SECURITY_ELEMENT + ); + + $authSoapHeader = new SoapHeader( + self::WSSE_NAMESPACE_SECEXT, + self::WSSE_SECURITY_ELEMENT, + $authSoapVar, + true + ); + + return $authSoapHeader; + } + + /** + * creates the security token auth header for direct calls + * + * @param Zend_Service_DeveloperGarden_Response_SecurityTokenServer_SecurityTokenResponse $token + * @return SoapHeader + */ + public function getWsseSecurityTokenHeader( + Zend_Service_DeveloperGarden_Response_SecurityTokenServer_GetTokensResponse $token + ) { + $format = '%s'; + $securityHeader = sprintf( + $format, + self::WSSE_SECURITY_ELEMENT, + self::WSSE_NAMESPACE_SECEXT, + $token->getTokenData(), + self::WSSE_SECURITY_ELEMENT + ); + + $authSoapVar = new SoapVar( + $securityHeader, + XSD_ANYXML, + self::WSSE_NAMESPACE_SECEXT, + self::WSSE_SECURITY_ELEMENT + ); + + $authSoapHeader = new SoapHeader( + self::WSSE_NAMESPACE_SECEXT, + self::WSSE_SECURITY_ELEMENT, + $authSoapVar, + true + ); + + return $authSoapHeader; + } + + /** + * adds the login specific header to the client + * + * @return Zend_Service_DeveloperGarden_Client_Soap + */ + public function addWsseLoginHeader() + { + return $this->addSoapInputHeader($this->getWsseLoginHeader()); + } + + /** + * adds the earlier fetched token to the header + * + * @param Zend_Service_DeveloperGarden_Response_SecurityTokenServer_SecurityTokenResponse $token + * @return Zend_Service_DeveloperGarden_Client_Soap + */ + public function addWsseTokenHeader( + Zend_Service_DeveloperGarden_Response_SecurityTokenServer_SecurityTokenResponse $token + ) { + return $this->addSoapInputHeader($this->getWsseTokenHeader($token)); + } + + /** + * adds the earlier fetched token to the header + * + * @param Zend_Service_DeveloperGarden_Response_SecurityTokenServer_SecurityTokenResponse $token + * @return Zend_Service_DeveloperGarden_Client_Soap + */ + public function addWsseSecurityTokenHeader( + Zend_Service_DeveloperGarden_Response_SecurityTokenServer_GetTokensResponse $token + ) { + return $this->addSoapInputHeader($this->getWsseSecurityTokenHeader($token)); + } +}