Author: shankar Date: Tue Dec 21 11:07:07 2010 New Revision: 1051448 URL: http://svn.apache.org/viewvc?rev=1051448&view=rev Log: Applying patch from RAMPART-280
Modified: axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/client/STSClient.java axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/errors.properties Modified: axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/client/STSClient.java URL: http://svn.apache.org/viewvc/axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/client/STSClient.java?rev=1051448&r1=1051447&r2=1051448&view=diff ============================================================================== --- axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/client/STSClient.java (original) +++ axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/client/STSClient.java Tue Dec 21 11:07:07 2010 @@ -17,10 +17,9 @@ package org.apache.rahas.client; import java.io.IOException; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Vector; +import java.util.*; +import java.text.DateFormat; +import java.text.ParseException; import javax.security.auth.callback.Callback; import javax.security.auth.callback.CallbackHandler; @@ -29,6 +28,7 @@ import javax.xml.namespace.QName; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMNode; +import org.apache.axiom.om.OMException; import org.apache.axiom.om.impl.builder.StAXOMBuilder; import org.apache.axiom.om.impl.dom.DOOMAbstractFactory; import org.apache.axiom.om.util.Base64; @@ -66,6 +66,7 @@ import org.apache.ws.security.conversati import org.apache.ws.security.message.token.Reference; import org.apache.ws.security.processor.EncryptedKeyProcessor; import org.apache.ws.security.util.WSSecurityUtil; +import org.apache.ws.security.util.XmlSchemaDateFormat; import org.w3c.dom.Element; public class STSClient { @@ -247,7 +248,120 @@ public class STSClient { } } - + + /** + * Renews the token referenced by the token id, updates the token store + * @param tokenId + * @param issuerAddress + * @param issuerPolicy + * @param store + * @return status + * @throws TrustException + */ + public boolean renewToken(String tokenId, + String issuerAddress, + Policy issuerPolicy, TokenStorage store) throws TrustException { + + try { + QName rstQn = new QName("requestSecurityToken"); + + ServiceClient client = getServiceClient(rstQn, issuerAddress); + + client.getServiceContext().setProperty(RAMPART_POLICY, issuerPolicy); + client.getOptions().setSoapVersionURI(this.soapVersion); + if (this.addressingNs != null) { + client.getOptions().setProperty(AddressingConstants.WS_ADDRESSING_VERSION, this.addressingNs); + } + client.engageModule("addressing"); + client.engageModule("rampart"); + + this.processPolicy(issuerPolicy, null); + + String tokenType = RahasConstants.TOK_TYPE_SAML_10; + + OMElement response = client.sendReceive(rstQn, + createRenewRequest(tokenType, tokenId)); + store.update(processRenewResponse(version, response, store, tokenId)); + + return true; + + } catch (AxisFault e) { + log.error("errorInRenewingToken", e); + throw new TrustException("errorInRenewingToken", new String[]{issuerAddress}, e); + } + + } + + /** + * Processes the response and update the token store + * @param version + * @param elem + * @param store + * @param id + * @return + * @throws TrustException + */ + private Token processRenewResponse(int version, OMElement elem, TokenStorage store, String id) throws TrustException { + OMElement rstr = elem; + if (version == RahasConstants.VERSION_05_12) { + //The WS-SX result will be an RSTRC + rstr = elem.getFirstElement(); + } + //get the corresponding WS-Trust NS + String ns = TrustUtil.getWSTNamespace(version); + + //Get the RequestedAttachedReference + OMElement reqSecToken = rstr.getFirstChildWithName(new QName( + ns, RahasConstants.IssuanceBindingLocalNames.REQUESTED_SECURITY_TOKEN)); + + if (reqSecToken == null) { + throw new TrustException("reqestedSecTokMissing"); + } + + //Extract the life-time element + OMElement lifeTimeEle = rstr.getFirstChildWithName(new QName( + ns, RahasConstants.IssuanceBindingLocalNames.LIFETIME)); + + if (lifeTimeEle == null) { + throw new TrustException("lifeTimeElemMissing"); + } + + //update the existing token + OMElement tokenElem = reqSecToken.getFirstElement(); + Token token = store.getToken(id); + token.setPreviousToken(token.getToken()); + token.setToken(tokenElem); + token.setState(Token.RENEWED); + token.setExpires(extractExpiryDate(lifeTimeEle)); + + return token; + } + + /** + * extracts the expiry date from the Lifetime element of the RSTR + * @param lifetimeElem + * @return + * @throws TrustException + */ + private Date extractExpiryDate(OMElement lifetimeElem) throws TrustException { + try { + DateFormat zulu = new XmlSchemaDateFormat(); + + OMElement expiresElem = + lifetimeElem.getFirstChildWithName(new QName(WSConstants.WSU_NS, + WSConstants.EXPIRES_LN)); + Date expires = zulu.parse(expiresElem.getText()); + return expires; + } catch (OMException e) { + throw new TrustException("lifeTimeProcessingError", + new String[]{lifetimeElem.toString()}, e); + } catch (ParseException e) { + throw new TrustException("lifeTimeProcessingError", + new String[]{lifetimeElem.toString()}, e); + } + } + + private ServiceClient getServiceClient(QName rstQn, String issuerAddress) throws AxisFault { AxisService axisService = Modified: axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/errors.properties URL: http://svn.apache.org/viewvc/axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/errors.properties?rev=1051448&r1=1051447&r2=1051448&view=diff ============================================================================== --- axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/errors.properties (original) +++ axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/errors.properties Tue Dec 21 11:07:07 2010 @@ -86,4 +86,5 @@ configurationIsNull = Configuration is n errorInCancelingToken = Error occurred while trying to cancel token errorExtractingTokenId = Error occurred while extracting token id from the Security Token Reference +lifeTimeElemMissing = Lifetime element is missing in the RSTR lifeTimeElemMissing = Lifetime element is missing in the RSTR \ No newline at end of file