Consolidate some code in WS-Security/STS

Conflicts:
        
rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JUtils.java
        
rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractBindingBuilder.java
        
services/sts/sts-core/src/main/java/org/apache/cxf/sts/operation/AbstractOperation.java


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/c81e8d44
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/c81e8d44
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/c81e8d44

Branch: refs/heads/3.0.x-fixes
Commit: c81e8d440a5300e3b9390e2b8bb7b3aa8c70ad61
Parents: 0e9101f
Author: Colm O hEigeartaigh <cohei...@apache.org>
Authored: Mon Aug 17 16:56:06 2015 +0100
Committer: Colm O hEigeartaigh <cohei...@apache.org>
Committed: Mon Aug 17 16:56:40 2015 +0100

----------------------------------------------------------------------
 .../cxf/ws/security/wss4j/WSS4JUtils.java       | 68 ++++++++++++++++++++
 .../policyhandlers/AbstractBindingBuilder.java  |  5 +-
 .../cxf/sts/operation/AbstractOperation.java    |  8 ++-
 3 files changed, 79 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/c81e8d44/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JUtils.java
----------------------------------------------------------------------
diff --git 
a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JUtils.java 
b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JUtils.java
index d872a47..387fb56 100644
--- 
a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JUtils.java
+++ 
b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JUtils.java
@@ -22,7 +22,13 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
 import java.security.Key;
+import java.security.cert.X509Certificate;
 import java.util.Date;
+<<<<<<< HEAD
+=======
+import java.util.List;
+import java.util.Map;
+>>>>>>> 17dbc12... Consolidate some code in WS-Security/STS
 import java.util.Properties;
 
 import javax.crypto.SecretKey;
@@ -49,6 +55,13 @@ import org.apache.wss4j.common.crypto.Crypto;
 import org.apache.wss4j.common.crypto.CryptoFactory;
 import org.apache.wss4j.common.crypto.PasswordEncryptor;
 import org.apache.wss4j.common.ext.WSSecurityException;
+<<<<<<< HEAD
+=======
+import org.apache.wss4j.common.util.Loader;
+import org.apache.wss4j.dom.WSConstants;
+import org.apache.wss4j.dom.WSSecurityEngineResult;
+import org.apache.wss4j.dom.handler.WSHandlerResult;
+>>>>>>> 17dbc12... Consolidate some code in WS-Security/STS
 import org.apache.wss4j.stax.ext.WSSConstants;
 import org.apache.wss4j.stax.securityToken.WSSecurityTokenConstants;
 import org.apache.xml.security.exceptions.XMLSecurityException;
@@ -350,4 +363,59 @@ public final class WSS4JUtils {
         return CryptoFactory.getInstance(propFilename, classLoader);
     }
     
+<<<<<<< HEAD
+=======
+    public static Crypto getSignatureCrypto(
+        Object s, 
+        SoapMessage message, 
+        PasswordEncryptor passwordEncryptor
+    ) throws WSSecurityException {
+        Crypto signCrypto = null;
+        if (s instanceof Crypto) {
+            signCrypto = (Crypto)s;
+        } else if (s != null) {
+            URL propsURL = SecurityUtils.loadResource(message, s);
+            Properties props = WSS4JUtils.getProps(s, propsURL);
+            if (props == null) {
+                LOG.fine("Cannot find Crypto Signature properties: " + s);
+                Exception ex = new Exception("Cannot find Crypto Signature 
properties: " + s);
+                throw new 
WSSecurityException(WSSecurityException.ErrorCode.FAILURE, ex);
+            }
+            
+            signCrypto = CryptoFactory.getInstance(props, 
Loader.getClassLoader(CryptoFactory.class),
+                                                   passwordEncryptor);
+
+            EndpointInfo info = 
message.getExchange().getEndpoint().getEndpointInfo();
+            synchronized (info) {
+                info.setProperty(SecurityConstants.SIGNATURE_CRYPTO, 
signCrypto);
+            }
+        }
+        return signCrypto;
+    }
+    
+    /**
+     * Get the certificate that was used to sign the request
+     */
+    public static X509Certificate getReqSigCert(List<WSHandlerResult> results) 
{
+        if (results == null || results.isEmpty()) {
+            return null;
+        }
+        
+        for (WSHandlerResult rResult : results) {
+            List<WSSecurityEngineResult> signedResults = 
+                rResult.getActionResults().get(WSConstants.SIGN);
+            
+            if (signedResults != null && !signedResults.isEmpty()) {
+                for (WSSecurityEngineResult signedResult : signedResults) {
+                    if 
(signedResult.containsKey(WSSecurityEngineResult.TAG_X509_CERTIFICATE)) {
+                        return (X509Certificate)signedResult.get(
+                            WSSecurityEngineResult.TAG_X509_CERTIFICATE);
+                    }
+                }
+            }
+        }
+        
+        return null;
+    }
+>>>>>>> 17dbc12... Consolidate some code in WS-Security/STS
 }

