You are viewing a plain text version of this content. The canonical link for it is here.
Posted to rampart-dev@ws.apache.org by na...@apache.org on 2008/02/26 06:57:40 UTC

svn commit: r631092 - /webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java

Author: nandana
Date: Mon Feb 25 21:57:36 2008
New Revision: 631092

URL: http://svn.apache.org/viewvc?rev=631092&view=rev
Log:
Extending Trust to exchange policies via WS - Metadata Exchange

Modified:
    webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java

Modified: webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java
URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java?rev=631092&r1=631091&r2=631092&view=diff
==============================================================================
--- webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java (original)
+++ webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java Mon Feb 25 21:57:36 2008
@@ -25,12 +25,23 @@
 import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.axiom.soap.SOAPHeader;
 import org.apache.axiom.soap.SOAPHeaderBlock;
+import org.apache.axis2.AxisFault;
 import org.apache.axis2.addressing.AddressingConstants;
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.client.Options;
 import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.dataretrieval.DRConstants;
+import org.apache.axis2.dataretrieval.client.MexClient;
 import org.apache.axis2.description.Parameter;
+import org.apache.axis2.mex.MexConstants;
+import org.apache.axis2.mex.MexException;
+import org.apache.axis2.mex.om.Metadata;
+import org.apache.axis2.mex.om.MetadataReference;
+import org.apache.axis2.mex.om.MetadataSection;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.neethi.Policy;
+import org.apache.neethi.PolicyEngine;
 import org.apache.rahas.RahasConstants;
 import org.apache.rahas.Token;
 import org.apache.rahas.TrustException;
@@ -329,6 +340,79 @@
         }
     }
     
+    /**
+     * Retrieve policy using metadata reference 
+     * <wsa:Metadata xmlns:wsa="http://www.w3.org/2005/08/addressing">
+     *  <mex:Metadata
+     *       xmlns:mex="http://schemas.xmlsoap.org/ws/2004/09/mex"
+     *       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+     *           <mex:MetadataSection>
+     *                  <mex:MetadataReference>
+     *                      <wsa:Address>http://address/of/mex/service</wsa:Address>
+     *                  </mex:MetadataReference>
+     *           </mex:MetadataSection>
+     *  </mex:Metadata>
+     * </wsa:Metadata>
+     * @param mex Metadata element 
+     * @return Policy from the mex service
+     */
+    public static Policy getPolicyFromMetadataRef(OMElement mex) throws RampartException {
+        
+        try {
+            Metadata metadata = new Metadata();
+            metadata.fromOM(mex.getFirstElement());
+            
+            MetadataSection[] metadataSections = metadata.getMetadatSections();
+            
+            MetadataReference reference = metadataSections[0].getMetadataReference();
+            
+            MexClient serviceClient = new MexClient();
+
+            Options options = serviceClient.getOptions();
+            options.setTo(reference.getEPR());
+            options.setAction(DRConstants.SPEC.Actions.GET_METADATA_REQUEST);
+            
+            OMElement request = serviceClient.setupGetMetadataRequest(
+                                                        MexConstants.SPEC.DIALECT_TYPE_POLICY,null);
+            OMElement result = serviceClient.sendReceive(request);
+            
+            Metadata metadataResponse = new Metadata();
+            metadata.fromOM(result);
+            
+            MetadataSection[] mexSecs =  metadata.getMetadataSection(MexConstants.SPEC.DIALECT_TYPE_POLICY, null);
+            
+            OMElement policyElement = (OMElement) mexSecs[0].getInlineData();
+            
+            return PolicyEngine.getPolicy(policyElement);
+            
+            
+        } catch (MexException e) {
+            throw new RampartException("Error Retrieving the policy from mex", e);
+        } catch (AxisFault e) {
+            throw new RampartException("Error Retrieving the policy from mex", e);
+        }
+        
+    }
+    
+    public static Policy addRampartConfig (RampartMessageData rmd, Policy policy) {
+        
+        RampartConfig servicRampConf = rmd.getPolicyData().getRampartConfig();        
+        RampartConfig stsRampConf = new RampartConfig();
+        
+        //TODO copy all the properties of service ramp conf to sts ramp conf
+        stsRampConf.setUser(servicRampConf.getUser());
+        stsRampConf.setSigCryptoConfig(servicRampConf.getSigCryptoConfig());
+        stsRampConf.setPwCbClass(servicRampConf.getPwCbClass());
+        
+        stsRampConf.setEncryptionUser(servicRampConf.getStsAlias());
+        stsRampConf.setEncrCryptoConfig(servicRampConf.getStsCryptoConfig());
+        
+        policy.addAssertion(stsRampConf);
+        
+        return policy;
+        
+    }
+    
     
     public static OMElement createRSTTempalteForSCT(int conversationVersion, 
             int wstVersion) throws RampartException {
@@ -483,7 +567,12 @@
             OMElement rstTemplate = issuedToken.getRstTemplate();
 
             // Get STS policy
-            Policy stsPolicy = rmd.getPolicyData().getIssuerPolicy();
+            Policy stsPolicy = (Policy)rmd.getMsgContext().getProperty(RampartMessageData.RAMPART_STS_POLICY);
+            
+            if( stsPolicy == null && issuedToken.getIssuerMex() != null) {
+                stsPolicy = RampartUtil.getPolicyFromMetadataRef(issuedToken.getIssuerMex());
+                RampartUtil.addRampartConfig(rmd, stsPolicy);
+            }
 
             String id = getToken(rmd, rstTemplate, issuerEprAddress, action,
                     stsPolicy);