X-Git-Url: http://www.project-moonshot.org/gitweb/?p=shibboleth%2Fcpp-opensaml.git;a=blobdiff_plain;f=saml%2Fbinding%2Fimpl%2FMessageDecoder.cpp;h=a185ba256150099e230d2d1d31edf6de5febc2b3;hp=e867ddb7292cfb7b263ccd4412b5b90cf47a76b1;hb=52d1d0921d8b819572bb0bd52f305709f6a0a08e;hpb=48038b6787531fa6a5d182f5873f256a148a070d diff --git a/saml/binding/impl/MessageDecoder.cpp b/saml/binding/impl/MessageDecoder.cpp index e867ddb..a185ba2 100644 --- a/saml/binding/impl/MessageDecoder.cpp +++ b/saml/binding/impl/MessageDecoder.cpp @@ -1,6 +1,6 @@ /* - * Copyright 2001-2006 Internet2 - * + * Copyright 2001-2009 Internet2 + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -16,33 +16,67 @@ /** * MessageDecoder.cpp - * - * Interface to SAML protocol binding message decoders. + * + * Interface to SAML protocol binding message decoders. */ #include "internal.h" #include "binding/MessageDecoder.h" +#include "saml2/metadata/EndpointManager.h" +#include "saml2/metadata/Metadata.h" +#include "util/SAMLConstants.h" + +#include +using namespace opensaml::saml2md; using namespace opensaml; using namespace xmltooling; +using namespace std; namespace opensaml { namespace saml1p { - SAML_DLLLOCAL PluginManager::Factory SAML1ArtifactDecoderFactory; - SAML_DLLLOCAL PluginManager::Factory SAML1POSTDecoderFactory; - }; + SAML_DLLLOCAL PluginManager< MessageDecoder,string,pair >::Factory SAML1ArtifactDecoderFactory; + SAML_DLLLOCAL PluginManager< MessageDecoder,string,pair >::Factory SAML1POSTDecoderFactory; + SAML_DLLLOCAL PluginManager< MessageDecoder,string,pair >::Factory SAML1SOAPDecoderFactory; + }; namespace saml2p { - SAML_DLLLOCAL PluginManager::Factory SAML2ArtifactDecoderFactory; - SAML_DLLLOCAL PluginManager::Factory SAML2POSTDecoderFactory; + SAML_DLLLOCAL PluginManager< MessageDecoder,string,pair >::Factory SAML2ArtifactDecoderFactory; + SAML_DLLLOCAL PluginManager< MessageDecoder,string,pair >::Factory SAML2POSTDecoderFactory; + SAML_DLLLOCAL PluginManager< MessageDecoder,string,pair >::Factory SAML2RedirectDecoderFactory; + SAML_DLLLOCAL PluginManager< MessageDecoder,string,pair >::Factory SAML2SOAPDecoderFactory; + SAML_DLLLOCAL PluginManager< MessageDecoder,string,pair >::Factory SAML2ECPDecoderFactory; }; }; void SAML_API opensaml::registerMessageDecoders() { SAMLConfig& conf=SAMLConfig::getConfig(); - //conf.MessageDecoderManager.registerFactory(SAML1_ARTIFACT_DECODER, saml1p::SAML1ArtifactDecoderFactory); - conf.MessageDecoderManager.registerFactory(SAML1_POST_DECODER, saml1p::SAML1POSTDecoderFactory); - //conf.MessageDecoderManager.registerFactory(SAML2_ARTIFACT_DECODER, saml2p::SAML2ArtifactDecoderFactory); - conf.MessageDecoderManager.registerFactory(SAML2_POST_DECODER, saml2p::SAML2POSTDecoderFactory); + conf.MessageDecoderManager.registerFactory(samlconstants::SAML1_PROFILE_BROWSER_ARTIFACT, saml1p::SAML1ArtifactDecoderFactory); + conf.MessageDecoderManager.registerFactory(samlconstants::SAML1_PROFILE_BROWSER_POST, saml1p::SAML1POSTDecoderFactory); + conf.MessageDecoderManager.registerFactory(samlconstants::SAML1_BINDING_SOAP, saml1p::SAML1SOAPDecoderFactory); + conf.MessageDecoderManager.registerFactory(samlconstants::SAML20_BINDING_HTTP_ARTIFACT, saml2p::SAML2ArtifactDecoderFactory); + conf.MessageDecoderManager.registerFactory(samlconstants::SAML20_BINDING_HTTP_POST, saml2p::SAML2POSTDecoderFactory); + conf.MessageDecoderManager.registerFactory(samlconstants::SAML20_BINDING_HTTP_POST_SIMPLESIGN, saml2p::SAML2POSTDecoderFactory); + conf.MessageDecoderManager.registerFactory(samlconstants::SAML20_BINDING_HTTP_REDIRECT, saml2p::SAML2RedirectDecoderFactory); + conf.MessageDecoderManager.registerFactory(samlconstants::SAML20_BINDING_SOAP, saml2p::SAML2SOAPDecoderFactory); + conf.MessageDecoderManager.registerFactory(samlconstants::SAML20_BINDING_PAOS, saml2p::SAML2ECPDecoderFactory); + + static const XMLCh RelayState[] = UNICODE_LITERAL_10(R,e,l,a,y,S,t,a,t,e); + XMLObjectBuilder::registerBuilder(xmltooling::QName(samlconstants::SAML20ECP_NS, RelayState), new AnyElementBuilder()); +} + +bool MessageDecoder::ArtifactResolver::isSupported(const SSODescriptorType& ssoDescriptor) const +{ + EndpointManager mgr(ssoDescriptor.getArtifactResolutionServices()); + if (ssoDescriptor.hasSupport(samlconstants::SAML20P_NS)) { + auto_ptr_XMLCh binding(samlconstants::SAML20_BINDING_SOAP); + return (mgr.getByBinding(binding.get()) != NULL); + } + else if (ssoDescriptor.hasSupport(samlconstants::SAML11_PROTOCOL_ENUM) || ssoDescriptor.hasSupport(samlconstants::SAML10_PROTOCOL_ENUM)) { + auto_ptr_XMLCh binding(samlconstants::SAML1_BINDING_SOAP); + return (mgr.getByBinding(binding.get()) != NULL); + } + + return false; }