http://git-wip-us.apache.org/repos/asf/cxf/blob/c81e8d44/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractBindingBuilder.java
----------------------------------------------------------------------
diff --git 
a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractBindingBuilder.java
 
b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractBindingBuilder.java
index 62b016c..6a992cb 100644
--- 
a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractBindingBuilder.java
+++ 
b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractBindingBuilder.java
@@ -1611,7 +1611,7 @@ public abstract class AbstractBindingBuilder extends 
AbstractCommonBindingHandle
                 CastUtils.cast((List<?>)
                     
message.getExchange().getInMessage().get(WSHandlerConstants.RECV_RESULTS));
             if (results != null) {
-                encrKeyBuilder.setUseThisCert(getReqSigCert(results));
+                
encrKeyBuilder.setUseThisCert(WSS4JUtils.getReqSigCert(results));
                  
                 //TODO This is a hack, this should not come under 
USE_REQ_SIG_CERT
                 if (encrKeyBuilder.isCertSet()) {
@@ -1627,6 +1627,7 @@ public abstract class AbstractBindingBuilder extends 
AbstractCommonBindingHandle
         return encrUser;
     }
     
+<<<<<<< HEAD
     private static X509Certificate getReqSigCert(List<WSHandlerResult> 
results) {
         /*
         * Scan the results for a matching actor. Use results only if the
@@ -1650,6 +1651,8 @@ public abstract class AbstractBindingBuilder extends 
AbstractCommonBindingHandle
         return null;
     }
     
+=======
+>>>>>>> 17dbc12... Consolidate some code in WS-Security/STS
     /**
      * Scan through <code>WSHandlerResult<code> list for a Username token and 
return
      * the username if a Username Token found 

http://git-wip-us.apache.org/repos/asf/cxf/blob/c81e8d44/services/sts/sts-core/src/main/java/org/apache/cxf/sts/operation/AbstractOperation.java
----------------------------------------------------------------------
diff --git 
a/services/sts/sts-core/src/main/java/org/apache/cxf/sts/operation/AbstractOperation.java
 
b/services/sts/sts-core/src/main/java/org/apache/cxf/sts/operation/AbstractOperation.java
index 4146a3f..f91edee 100644
--- 
a/services/sts/sts-core/src/main/java/org/apache/cxf/sts/operation/AbstractOperation.java
+++ 
b/services/sts/sts-core/src/main/java/org/apache/cxf/sts/operation/AbstractOperation.java
@@ -76,10 +76,10 @@ import 
org.apache.cxf.ws.security.sts.provider.model.secext.ReferenceType;
 import 
org.apache.cxf.ws.security.sts.provider.model.secext.SecurityTokenReferenceType;
 import 
org.apache.cxf.ws.security.sts.provider.model.utility.AttributedDateTime;
 import org.apache.cxf.ws.security.tokenstore.TokenStore;
+import org.apache.cxf.ws.security.wss4j.WSS4JUtils;
 import org.apache.wss4j.common.WSEncryptionPart;
 import org.apache.wss4j.common.ext.WSSecurityException;
 import org.apache.wss4j.dom.WSConstants;
-import org.apache.wss4j.dom.WSSecurityEngineResult;
 import org.apache.wss4j.dom.handler.WSHandlerConstants;
 import org.apache.wss4j.dom.handler.WSHandlerResult;
 import org.apache.wss4j.dom.message.WSSecEncrypt;
@@ -543,6 +543,7 @@ public abstract class AbstractOperation {
         List<WSHandlerResult> results = 
             (List<WSHandlerResult>) 
context.get(WSHandlerConstants.RECV_RESULTS);
         // DOM
+<<<<<<< HEAD
         if (results != null) {
             for (WSHandlerResult rResult : results) {
                 List<WSSecurityEngineResult> wsSecEngineResults = 
rResult.getResults();
@@ -558,6 +559,11 @@ public abstract class AbstractOperation {
                     }
                 }
             }
+=======
+        X509Certificate cert = WSS4JUtils.getReqSigCert(results);
+        if (cert != null) {
+            return cert;
+>>>>>>> 17dbc12... Consolidate some code in WS-Security/STS
         }
         
         // Streaming

Reply via email to