X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=saml%2Fsaml2%2Fbinding%2Fimpl%2FSAML2RedirectEncoder.cpp;h=9e2b3d1636a516fffffecc2a5e62e485be8e2f38;hb=b1614d3c1fc1f4230ab2a123f43994127c25462c;hp=38bf52c69890773580d08f4f5c89395b014c9f45;hpb=932cfaae2176c2eba1a9938dc420591a9551a7f3;p=shibboleth%2Fcpp-opensaml.git diff --git a/saml/saml2/binding/impl/SAML2RedirectEncoder.cpp b/saml/saml2/binding/impl/SAML2RedirectEncoder.cpp index 38bf52c..9e2b3d1 100644 --- a/saml/saml2/binding/impl/SAML2RedirectEncoder.cpp +++ b/saml/saml2/binding/impl/SAML2RedirectEncoder.cpp @@ -23,9 +23,8 @@ #include "internal.h" #include "exceptions.h" #include "binding/HTTPResponse.h" -#include "binding/URLEncoder.h" +#include "binding/MessageEncoder.h" #include "saml2/binding/SAML2Redirect.h" -#include "saml2/binding/SAML2RedirectEncoder.h" #include "saml2/core/Protocols.h" #include @@ -33,6 +32,7 @@ #include #include #include +#include using namespace opensaml::saml2p; using namespace opensaml; @@ -43,6 +43,23 @@ using namespace std; namespace opensaml { namespace saml2p { + class SAML_DLLLOCAL SAML2RedirectEncoder : public MessageEncoder + { + public: + SAML2RedirectEncoder(const DOMElement* e) {} + virtual ~SAML2RedirectEncoder() {} + + long encode( + GenericResponse& genericResponse, + XMLObject* xmlObject, + const char* destination, + const char* recipientID=NULL, + const char* relayState=NULL, + const Credential* credential=NULL, + const XMLCh* sigAlgorithm=NULL + ) const; + }; + MessageEncoder* SAML_DLLLOCAL SAML2RedirectEncoderFactory(const DOMElement* const & e) { return new SAML2RedirectEncoder(e); @@ -56,7 +73,7 @@ long SAML2RedirectEncoder::encode( const char* destination, const char* recipientID, const char* relayState, - const CredentialResolver* credResolver, + const Credential* credential, const XMLCh* sigAlgorithm ) const { @@ -102,14 +119,14 @@ long SAML2RedirectEncoder::encode( throw BindingException("Base64 encoding of XML failed."); // Create beginnings of redirect query string. - URLEncoder* escaper = SAMLConfig::getConfig().getURLEncoder(); + const URLEncoder* escaper = XMLToolingConfig::getConfig().getURLEncoder(); xmlbuf.erase(); xmlbuf.append(reinterpret_cast(encoded),len); xmlbuf = (request ? "SAMLRequest=" : "SAMLResponse=") + escaper->encode(xmlbuf.c_str()); if (relayState) xmlbuf = xmlbuf + "&RelayState=" + escaper->encode(relayState); - if (credResolver) { + if (credential) { // Sign the query string after adding the algorithm. if (!sigAlgorithm) sigAlgorithm = DSIGConstants::s_unicodeStrURIRSA_SHA1; @@ -118,8 +135,7 @@ long SAML2RedirectEncoder::encode( char sigbuf[1024]; memset(sigbuf,0,sizeof(sigbuf)); - auto_ptr key(credResolver->getKey()); - Signature::createRawSignature(key.get(), sigAlgorithm, xmlbuf.c_str(), xmlbuf.length(), sigbuf, sizeof(sigbuf)-1); + Signature::createRawSignature(credential->getPrivateKey(), sigAlgorithm, xmlbuf.c_str(), xmlbuf.length(), sigbuf, sizeof(sigbuf)-1); xmlbuf = xmlbuf + "&Signature=" + escaper->encode(sigbuf); }