X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=saml%2Fsaml1%2Fbinding%2Fimpl%2FSAML1POSTEncoder.cpp;h=2b0107b43fbc235faf7f90a066670136466825b7;hb=3092c5498ee4bdd7df0562e4c5e1a4a9d984fafb;hp=3a6feaef06379857aec60e7f6aa3916cf7787e7c;hpb=9fddf9054c76de6239295b98a559fcc75453effc;p=shibboleth%2Fopensaml2.git diff --git a/saml/saml1/binding/impl/SAML1POSTEncoder.cpp b/saml/saml1/binding/impl/SAML1POSTEncoder.cpp index 3a6feae..2b0107b 100644 --- a/saml/saml1/binding/impl/SAML1POSTEncoder.cpp +++ b/saml/saml1/binding/impl/SAML1POSTEncoder.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #include using namespace opensaml::saml1p; @@ -84,6 +85,7 @@ SAML1POSTEncoder::SAML1POSTEncoder(const DOMElement* e, const XMLCh* ns) } if (m_template.empty()) throw XMLToolingException("SAML1POSTEncoder requires template XML attribute."); + XMLToolingConfig::getConfig().getPathResolver()->resolve(m_template, PathResolver::XMLTOOLING_CFG_FILE); } long SAML1POSTEncoder::encode( @@ -103,6 +105,10 @@ long SAML1POSTEncoder::encode( #endif Category& log = Category::getInstance(SAML_LOGCAT".MessageEncoder.SAML1POST"); + TemplateEngine* engine = XMLToolingConfig::getConfig().getTemplateEngine(); + if (!engine) + throw BindingException("Encoding response using POST requires a TemplateEngine instance."); + log.debug("validating input"); if (xmlObject->getParent()) throw BindingException("Cannot encode XML content with parent."); @@ -141,9 +147,14 @@ long SAML1POSTEncoder::encode( log.debug("marshalling the response"); rootElement = response->marshall(); } - - string xmlbuf; + + // Push message into template. + TemplateEngine::TemplateParameters pmap; + string& xmlbuf = pmap.m_map["SAMLResponse"]; XMLHelper::serialize(rootElement, xmlbuf); + log.debug("marshalled response:\n%s", xmlbuf.c_str()); + + // Replace with base-64 encoded version. unsigned int len=0; XMLByte* out=Base64::encode(reinterpret_cast(xmlbuf.data()),xmlbuf.size(),&len); if (out) { @@ -155,20 +166,15 @@ long SAML1POSTEncoder::encode( throw BindingException("Base64 encoding of XML failed."); } - // Push message into template and send result to client. + // Fill in the rest of the data and send to the client. log.debug("message encoded, sending HTML form template to client"); - TemplateEngine* engine = XMLToolingConfig::getConfig().getTemplateEngine(); - if (!engine) - throw BindingException("Encoding response using POST requires a TemplateEngine instance."); ifstream infile(m_template.c_str()); if (!infile) throw BindingException("Failed to open HTML template for POST response ($1).", params(1,m_template.c_str())); - TemplateEngine::TemplateParameters params; - params.m_map["action"] = destination; - params.m_map["SAMLResponse"] = xmlbuf; - params.m_map["TARGET"] = relayState; + pmap.m_map["action"] = destination; + pmap.m_map["TARGET"] = relayState; stringstream s; - engine->run(infile, s, params); + engine->run(infile, s, pmap); genericResponse.setContentType("text/html"); long ret = genericResponse.sendResponse(s);