Author: ruchithf
Date: Wed Nov  7 10:34:33 2007
New Revision: 592847

URL: http://svn.apache.org/viewvc?rev=592847&view=rev
Log:
Applied patch in RAMPART-106. Thanks Nandana

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/builder/BindingBuilder.java
    
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/SymmetricBindingBuilder.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=592847&r1=592846&r2=592847&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
 Wed Nov  7 10:34:33 2007
@@ -111,7 +111,7 @@
             }
         }
         
-        validateEncrSig(encryptedParts, signatureParts, results);
+        validateEncrSig(data,encryptedParts, signatureParts, results);
         
         if(!rpd.isTransportBinding()) {
             validateProtectionOrder(data, results);
@@ -179,7 +179,7 @@
      * @param encryptedParts
      * @param signatureParts
      */
-    private void validateEncrSig(Vector encryptedParts, Vector signatureParts, 
Vector results) 
+    private void validateEncrSig(ValidatorData data,Vector encryptedParts, 
Vector signatureParts, Vector results) 
     throws RampartException {
         ArrayList actions = getSigEncrActions(results);
         boolean sig = false; 
@@ -215,7 +215,8 @@
                     encrDataFound = true;
                 }
             }
-            if(encrDataFound) {
+            //TODO check whether the encrptedDataFound is an UsernameToken
+            if(encrDataFound && !isUsernameTokenPresent(data)) {
                 //Unexpected encryption
                 throw new RampartException("unexprectedEncryptedPart");
             }
@@ -669,4 +670,54 @@
         
         return list;
     }
+    
+    private boolean isUsernameTokenPresent(ValidatorData data) {
+        
+        //TODO This can be integrated with supporting token processing
+        // which also checks whether Username Tokens present
+        
+        RampartPolicyData rpd = data.getRampartMessageData().getPolicyData();
+        
+        SupportingToken suppTok = rpd.getSupportingTokens();
+        if(isUsernameTokenPresent(suppTok)){
+            return true;
+        }
+        
+        SupportingToken signedSuppToken = rpd.getSignedSupportingTokens();
+        if(isUsernameTokenPresent(signedSuppToken)) {
+            return true;
+        }
+        
+        SupportingToken signedEndSuppToken = 
rpd.getSignedEndorsingSupportingTokens();
+        if(isUsernameTokenPresent(signedEndSuppToken)) {
+            return true;
+        }
+        
+        SupportingToken endSuppToken = rpd.getEndorsingSupportingTokens();
+        if(isUsernameTokenPresent(endSuppToken)){
+            return true;
+        }
+        
+        return false;
+        
+        
+    }
+    
+    private boolean isUsernameTokenPresent(SupportingToken suppTok) {
+        
+        if(suppTok == null) {
+            return false;
+        }
+        
+        ArrayList tokens = suppTok.getTokens();
+        for (Iterator iter = tokens.iterator(); iter.hasNext();) {
+            Token token = (Token) iter.next();
+            if(token instanceof UsernameToken) {
+                return true;
+            }
+        }
+        
+        return false;
+    }
+    
 }

Modified: 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/BindingBuilder.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/BindingBuilder.java?rev=592847&r1=592846&r2=592847&view=diff
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/BindingBuilder.java
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/BindingBuilder.java
 Wed Nov  7 10:34:33 2007
@@ -72,6 +72,8 @@
     
     protected String mainSigId = null;
     
+    protected ArrayList usernameTokenIdList = new ArrayList();
+    
     protected Element timestampElement;
     
     
@@ -162,6 +164,7 @@
                 WSSecUsernameToken utBuilder = new WSSecUsernameToken();
                 
                 //TODO Get the UT type, only WS-SX spec supports this
+                utBuilder.setPasswordType(WSConstants.PASSWORD_TEXT);
                 utBuilder.setUserInfo(user, password);
                 
                 return utBuilder;
@@ -348,7 +351,9 @@
                     Element elem = utBuilder.getUsernameTokenElement();
                     RampartUtil.insertSiblingAfter(rmd, 
this.getInsertionLocation(), elem);
                     
-                    //Move the insert location to th enext element
+                    usernameTokenIdList.add(utBuilder.getId());
+                    
+                    //Move the insert location to the next element
                     this.setInsertionLocation(elem);
                     Date now = new Date();
                     try {

Modified: 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/SymmetricBindingBuilder.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/SymmetricBindingBuilder.java?rev=592847&r1=592846&r2=592847&view=diff
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/SymmetricBindingBuilder.java
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/SymmetricBindingBuilder.java
 Wed Nov  7 10:34:33 2007
@@ -313,8 +313,9 @@
                                        +", Signature tool :" + (t2 - t1) );
             }
             
-            //Check for signature protection
-            if(rpd.isSignatureProtection() && this.mainSigId != null) {
+            //Check for signature protection and encryption of UsernameToken
+            if(rpd.isSignatureProtection() && this.mainSigId != null || 
+                    usernameTokenIdList.size() > 0 && rmd.isInitiator()) {
                long t3 = 0, t4 = 0;
                if(dotDebug){
                        t3 = System.currentTimeMillis();
@@ -323,7 +324,15 @@
                 Vector secondEncrParts = new Vector();
                 
                 //Now encrypt the signature using the above token
-                secondEncrParts.add(new WSEncryptionPart(this.mainSigId, 
"Element"));
+                if(rpd.isSignatureProtection()) {
+                    secondEncrParts.add(new WSEncryptionPart(this.mainSigId, 
"Element"));
+                }
+                
+                if(rmd.isInitiator()) {
+                    for (int i = 0 ; i < usernameTokenIdList.size(); i++) {
+                        encrParts.add(new 
WSEncryptionPart((String)usernameTokenIdList.get(i),"Element"));
+                    }
+                }
                 
                 Element secondRefList = null;
                 
@@ -506,6 +515,13 @@
             //Now encrypt the signature using the above token
             encrParts.add(new WSEncryptionPart(this.mainSigId, "Element"));
         }
+        
+        if(rmd.isInitiator()) {
+            for (int i = 0 ; i < usernameTokenIdList.size(); i++) {
+                encrParts.add(new 
WSEncryptionPart((String)usernameTokenIdList.get(i),"Element"));
+            }
+        }
+        
         Element refList = null;
         
         if(encrToken.isDerivedKeys() || encrToken instanceof 
SecureConversationToken) {


Reply via email to