X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=saml%2Fsaml2%2Fbinding%2Fimpl%2FSAML2ArtifactDecoder.cpp;h=553d8a51bf33f341bf464fe0de690f27a552dc1d;hb=0f6286d0ffd9371c187ecb1775cbd199ed051af5;hp=b108a5fe6d7aa0de7b42d678af4838e4a0083811;hpb=01d4a70f0b95b2bac5a0d66e6fe87f4640433b90;p=shibboleth%2Fcpp-opensaml.git diff --git a/saml/saml2/binding/impl/SAML2ArtifactDecoder.cpp b/saml/saml2/binding/impl/SAML2ArtifactDecoder.cpp index b108a5f..553d8a5 100644 --- a/saml/saml2/binding/impl/SAML2ArtifactDecoder.cpp +++ b/saml/saml2/binding/impl/SAML2ArtifactDecoder.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2006 Internet2 + * Copyright 2001-2007 Internet2 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,15 +22,14 @@ #include "internal.h" #include "exceptions.h" -#include "binding/HTTPRequest.h" -#include "saml/binding/SAMLArtifact.h" +#include "binding/MessageDecoder.h" #include "saml2/binding/SAML2Artifact.h" -#include "saml2/binding/SAML2ArtifactDecoder.h" #include "saml2/core/Protocols.h" #include "saml2/metadata/Metadata.h" #include "saml2/metadata/MetadataProvider.h" -#include +#include +#include #include #include @@ -38,21 +37,32 @@ using namespace opensaml::saml2md; using namespace opensaml::saml2p; using namespace opensaml::saml2; using namespace opensaml; +using namespace xmltooling::logging; using namespace xmltooling; -using namespace log4cpp; using namespace std; namespace opensaml { namespace saml2p { - MessageDecoder* SAML_DLLLOCAL SAML2ArtifactDecoderFactory(const DOMElement* const & e) + class SAML_DLLLOCAL SAML2ArtifactDecoder : public MessageDecoder { - return new SAML2ArtifactDecoder(e); + public: + SAML2ArtifactDecoder() {} + virtual ~SAML2ArtifactDecoder() {} + + xmltooling::XMLObject* decode( + std::string& relayState, + const GenericRequest& genericRequest, + SecurityPolicy& policy + ) const; + }; + + MessageDecoder* SAML_DLLLOCAL SAML2ArtifactDecoderFactory(const pair& p) + { + return new SAML2ArtifactDecoder(); } }; }; -SAML2ArtifactDecoder::SAML2ArtifactDecoder(const DOMElement* e) {} - XMLObject* SAML2ArtifactDecoder::decode( string& relayState, const GenericRequest& genericRequest, @@ -66,13 +76,11 @@ XMLObject* SAML2ArtifactDecoder::decode( log.debug("validating input"); const HTTPRequest* httpRequest=dynamic_cast(&genericRequest); - if (!httpRequest) { - log.error("unable to cast request to HTTPRequest type"); - return NULL; - } + if (!httpRequest) + throw BindingException("Unable to cast request object to HTTPRequest type."); const char* SAMLart = httpRequest->getParameter("SAMLart"); if (!SAMLart) - return NULL; + throw BindingException("Request missing SAMLart parameter."); const char* state = httpRequest->getParameter("RelayState"); if (state) relayState = state; @@ -139,6 +147,7 @@ XMLObject* SAML2ArtifactDecoder::decode( } policy.setIssuerMetadata(roledesc); + log.debug("calling ArtifactResolver..."); auto_ptr response( m_artifactResolver->resolve(*(artifact2.get()), dynamic_cast(*roledesc), policy) );