Author: nandana
Date: Fri Aug 28 08:00:48 2009
New Revision: 808800
URL: http://svn.apache.org/viewvc?rev=808800&view=rev
Log:
RAMPART-200 Applying the patch. Thanks Prabath
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/AsymmetricBindingBuilder.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
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/TransportBindingBuilder.java
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/RampartPolicyData.java
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java
webservices/rampart/trunk/java/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/X509Token.java
webservices/rampart/trunk/java/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/X509TokenBuilder.java
webservices/rampart/trunk/java/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/X509TokenBuilder.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=808800&r1=808799&r2=808800&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
Fri Aug 28 08:00:48 2009
@@ -22,6 +22,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.rampart.policy.RampartPolicyData;
+import org.apache.rampart.policy.SupportingPolicyData;
import org.apache.rampart.util.RampartUtil;
import org.apache.ws.secpolicy.SPConstants;
import org.apache.ws.secpolicy.model.*;
@@ -112,6 +113,17 @@
new
WSEncryptionPart("SignedEndorsingSupportingTokens"));
}
}
+
+ Vector supportingToks = rpd.getSupportingTokensList();
+ for (int i = 0; i < supportingToks.size(); i++) {
+ SupportingToken supportingToken = (SupportingToken)
supportingToks.get(i);
+ if (supportingToken != null) {
+ SupportingPolicyData policyData = new
SupportingPolicyData();
+ policyData.build(supportingToken);
+
encryptedParts.addAll(RampartUtil.getSupportingEncryptedParts(rmd, policyData));
+
signatureParts.addAll(RampartUtil.getSupportingSignedParts(rmd, policyData));
+ }
+ }
}
validateEncrSig(data,encryptedParts, signatureParts, results);
@@ -248,8 +260,11 @@
//Check for UsernameToken
RampartPolicyData rpd = data.getRampartMessageData().getPolicyData();
- SupportingToken suppTok = rpd.getSupportingTokens();
- handleSupportingTokens(results, suppTok);
+ Vector supportingToks = rpd.getSupportingTokensList();
+ for (int i = 0; i < supportingToks.size(); i++) {
+ SupportingToken suppTok = (SupportingToken) supportingToks.get(i);
+ handleSupportingTokens(results, suppTok);
+ }
SupportingToken signedSuppToken = rpd.getSignedSupportingTokens();
handleSupportingTokens(results, signedSuppToken);
SupportingToken signedEndSuppToken =
rpd.getSignedEndorsingSupportingTokens();
@@ -529,18 +544,22 @@
Node envelope = rmd.getDocument().getFirstChild();
- WSSecurityEngineResult actionResult = WSSecurityUtil.fetchActionResult(
- results, WSConstants.SIGN);
+ WSSecurityEngineResult[] actionResults = fetchActionResults(results,
WSConstants.SIGN);
// Find elements that are signed
Vector actuallySigned = new Vector();
- if( actionResult != null ) {
- Set signedIDs =
(Set)actionResult.get(WSSecurityEngineResult.TAG_SIGNED_ELEMENT_IDS);
- for (Iterator i = signedIDs.iterator(); i.hasNext();) {
- String e = (String) i.next();
-
- Element element = WSSecurityUtil.findElementById(envelope, e,
WSConstants.WSU_NS);
- actuallySigned.add( element );
+ if (actionResults != null) {
+ for (int j = 0; j < actionResults.length; j++) {
+ WSSecurityEngineResult actionResult = actionResults[j];
+ Set signedIDs = (Set) actionResult
+ .get(WSSecurityEngineResult.TAG_SIGNED_ELEMENT_IDS);
+ for (Iterator i = signedIDs.iterator(); i.hasNext();) {
+ String e = (String) i.next();
+
+ Element element = WSSecurityUtil.findElementById(envelope,
e,
+ WSConstants.WSU_NS);
+ actuallySigned.add(element);
+ }
}
}
@@ -826,9 +845,12 @@
RampartPolicyData rpd = data.getRampartMessageData().getPolicyData();
- SupportingToken suppTok = rpd.getSupportingTokens();
- if(isUsernameTokenPresent(suppTok)){
- return true;
+ Vector supportingToks = rpd.getSupportingTokensList();
+ for (int i = 0; i < supportingToks.size(); i++) {
+ SupportingToken suppTok = (SupportingToken) supportingToks.get(i);
+ if (isUsernameTokenPresent(suppTok)) {
+ return true;
+ }
}
SupportingToken signedSuppToken = rpd.getSignedSupportingTokens();
@@ -897,6 +919,24 @@
}
+ public static WSSecurityEngineResult[] fetchActionResults(Vector
wsResultVector, int action) {
+ List wsResult = new ArrayList();
+
+ // Find the part of the security result that matches the given action
+ for (int i = 0; i < wsResultVector.size(); i++) {
+ // Check the result of every action whether it matches the given
action
+ WSSecurityEngineResult result = (WSSecurityEngineResult)
wsResultVector.get(i);
+ int resultAction = ((java.lang.Integer)
result.get(WSSecurityEngineResult.TAG_ACTION))
+ .intValue();
+ if (resultAction == action) {
+ wsResult.add((WSSecurityEngineResult) wsResultVector.get(i));
+ }
+ }
+
+ return (WSSecurityEngineResult[]) wsResult.toArray(new
WSSecurityEngineResult[wsResult
+ .size()]);
+ }
+
private boolean isRefIdPresent(ArrayList refList , QName qname) {
for (int i = 0; i < refList.size() ; i++) {
Modified:
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/AsymmetricBindingBuilder.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/AsymmetricBindingBuilder.java?rev=808800&r1=808799&r2=808800&view=diff
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/AsymmetricBindingBuilder.java
(original)
+++
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/AsymmetricBindingBuilder.java
Fri Aug 28 08:00:48 2009
@@ -24,12 +24,14 @@
import org.apache.rampart.RampartException;
import org.apache.rampart.RampartMessageData;
import org.apache.rampart.policy.RampartPolicyData;
+import org.apache.rampart.policy.SupportingPolicyData;
import org.apache.rampart.policy.model.RampartConfig;
import org.apache.rampart.util.RampartUtil;
import org.apache.ws.secpolicy.SPConstants;
import org.apache.ws.secpolicy.model.AlgorithmSuite;
import org.apache.ws.secpolicy.model.SupportingToken;
import org.apache.ws.secpolicy.model.Token;
+import org.apache.ws.secpolicy.model.X509Token;
import org.apache.ws.security.WSConstants;
import org.apache.ws.security.WSEncryptionPart;
import org.apache.ws.security.WSSecurityException;
@@ -236,8 +238,10 @@
SupportingToken sgndEndEncSuppTokens =
rpd.getSignedEndorsingEncryptedSupportingTokens();
sgndEndEncSuppTokMap = this.handleSupportingTokens(rmd,
sgndEndEncSuppTokens);
- SupportingToken supportingToks = rpd.getSupportingTokens();
- this.handleSupportingTokens(rmd, supportingToks);
+ Vector supportingToks = rpd.getSupportingTokensList();
+ for (int i = 0; i < supportingToks.size(); i++) {
+ this.handleSupportingTokens(rmd,
(SupportingToken)supportingToks.get(i));
+ }
SupportingToken encryptedSupportingToks =
rpd.getEncryptedSupportingTokens();
this.handleSupportingTokens(rmd, encryptedSupportingToks);
@@ -390,8 +394,10 @@
SupportingToken sgndEndEncSuppTokens =
rpd.getSignedEndorsingEncryptedSupportingTokens();
sgndEndEncSuppTokMap = this.handleSupportingTokens(rmd,
sgndEndEncSuppTokens);
- SupportingToken supportingToks = rpd.getSupportingTokens();
- this.handleSupportingTokens(rmd, supportingToks);
+ Vector supportingToks = rpd.getSupportingTokensList();
+ for (int i = 0; i < supportingToks.size(); i++) {
+ this.handleSupportingTokens(rmd,
(SupportingToken)supportingToks.get(i));
+ }
SupportingToken encryptedSupportingToks =
rpd.getEncryptedSupportingTokens();
this.handleSupportingTokens(rmd, encryptedSupportingToks);
@@ -413,6 +419,23 @@
this.doSignature(rmd);
}
+ Vector supportingToks = rpd.getSupportingPolicyData();
+ for (int i = 0; i < supportingToks.size(); i++) {
+ SupportingPolicyData policyData = null;
+ if (supportingToks.get(i) != null) {
+ policyData = (SupportingPolicyData) supportingToks.get(i);
+ Vector supportingSigParts =
RampartUtil.getSupportingSignedParts(rmd,
+ policyData);
+
+ if (supportingSigParts.size() > 0
+ && ((rmd.isInitiator() && rpd.getInitiatorToken() !=
null) || (!rmd
+ .isInitiator() && rpd.getRecipientToken() !=
null))) {
+ // Do signature for policies defined under SupportingToken.
+ this.doSupportingSignature(rmd,
supportingSigParts,policyData);
+ }
+ }
+ }
+
//Do endorsed signature
if (rmd.isInitiator()) {
@@ -546,6 +569,22 @@
}
}
+ Vector supportingTokens = rpd.getSupportingPolicyData();
+ for (int i = 0; i < supportingTokens.size(); i++) {
+ SupportingPolicyData policyData = null;
+ if (supportingTokens.get(i) != null) {
+ policyData = (SupportingPolicyData) supportingTokens.get(i);
+ Token supportingEncrToken = policyData.getEncryptionToken();
+ Vector supoortingEncrParts =
RampartUtil.getSupportingEncryptedParts(rmd,
+ policyData);
+
+ if (supportingEncrToken != null && supoortingEncrParts.size()
> 0) {
+ doEncryptionWithSupportingToken(rpd, rmd,
supportingEncrToken, doc,
+ supoortingEncrParts);
+ }
+ }
+ }
+
if(dotDebug){
t2 = System.currentTimeMillis();
tlog.debug("Signature took :" + (t1 - t0)
@@ -553,6 +592,57 @@
}
}
+
+ private void doSupportingSignature(RampartMessageData rmd, Vector
supportingSigParts,
+ SupportingPolicyData supportingData) throws RampartException {
+
+ Token supportingSigToken;
+ WSSecSignature supportingSig;
+ Element supportingSignatureElement;
+
+ long t0 = 0, t1 = 0;
+ if (dotDebug) {
+ t0 = System.currentTimeMillis();
+ }
+
+ supportingSigToken = supportingData.getSignatureToken();
+
+ if (!(supportingSigToken instanceof X509Token)) {
+ return;
+ }
+ supportingSig = this.getSignatureBuider(rmd, supportingSigToken,
+ ((X509Token) supportingSigToken).getUserCertAlias());
+ Element bstElem = supportingSig.getBinarySecurityTokenElement();
+ if (bstElem != null) {
+ bstElem = RampartUtil.insertSiblingAfter(rmd,
this.getInsertionLocation(), bstElem);
+ this.setInsertionLocation(bstElem);
+ }
+
+ if (rmd.getPolicyData().isTokenProtection() &&
supportingSig.getBSTTokenId() != null) {
+ supportingSigParts.add(new
WSEncryptionPart(supportingSig.getBSTTokenId()));
+ }
+
+ try {
+ supportingSig.addReferencesToSign(supportingSigParts,
rmd.getSecHeader());
+ supportingSig.computeSignature();
+
+ supportingSignatureElement = supportingSig.getSignatureElement();
+
+ this.setInsertionLocation(RampartUtil.insertSiblingAfter(rmd, this
+ .getInsertionLocation(), supportingSignatureElement));
+
+ } catch (WSSecurityException e) {
+ throw new RampartException("errorInSignatureWithX509Token", e);
+ }
+
+ signatureValues.add(supportingSig.getSignatureValue());
+
+ if (dotDebug) {
+ t1 = System.currentTimeMillis();
+ tlog.debug("Signature took :" + (t1 - t0));
+ }
+
+ }
private void doSignature(RampartMessageData rmd) throws RampartException {
@@ -658,6 +748,55 @@
}
}
+
+ private void doEncryptionWithSupportingToken(RampartPolicyData rpd,
RampartMessageData rmd,
+ Token encrToken, Document doc, Vector encrParts) throws
RampartException {
+ Element refList = null;
+ try {
+ if (!(encrToken instanceof X509Token)) {
+ return;
+ }
+
+ WSSecEncrypt encr = new WSSecEncrypt();
+
+ RampartUtil.setKeyIdentifierType(rpd, encr, encrToken);
+
+ encr.setWsConfig(rmd.getConfig());
+
+ encr.setDocument(doc);
+ RampartUtil.setEncryptionUser(rmd, encr, ((X509Token)
encrToken).getEncryptionUser());
+
encr.setSymmetricEncAlgorithm(rpd.getAlgorithmSuite().getEncryption());
+ encr.setKeyEncAlgo(rpd.getAlgorithmSuite().getAsymmetricKeyWrap());
+ encr.prepare(doc,
RampartUtil.getEncryptionCrypto(rpd.getRampartConfig(), rmd
+ .getCustomClassLoader()));
+
+ if (this.timestampElement != null) {
+ this.setInsertionLocation(this.timestampElement);
+ } else {
+ this.setInsertionLocation(null);
+ }
+
+ if (encr.getBSTTokenId() != null) {
+
this.setInsertionLocation(RampartUtil.insertSiblingAfterOrPrepend(rmd, this
+ .getInsertionLocation(),
encr.getBinarySecurityTokenElement()));
+ }
+
+ Element encryptedKeyElement = encr.getEncryptedKeyElement();
+
+ // Encrypt, get hold of the ref list and add it
+ refList = encr.encryptForInternalRef(null, encrParts);
+
+ // Add internal refs
+ encryptedKeyElement.appendChild(refList);
+
+
this.setInsertionLocation(RampartUtil.insertSiblingAfterOrPrepend(rmd, this
+ .getInsertionLocation(), encryptedKeyElement));
+
+ } catch (WSSecurityException e) {
+ throw new RampartException("errorInEncryption", e);
+ }
+ }
+
/**
* @param rmd
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=808800&r1=808799&r2=808800&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
Fri Aug 28 08:00:48 2009
@@ -26,6 +26,7 @@
import org.apache.rampart.RampartException;
import org.apache.rampart.RampartMessageData;
import org.apache.rampart.policy.RampartPolicyData;
+import org.apache.rampart.policy.SupportingPolicyData;
import org.apache.rampart.util.RampartUtil;
import org.apache.ws.secpolicy.Constants;
import org.apache.ws.secpolicy.SPConstants;
@@ -230,8 +231,13 @@
}
}
+ protected WSSecSignature getSignatureBuider(RampartMessageData rmd, Token
token)
+ throws RampartException {
+ return getSignatureBuider(rmd, token, null);
+ }
- protected WSSecSignature getSignatureBuider(RampartMessageData rmd, Token
token) throws RampartException {
+ protected WSSecSignature getSignatureBuider(RampartMessageData rmd, Token
token,
+ String userCertAlias) throws RampartException {
RampartPolicyData rpd = rmd.getPolicyData();
@@ -245,8 +251,14 @@
String user = null;
+ if (userCertAlias != null) {
+ user = userCertAlias;
+ }
+
// Get the user - First check whether userCertAlias present
- user = rpd.getRampartConfig().getUserCertAlias();
+ if (user == null) {
+ user = rpd.getRampartConfig().getUserCertAlias();
+ }
// If userCertAlias is not present, use user property as Alias
@@ -365,6 +377,12 @@
this.getInsertionLocation(), bstElem);
this.setInsertionLocation(bstElem);
+ SupportingPolicyData supportingPolcy = new
SupportingPolicyData();
+ supportingPolcy.build(suppTokens);
+ supportingPolcy.setSignatureToken(token);
+ supportingPolcy.setEncryptionToken(token);
+
rmd.getPolicyData().addSupportingPolicyData(supportingPolcy);
+
if (suppTokens.isEncryptedToken()) {
this.encryptedTokensIdList.add(sig.getBSTTokenId());
}
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=808800&r1=808799&r2=808800&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
Fri Aug 28 08:00:48 2009
@@ -285,8 +285,10 @@
SupportingToken sgndEndEncSuppTokens =
rpd.getSignedEndorsingEncryptedSupportingTokens();
sgndEndEncSuppTokMap = this.handleSupportingTokens(rmd,
sgndEndEncSuppTokens);
- SupportingToken supportingToks = rpd.getSupportingTokens();
- this.handleSupportingTokens(rmd, supportingToks);
+ Vector supportingToks = rpd.getSupportingTokensList();
+ for (int i = 0; i < supportingToks.size(); i++) {
+ this.handleSupportingTokens(rmd,
(SupportingToken)supportingToks.get(i));
+ }
SupportingToken encryptedSupportingToks =
rpd.getEncryptedSupportingTokens();
this.handleSupportingTokens(rmd, encryptedSupportingToks);
@@ -484,8 +486,10 @@
SupportingToken sgndEndEncSuppTokens =
rpd.getSignedEndorsingEncryptedSupportingTokens();
sgndEndEncSuppTokMap = this.handleSupportingTokens(rmd,
sgndEndEncSuppTokens);
- SupportingToken supportingToks = rpd.getSupportingTokens();
- this.handleSupportingTokens(rmd, supportingToks);
+ Vector supportingToks = rpd.getSupportingTokensList();
+ for (int i = 0; i < supportingToks.size(); i++) {
+ this.handleSupportingTokens(rmd,
(SupportingToken)supportingToks.get(i));
+ }
SupportingToken encryptedSupportingToks =
rpd.getEncryptedSupportingTokens();
this.handleSupportingTokens(rmd, encryptedSupportingToks);
Modified:
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/TransportBindingBuilder.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/TransportBindingBuilder.java?rev=808800&r1=808799&r2=808800&view=diff
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/TransportBindingBuilder.java
(original)
+++
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/TransportBindingBuilder.java
Fri Aug 28 08:00:48 2009
@@ -150,8 +150,10 @@
}
- SupportingToken supportingToks = rpd.getSupportingTokens();
- this.handleSupportingTokens(rmd, supportingToks);
+ Vector supportingToks = rpd.getSupportingTokensList();
+ for (int i = 0; i < supportingToks.size(); i++) {
+ this.handleSupportingTokens(rmd,
(SupportingToken)supportingToks.get(i));
+ }
//Store the signature values vector
Modified:
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/RampartPolicyData.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/RampartPolicyData.java?rev=808800&r1=808799&r2=808800&view=diff
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/RampartPolicyData.java
(original)
+++
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/policy/RampartPolicyData.java
Fri Aug 28 08:00:48 2009
@@ -114,7 +114,7 @@
/*
* Holds the supporting tokens elements
*/
- private SupportingToken supportingTokens;
+ //private SupportingToken supportingTokens;
private SupportingToken signedSupportingTokens;
@@ -148,6 +148,18 @@
private Policy issuerPolicy;
+ private Vector supportingPolicyData = new Vector();
+
+ private Vector supportingTokens = new Vector();
+
+ public Vector getSupportingPolicyData() {
+ return supportingPolicyData;
+ }
+
+ public void addSupportingPolicyData(SupportingPolicyData
supportingPolicyData) {
+ this.supportingPolicyData.add(supportingPolicyData);
+ }
+
/**
* @return Returns the symmetricBinding.
*/
@@ -483,7 +495,7 @@
int tokenType = suppTokens.getTokenType();
if (tokenType == SPConstants.SUPPORTING_TOKEN_SUPPORTING) {
- supportingTokens = suppTokens;
+ supportingTokens.add(suppTokens);
} else if (tokenType == SPConstants.SUPPORTING_TOKEN_SIGNED) {
signedSupportingTokens = suppTokens;
} else if (tokenType == SPConstants.SUPPORTING_TOKEN_ENDORSING) {
@@ -647,12 +659,20 @@
}
/**
- * @return Returns the supportingToken.
+ * @return Returns the supportingTokenList.
*/
- public SupportingToken getSupportingTokens() {
+ public Vector getSupportingTokensList() {
return supportingTokens;
}
+ public SupportingToken getSupportingTokens() {
+ if (supportingTokens.size() > 0) {
+ return (SupportingToken) supportingTokens.get(0);
+ } else {
+ return null;
+ }
+ }
+
/**
* @param encryptedSupportingTokens The encryptedSupportingToken to set.
*/
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=808800&r1=808799&r2=808800&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
Fri Aug 28 08:00:48 2009
@@ -56,6 +56,7 @@
import org.apache.rampart.RampartException;
import org.apache.rampart.RampartMessageData;
import org.apache.rampart.policy.RampartPolicyData;
+import org.apache.rampart.policy.SupportingPolicyData;
import org.apache.rampart.policy.model.CryptoConfig;
import org.apache.rampart.policy.model.RampartConfig;
import org.apache.ws.secpolicy.SPConstants;
@@ -810,6 +811,19 @@
return getPartsAndElements(true, envelope, rpd.isSignBody(),
rpd.getSignedParts(), rpd.getSignedElements(), rpd.getDeclaredNamespaces());
}
+ public static Vector getSupportingEncryptedParts(RampartMessageData rmd,
+ SupportingPolicyData rpd) {
+ SOAPEnvelope envelope = rmd.getMsgContext().getEnvelope();
+ return getPartsAndElements(false, envelope, rpd.isEncryptBody(),
rpd.getEncryptedParts(),
+ rpd.getEncryptedElements(), rpd.getDeclaredNamespaces());
+ }
+
+ public static Vector getSupportingSignedParts(RampartMessageData rmd,
SupportingPolicyData rpd) {
+ SOAPEnvelope envelope = rmd.getMsgContext().getEnvelope();
+ return getPartsAndElements(true, envelope, rpd.isSignBody(),
rpd.getSignedParts(), rpd
+ .getSignedElements(), rpd.getDeclaredNamespaces());
+ }
+
public static Set findAllPrefixNamespaces(OMElement currentElement,
HashMap decNamespacess)
{
Set results = new HashSet();
@@ -1149,10 +1163,22 @@
}
}
- public static void setEncryptionUser(RampartMessageData rmd,
WSSecEncryptedKey encrKeyBuilder) throws RampartException {
+ public static void setEncryptionUser(RampartMessageData rmd,
WSSecEncryptedKey encrKeyBuilder)
+ throws RampartException {
RampartPolicyData rpd = rmd.getPolicyData();
String encrUser = rpd.getRampartConfig().getEncryptionUser();
- if(encrUser == null || "".equals(encrUser)) {
+ setEncryptionUser(rmd, encrKeyBuilder, encrUser);
+ }
+
+ public static void setEncryptionUser(RampartMessageData rmd,
WSSecEncryptedKey encrKeyBuilder,
+ String encrUser) throws RampartException {
+ RampartPolicyData rpd = rmd.getPolicyData();
+
+ if (encrUser == null) {
+ encrUser = rpd.getRampartConfig().getEncryptionUser();
+ }
+
+ if (encrUser == null || "".equals(encrUser)) {
throw new RampartException("missingEncryptionUser");
}
if(encrUser.equals(WSHandlerConstants.USE_REQ_SIG_CERT)) {
@@ -1426,9 +1452,12 @@
if (!initiator && inflow || initiator && !inflow ) {
- supportingTokens = rpd.getSupportingTokens();
- if (supportingTokens != null &&
supportingTokens.getTokens().size() != 0) {
- return true;
+ Vector supportingToks = rpd.getSupportingTokensList();
+ for (int i = 0; i < supportingToks.size(); i++) {
+ supportingTokens = (SupportingToken) supportingToks.get(i);
+ if (supportingTokens != null &&
supportingTokens.getTokens().size() != 0) {
+ return true;
+ }
}
supportingTokens = rpd.getSignedSupportingTokens();
Modified:
webservices/rampart/trunk/java/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/X509Token.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/X509Token.java?rev=808800&r1=808799&r2=808800&view=diff
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/X509Token.java
(original)
+++
webservices/rampart/trunk/java/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/X509Token.java
Fri Aug 28 08:00:48 2009
@@ -38,6 +38,26 @@
private String tokenVersionAndType = Constants.WSS_X509_V3_TOKEN10;
+ private String encryptionUser;
+
+ private String userCertAlias;
+
+ public String getEncryptionUser() {
+ return encryptionUser;
+ }
+
+ public void setEncryptionUser(String encryptionUser) {
+ this.encryptionUser = encryptionUser;
+ }
+
+ public String getUserCertAlias() {
+ return userCertAlias;
+ }
+
+ public void setUserCertAlias(String userCertAlias) {
+ this.userCertAlias = userCertAlias;
+ }
+
public X509Token(int version) {
setVersion(version);
}
Modified:
webservices/rampart/trunk/java/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/X509TokenBuilder.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/X509TokenBuilder.java?rev=808800&r1=808799&r2=808800&view=diff
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/X509TokenBuilder.java
(original)
+++
webservices/rampart/trunk/java/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/X509TokenBuilder.java
Fri Aug 28 08:00:48 2009
@@ -32,6 +32,19 @@
import org.apache.ws.secpolicy.model.X509Token;
public class X509TokenBuilder implements AssertionBuilder {
+
+ public final static String USER_CERT_ALIAS_LN = "userCertAlias";
+
+ public final static String ENCRYPTION_USER_LN = "encryptionUser";
+
+ public static final QName RAMPART_CONFIG = new
QName("http://ws.apache.org/rampart/policy",
+ "RampartConfig");
+
+ public static final QName USER_CERT_ALIAS = new
QName("http://ws.apache.org/rampart/policy",
+ USER_CERT_ALIAS_LN);
+
+ public static final QName ENCRYPTION_USER = new
QName("http://ws.apache.org/rampart/policy",
+ ENCRYPTION_USER_LN);
public Assertion build(OMElement element, AssertionBuilderFactory factory)
throws IllegalArgumentException {
@@ -66,6 +79,21 @@
break;
}
}
+
+ if (x509Token != null && policyElement != null) {
+ OMElement ramp = null;
+ ramp = policyElement.getFirstChildWithName(RAMPART_CONFIG);
+ if (ramp != null) {
+ OMElement child = null;
+ if ((child = ramp.getFirstChildWithName(USER_CERT_ALIAS)) !=
null) {
+ x509Token.setUserCertAlias(child.getText());
+ }
+ if ((child = ramp.getFirstChildWithName(ENCRYPTION_USER)) !=
null) {
+ x509Token.setEncryptionUser(child.getText());
+ }
+ }
+ }
+
return x509Token;
}
Modified:
webservices/rampart/trunk/java/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/X509TokenBuilder.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/X509TokenBuilder.java?rev=808800&r1=808799&r2=808800&view=diff
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/X509TokenBuilder.java
(original)
+++
webservices/rampart/trunk/java/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/X509TokenBuilder.java
Fri Aug 28 08:00:48 2009
@@ -32,6 +32,19 @@
import org.apache.ws.secpolicy.model.X509Token;
public class X509TokenBuilder implements AssertionBuilder {
+
+ public final static String USER_CERT_ALIAS_LN = "userCertAlias";
+
+ public final static String ENCRYPTION_USER_LN = "encryptionUser";
+
+ public static final QName RAMPART_CONFIG = new
QName("http://ws.apache.org/rampart/policy",
+ "RampartConfig");
+
+ public static final QName USER_CERT_ALIAS = new
QName("http://ws.apache.org/rampart/policy",
+ USER_CERT_ALIAS_LN);
+
+ public static final QName ENCRYPTION_USER = new
QName("http://ws.apache.org/rampart/policy",
+ ENCRYPTION_USER_LN);
public Assertion build(OMElement element, AssertionBuilderFactory factory)
throws IllegalArgumentException {
@@ -69,6 +82,21 @@
break;
}
}
+
+ if (x509Token != null && policyElement != null) {
+ OMElement ramp = null;
+ ramp = policyElement.getFirstChildWithName(RAMPART_CONFIG);
+ if (ramp != null) {
+ OMElement child = null;
+ if ((child = ramp.getFirstChildWithName(USER_CERT_ALIAS)) !=
null) {
+ x509Token.setUserCertAlias(child.getText());
+ }
+ if ((child = ramp.getFirstChildWithName(ENCRYPTION_USER)) !=
null) {
+ x509Token.setEncryptionUser(child.getText());
+ }
+ }
+ }
+
return x509Token;
}