Author: nandana
Date: Tue Jan 29 20:01:52 2008
New Revision: 616608

URL: http://svn.apache.org/viewvc?rev=616608&view=rev
Log:
fixing the issue https://issues.apache.org/jira/browse/RAMPART-135

Added:
    
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/PolicyValidatorCallbackHandler.java
Modified:
    
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java
    
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java
    
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/RampartConfigBuilder.java
    
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/RampartConfig.java
    
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/PolicyBasedResultsValidator.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java?rev=616608&r1=616607&r2=616608&view=diff
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java
 Tue Jan 29 20:01:52 2008
@@ -45,10 +45,12 @@
 import java.util.Set;
 import java.util.Vector;
 
-public class PolicyBasedResultsValidator {
+public class PolicyBasedResultsValidator implements 
PolicyValidatorCallbackHandler {
     
     private static Log log = 
LogFactory.getLog(PolicyBasedResultsValidator.class);
     
+    /** [EMAIL PROTECTED]
+     */
     public void validate(ValidatorData data, Vector results) 
     throws RampartException {
         
@@ -193,7 +195,7 @@
      * @param encryptedParts
      * @param signatureParts
      */
-    private void validateEncrSig(ValidatorData data,Vector encryptedParts, 
Vector signatureParts, Vector results) 
+    protected void validateEncrSig(ValidatorData data,Vector encryptedParts, 
Vector signatureParts, Vector results) 
     throws RampartException {
         ArrayList actions = getSigEncrActions(results);
         boolean sig = false; 
@@ -252,7 +254,7 @@
      * @param data
      * @param results
      */
-    private void validateSupportingTokens(ValidatorData data, Vector results) 
+    protected void validateSupportingTokens(ValidatorData data, Vector 
results) 
     throws RampartException {
         
         //Check for UsernameToken
@@ -272,7 +274,7 @@
      * @param suppTok
      * @throws RampartException
      */
-    private void handleSupportingTokens(Vector results, SupportingToken 
suppTok) throws RampartException {
+    protected void handleSupportingTokens(Vector results, SupportingToken 
suppTok) throws RampartException {
         
         if(suppTok == null) {
             return;
@@ -310,7 +312,7 @@
      * @param data
      * @param results
      */
-    private void validateProtectionOrder(ValidatorData data, Vector results) 
+    protected void validateProtectionOrder(ValidatorData data, Vector results) 
     throws RampartException {
         
         String protectionOrder = 
data.getRampartMessageData().getPolicyData().getProtectionOrder();
@@ -381,7 +383,7 @@
     }
 
 
-    private ArrayList getSigEncrActions(Vector results) {
+    protected ArrayList getSigEncrActions(Vector results) {
         ArrayList sigEncrActions = new ArrayList();
         for (Iterator iter = results.iterator(); iter.hasNext();) {
             Integer actInt = (Integer) ((WSSecurityEngineResult) iter.next())
@@ -395,7 +397,7 @@
         return sigEncrActions;
     }
 
-    private void validateEncryptedParts(ValidatorData data, Vector 
encryptedParts, Vector results) 
+    protected void validateEncryptedParts(ValidatorData data, Vector 
encryptedParts, Vector results) 
     throws RampartException {
         
         RampartMessageData rmd = data.getRampartMessageData();
@@ -430,7 +432,7 @@
         
     }
 
-    private void validateSignedPartsHeaders(ValidatorData data, Vector 
signatureParts, Vector results) 
+    protected void validateSignedPartsHeaders(ValidatorData data, Vector 
signatureParts, Vector results) 
     throws RampartException {
         
         RampartMessageData rmd = data.getRampartMessageData();
@@ -473,7 +475,7 @@
     }
 
     
-    private boolean isSignatureRequired(RampartMessageData rmd) {
+    protected boolean isSignatureRequired(RampartMessageData rmd) {
         RampartPolicyData rpd = rmd.getPolicyData();
         return (rpd.isSymmetricBinding() && rpd.getSignatureToken() != null) ||
                 (!rpd.isSymmetricBinding() && !rpd.isTransportBinding() && 
@@ -486,7 +488,7 @@
      * Verify that ts->Created is before 'now'
      * - testing that timestamp has not expired ('now' is before ts->Expires) 
is handled earlier by WSS4J
      */
-    private boolean verifyTimestamp(Timestamp timestamp, RampartMessageData 
rmd) throws RampartException {
+    protected boolean verifyTimestamp(Timestamp timestamp, RampartMessageData 
rmd) throws RampartException {
 
         Calendar cre = timestamp.getCreated();
         if (cre != null) {
@@ -660,7 +662,7 @@
     }
 
     
-    private ArrayList getEncryptedReferences(Vector results) {
+    protected ArrayList getEncryptedReferences(Vector results) {
         
         //there can be multiple ref lists
         ArrayList encrResults = getResults(results, WSConstants.ENCR);
@@ -687,7 +689,7 @@
     
     
     
-    private ArrayList getResults(Vector results, int action) {
+    protected ArrayList getResults(Vector results, int action) {
         
         ArrayList list = new ArrayList();
         
@@ -703,7 +705,7 @@
         return list;
     }
     
-    private boolean isUsernameTokenPresent(ValidatorData data) {
+    protected boolean isUsernameTokenPresent(ValidatorData data) {
         
         //TODO This can be integrated with supporting token processing
         // which also checks whether Username Tokens present
@@ -735,7 +737,7 @@
         
     }
     
-    private boolean isUsernameTokenPresent(SupportingToken suppTok) {
+    protected boolean isUsernameTokenPresent(SupportingToken suppTok) {
         
         if(suppTok == null) {
             return false;

Added: 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/PolicyValidatorCallbackHandler.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/PolicyValidatorCallbackHandler.java?rev=616608&view=auto
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/PolicyValidatorCallbackHandler.java
 (added)
+++ 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/PolicyValidatorCallbackHandler.java
 Tue Jan 29 20:01:52 2008
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * 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
+ *
+ *      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.
+ */
+package org.apache.rampart;
+
+import java.util.Vector;
+
+/**
+ * Callback handler interface to allow different implementations of policy 
based results validation.
+ * Default implementation is 
<code>org.apache.rampart.PolicyBasedResultsValidator</code>.
+ * Custom implementations could be provided in rampart config as shown in 
below example.
+ *  
+ * Example: 
+ * <PRE>
+ *  <ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy";> 
+ *   
<ramp:policyValidatorCbClass>xx.yy.CustomPolicyValidator</ramp:policyValidatorCbClass>
+ *    ...
+ *   </ramp:RampartConfig>
+ *  </PRE>
+ */
+
+public interface PolicyValidatorCallbackHandler {
+   /**
+    * Validate policy based results.
+    * 
+    * @param data validator data
+    * @param results policy based ws-security results 
+    * @throws RampartException Rampart exception
+    */ 
+   public abstract void validate(ValidatorData data, Vector results) throws 
RampartException;
+
+}
\ No newline at end of file

Modified: 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java?rev=616608&r1=616607&r2=616608&view=diff
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java
 Tue Jan 29 20:01:52 2008
@@ -197,8 +197,9 @@
                //Convert back to llom since the inflow cannot use DOOM
                msgCtx.setEnvelope(env);
                Axis2Util.useDOOM(false);
-
-               PolicyBasedResultsValidator validator = new 
PolicyBasedResultsValidator();
+                               
+               PolicyValidatorCallbackHandler validator = 
RampartUtil.getPolicyValidatorCB(msgCtx, rpd);
+               
                validator.validate(data, results);
 
                if(dotDebug){

Modified: 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/RampartConfigBuilder.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/RampartConfigBuilder.java?rev=616608&r1=616607&r2=616608&view=diff
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/RampartConfigBuilder.java
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/RampartConfigBuilder.java
 Tue Jan 29 20:01:52 2008
@@ -59,6 +59,11 @@
             rampartConfig.setPwCbClass(childElement.getText().trim());
         }
         
+        childElement = element.getFirstChildWithName(new QName(
+                RampartConfig.NS, RampartConfig.POLICY_VALIDATOR_CB_CLASS_LN));
+        if (childElement != null) {
+            
rampartConfig.setPolicyValidatorCbClass(childElement.getText().trim());
+        }        
                       
         // handle ssl config   
                childElement = element.getFirstChildWithName(new QName(

Modified: 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/RampartConfig.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/RampartConfig.java?rev=616608&r1=616607&r2=616608&view=diff
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/RampartConfig.java
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/RampartConfig.java
 Tue Jan 29 20:01:52 2008
@@ -34,6 +34,7 @@
  *  &lt;ramp:user&gt;alice&lt;/ramp:user&gt;
  *  &lt;ramp:encryptionUser&gt;bob&lt;/ramp:encryptionUser&gt;
  *  
&lt;ramp:passwordCallbackClass&gt;org.apache.axis2.security.PWCallback&lt;/ramp:passwordCallbackClass&gt;
+ *  
&lt;ramp:policyValidatorCbClass&gt;org.apache.axis2.security.ramp:PolicyValidatorCallbackHandler&lt;/ramp:policyValidatorCbClass&gt;
  *  &lt;ramp:timestampTTL&gt;300&lt;/ramp:timestampTTL&gt;
  *  &lt;ramp:timestampMaxSkew&gt;0&lt;/ramp:timestampMaxSkew&gt;
  *  
&lt;ramp:tokenStoreClass&gt;org.apache.rahas.StorageImpl&lt;/ramp:tokenStoreClass&gt;
@@ -76,6 +77,8 @@
     public final static String ENCRYPTION_USER_LN = "encryptionUser";
 
     public final static String PW_CB_CLASS_LN = "passwordCallbackClass";
+    
+    public final static String POLICY_VALIDATOR_CB_CLASS_LN = 
"policyValidatorCbClass";
 
     public final static String SIG_CRYPTO_LN = "signatureCrypto";
 
@@ -100,6 +103,8 @@
     private String encryptionUser;
 
     private String pwCbClass;
+    
+    private String policyValidatorCbClass;
 
     private CryptoConfig sigCryptoConfig;
 
@@ -172,6 +177,14 @@
     public void setPwCbClass(String pwCbClass) {
         this.pwCbClass = pwCbClass;
     }
+    
+    public String getPolicyValidatorCbClass() {
+        return this.policyValidatorCbClass;
+    }
+    
+    public void setPolicyValidatorCbClass(String policyValidatorCbClass) {
+        this.policyValidatorCbClass = policyValidatorCbClass;
+    }
 
     public CryptoConfig getSigCryptoConfig() {
         return sigCryptoConfig;
@@ -243,6 +256,12 @@
         if (getPwCbClass() != null) {
             writer.writeStartElement(NS, PW_CB_CLASS_LN);
             writer.writeCharacters(getPwCbClass());
+            writer.writeEndElement();
+        }
+        
+        if (getPolicyValidatorCbClass() != null) {
+            writer.writeStartElement(NS, POLICY_VALIDATOR_CB_CLASS_LN);
+            writer.writeCharacters(getPolicyValidatorCbClass());
             writer.writeEndElement();
         }
         

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=616608&r1=616607&r2=616608&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
 Tue Jan 29 20:01:52 2008
@@ -36,6 +36,8 @@
 import org.apache.rahas.TrustException;
 import org.apache.rahas.TrustUtil;
 import org.apache.rahas.client.STSClient;
+import org.apache.rampart.PolicyBasedResultsValidator;
+import org.apache.rampart.PolicyValidatorCallbackHandler;
 import org.apache.rampart.RampartException;
 import org.apache.rampart.RampartMessageData;
 import org.apache.rampart.policy.RampartPolicyData;
@@ -145,6 +147,48 @@
         
         return cbHandler;
     }
+    
+   /**
+    * Returns an instance of PolicyValidatorCallbackHandler to be used to 
validate ws-security results.
+    * 
+    * @param msgContext [EMAIL PROTECTED] MessageContext}
+    * @param rpd [EMAIL PROTECTED] RampartPolicyData}
+    * @return [EMAIL PROTECTED] PolicyValidatorCallbackHandler}
+    * @throws RampartException RampartException
+    */ 
+   public static PolicyValidatorCallbackHandler 
getPolicyValidatorCB(MessageContext msgContext, RampartPolicyData rpd) throws 
RampartException {
+        
+       PolicyValidatorCallbackHandler cbHandler;
+
+        if (rpd.getRampartConfig() != null && 
rpd.getRampartConfig().getPolicyValidatorCbClass() != null) {
+            
+            String cbHandlerClass = 
rpd.getRampartConfig().getPolicyValidatorCbClass();
+            ClassLoader classLoader = 
msgContext.getAxisService().getClassLoader();
+                
+            log.debug("loading class : " + cbHandlerClass);
+            
+            Class cbClass;
+            try {
+                cbClass = Loader.loadClass(classLoader, cbHandlerClass);
+            } catch (ClassNotFoundException e) {
+                throw new RampartException("cannotLoadPolicyValidatorCbClass", 
+                        new String[]{cbHandlerClass}, e);
+            }
+            try {
+                cbHandler = (PolicyValidatorCallbackHandler) 
cbClass.newInstance();
+            } catch (java.lang.Exception e) {
+                throw new 
RampartException("cannotCreatePolicyValidatorCallbackInstance",
+                        new String[]{cbHandlerClass}, e);
+            }
+            
+        } else { // Initialise default PolicyValidatorCallbackHandler...
+            cbHandler = new PolicyBasedResultsValidator();
+        }
+        
+        return cbHandler;
+    }
+    
+   
     
     /**
      * Perform a callback to get a password.


Reply via email to