X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=samltest%2Fbinding.h;h=13cda7d8fe9bfe3808f8c62add1026272bb5165a;hb=b59952455d0d04290fca1460a2a50b1cd84f0e27;hp=15aa249edb3949505c6a527ea1f5dd519dea3fd2;hpb=b0c11eb8bfd9daa93de903f1ab94f0f34df46c2e;p=shibboleth%2Fcpp-opensaml.git diff --git a/samltest/binding.h b/samltest/binding.h index 15aa249..13cda7d 100644 --- a/samltest/binding.h +++ b/samltest/binding.h @@ -1,17 +1,21 @@ -/* - * Copyright 2001-2006 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 +/** + * Licensed to the University Corporation for Advanced Internet + * Development, Inc. (UCAID) under one or more contributor license + * agreements. See the NOTICE file distributed with this work for + * additional information regarding copyright ownership. * - * http://www.apache.org/licenses/LICENSE-2.0 + * UCAID licenses this file to you 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 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the License. */ #include "internal.h" @@ -19,32 +23,42 @@ #include #include #include -#include +#include +#include +#include #include -#include -using namespace saml2md; +#include +#include +#include +#include +#include +#include +#include + +using namespace opensaml::saml2md; +using namespace opensaml; using namespace xmlsignature; -class SAMLBindingBaseTestCase : public MessageDecoder::HTTPRequest, public MessageEncoder::HTTPResponse +class SAMLBindingBaseTestCase : public HTTPRequest, public HTTPResponse { protected: - CredentialResolver* m_creds; - MetadataProvider* m_metadata; - opensaml::X509TrustEngine* m_trust; + boost::scoped_ptr m_creds; + boost::scoped_ptr m_metadata; + boost::scoped_ptr m_trust; map m_fields; map m_headers; - string m_method,m_url; + string m_method,m_url,m_query; + vector m_clientCerts; + vector m_rules; public: void setUp() { - m_creds=NULL; - m_metadata=NULL; - m_trust=NULL; m_fields.clear(); m_headers.clear(); m_method.erase(); m_url.erase(); + m_query.erase(); try { string config = data_path + "binding/ExampleMetadataProvider.xml"; @@ -55,10 +69,10 @@ public: auto_ptr_XMLCh path("path"); string s = data_path + "binding/example-metadata.xml"; auto_ptr_XMLCh file(s.c_str()); - doc->getDocumentElement()->setAttributeNS(NULL,path.get(),file.get()); + doc->getDocumentElement()->setAttributeNS(nullptr,path.get(),file.get()); - m_metadata = SAMLConfig::getConfig().MetadataProviderManager.newPlugin( - FILESYSTEM_METADATA_PROVIDER,doc->getDocumentElement() + m_metadata.reset( + SAMLConfig::getConfig().MetadataProviderManager.newPlugin(XML_METADATA_PROVIDER, doc->getDocumentElement()) ); m_metadata->init(); @@ -66,13 +80,15 @@ public: ifstream in2(config.c_str()); DOMDocument* doc2=XMLToolingConfig::getConfig().getParser().parse(in2); XercesJanitor janitor2(doc2); - m_creds = XMLToolingConfig::getConfig().CredentialResolverManager.newPlugin( - FILESYSTEM_CREDENTIAL_RESOLVER,doc2->getDocumentElement() + m_creds.reset( + XMLToolingConfig::getConfig().CredentialResolverManager.newPlugin(FILESYSTEM_CREDENTIAL_RESOLVER, doc2->getDocumentElement()) ); - m_trust = dynamic_cast( - SAMLConfig::getConfig().TrustEngineManager.newPlugin(EXPLICIT_KEY_SAMLTRUSTENGINE, NULL) - ); + m_trust.reset(XMLToolingConfig::getConfig().TrustEngineManager.newPlugin(EXPLICIT_KEY_TRUSTENGINE, nullptr)); + + m_rules.push_back(SAMLConfig::getConfig().SecurityPolicyRuleManager.newPlugin(MESSAGEFLOW_POLICY_RULE,nullptr)); + m_rules.push_back(SAMLConfig::getConfig().SecurityPolicyRuleManager.newPlugin(SIMPLESIGNING_POLICY_RULE,nullptr)); + m_rules.push_back(SAMLConfig::getConfig().SecurityPolicyRuleManager.newPlugin(XMLSIGNING_POLICY_RULE,nullptr)); } catch (XMLToolingException& ex) { TS_TRACE(ex.what()); @@ -83,40 +99,72 @@ public: } void tearDown() { - delete m_creds; - delete m_metadata; - delete m_trust; - m_creds=NULL; - m_metadata=NULL; - m_trust=NULL; + for_each(m_rules.begin(), m_rules.end(), xmltooling::cleanup()); + m_trust.reset(); + m_metadata.reset(); + m_creds.reset(); + m_rules.clear(); m_fields.clear(); m_headers.clear(); m_method.erase(); m_url.erase(); + m_query.erase(); } // HTTPRequest methods const char* getMethod() const { return m_method.c_str(); - } + } + + const char* getScheme() const { + return "https"; + } + + const char* getHostname() const { + return "localhost"; + } + + int getPort() const { + return 443; + } + + string getContentType() const { + return "application/x-www-form-urlencoded"; + } + + long getContentLength() const { + return -1; + } + + const char* getRequestURI() const { + return "/"; + } const char* getRequestURL() const { return m_url.c_str(); } const char* getRequestBody() const { - return NULL; + return nullptr; } const char* getQueryString() const { - return NULL; + return m_query.c_str(); } string getRemoteUser() const { return ""; } + string getRemoteAddr() const { + return "127.0.0.1"; + } + + const std::vector& getClientCertificates() const { + return m_clientCerts; + } + string getHeader(const char* name) const { map::const_iterator i=m_headers.find(name); return i==m_headers.end() ? "" : i->second; @@ -124,7 +172,7 @@ public: const char* getParameter(const char* name) const { map::const_iterator i=m_fields.find(name); - return i==m_fields.end() ? NULL : i->second.c_str(); + return i==m_fields.end() ? nullptr : i->second.c_str(); } vector::size_type getParameters(const char* name, vector& values) const { @@ -137,14 +185,10 @@ public: // HTTPResponse methods - void setHeader(const char* name, const char* value) { + void setResponseHeader(const char* name, const char* value) { m_headers[name] = value ? value : ""; } - - void setCookie(const char* name, const char* value) { - m_headers["Set-Cookie"] = string(name) + "=" + (value ? value : ""); - } - + // The amount of error checking missing from this is incredible, but as long // as the test data isn't unexpected or malformed, it should work. @@ -154,6 +198,7 @@ public: char* pch = strchr(dup,'?'); if (pch) { *pch++=0; + m_query = pch; char* name=pch; while (name && *name) { pch=strchr(pch,'='); @@ -162,7 +207,7 @@ public: pch=strchr(pch,'&'); if (pch) *pch++=0; - SAMLConfig::getConfig().getURLEncoder()->decode(value); + XMLToolingConfig::getConfig().getURLEncoder()->decode(value); m_fields[name] = value; name = pch; } @@ -198,7 +243,9 @@ public: return decoded; } - long sendResponse(std::istream& inputStream, int status = 200, const char* contentType = "text/html") { + using HTTPResponse::sendResponse; + + long sendResponse(std::istream& inputStream, long status) { m_method="POST"; string page,line; while (getline(inputStream,line)) @@ -208,7 +255,7 @@ public: pch+=strlen("action=\""); m_url = html_decode(page.substr(pch-page.c_str(),strchr(pch,'"')-pch)); - while (pch=strstr(pch,"