Glue SOAP client to SP config, expand policy settings.
[shibboleth/sp.git] / util / samlquery.cpp
index 1d1bd74..d1af42c 100644 (file)
@@ -35,6 +35,7 @@
 #include <shibsp/exceptions.h>\r
 #include <shibsp/SPConfig.h>\r
 #include <shibsp/ServiceProvider.h>\r
+#include <shibsp/binding/SOAPClient.h>\r
 #include <shibsp/util/SPConstants.h>\r
 \r
 #include <saml/binding/SecurityPolicy.h>\r
@@ -127,7 +128,7 @@ int main(int argc,char* argv[])
     }\r
 \r
     ServiceProvider* sp=conf.getServiceProvider();\r
-    xmltooling::Locker locker(sp);\r
+    sp->lock();\r
 \r
     try {\r
         const Application* app=sp->getApplication(a_param);\r
@@ -157,12 +158,11 @@ int main(int argc,char* argv[])
         else\r
             throw MetadataException("No AttributeAuthority role found in metadata.");\r
 \r
-        QName role(samlconstants::SAML20P_NS, AttributeAuthorityDescriptor::LOCAL_NAME);\r
-        SecurityPolicy policy(sp->getPolicyRules(), m, &role, app->getTrustEngine());\r
+        SecurityPolicy policy;\r
+        shibsp::SOAPClient soaper(*app,policy);\r
 \r
         if (ver == v20) {\r
             auto_ptr_XMLCh binding(samlconstants::SAML20_BINDING_SOAP);\r
-            SAML2SOAPClient soaper(policy,true);\r
             opensaml::saml2p::StatusResponseType* srt=NULL;\r
             const vector<AttributeService*>& endpoints=AA->getAttributeServices();\r
             for (vector<AttributeService*>::const_iterator ep=endpoints.begin(); !srt && ep!=endpoints.end(); ++ep) {\r
@@ -181,10 +181,9 @@ int main(int argc,char* argv[])
                     subject->setNameID(nameid);\r
                     query->setSubject(subject);\r
                     query->setIssuer(iss);\r
-                    auto_ptr<opensaml::saml2p::AttributeQuery> wrapper(query);\r
-                    soaper.sendSAML(query, *AA, loc.get());\r
-                    wrapper.release();  // freed by SOAP client\r
-                    srt = soaper.receiveSAML();\r
+                    SAML2SOAPClient client(soaper);\r
+                    client.sendSAML(query, *AA, loc.get());\r
+                    srt = client.receiveSAML();\r
                 }\r
                 catch (exception& ex) {\r
                     cerr << ex.what() << endl;\r
@@ -206,7 +205,6 @@ int main(int argc,char* argv[])
         }\r
         else {\r
             auto_ptr_XMLCh binding(samlconstants::SAML1_BINDING_SOAP);\r
-            SAML1SOAPClient soaper(policy,true);\r
             const opensaml::saml1p::Response* response=NULL;\r
             const vector<AttributeService*>& endpoints=AA->getAttributeServices();\r
             for (vector<AttributeService*>::const_iterator ep=endpoints.begin(); !response && ep!=endpoints.end(); ++ep) {\r
@@ -225,10 +223,9 @@ int main(int argc,char* argv[])
                     query->setSubject(subject);\r
                     query->setResource(issuer.get());\r
                     request->setMinorVersion(ver==v11 ? 1 : 0);\r
-                    auto_ptr<Request> wrapper(request);\r
-                    soaper.sendSAML(request, *AA, loc.get());\r
-                    wrapper.release();  // freed by SOAP client\r
-                    response = soaper.receiveSAML();\r
+                    SAML1SOAPClient client(soaper);\r
+                    client.sendSAML(request, *AA, loc.get());\r
+                    response = client.receiveSAML();\r
                 }\r
                 catch (exception& ex) {\r
                     cerr << ex.what() << endl;\r
@@ -252,6 +249,7 @@ int main(int argc,char* argv[])
         cerr << ex.what() << endl;\r
     }\r
 \r
+    sp->unlock();\r
     conf.term();\r
     return 0;\r
 }\r