a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster/**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Copyright (c) 2006 Sun Microsystems Inc. All Rights Reserved
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * The contents of this file are subject to the terms
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * of the Common Development and Distribution License
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * (the License). You may not use this file except in
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * compliance with the License.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * You can obtain a copy of the License at
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * https://opensso.dev.java.net/public/CDDLv1.0.html or
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * opensso/legal/CDDLv1.0.txt
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * See the License for the specific language governing
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * permission and limitations under the License.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * When distributing Covered Code, include this CDDL
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Header Notice in each file and include the License file
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * at opensso/legal/CDDLv1.0.txt.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * If applicable, add the following below the CDDL Header,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * with the fields enclosed by brackets [] replaced by
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * your own identifying information:
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * "Portions Copyrighted [year] [name of copyright owner]"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * $Id: SASLResponse.java,v 1.2 2008/06/25 05:47:08 qcheng Exp $
f948ca04a28ccfeed9633bf4b0fb0d2c59c37478David Luna * Portions Copyrighted 2014 ForgeRock AS.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpackage com.sun.identity.liberty.ws.authnsvc.protocol;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.ArrayList;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.Iterator;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.List;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.w3c.dom.Document;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.w3c.dom.Element;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.w3c.dom.Node;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.w3c.dom.NodeList;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport javax.xml.namespace.QName;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.shared.xml.XMLUtils;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.shared.encode.Base64;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.authnsvc.AuthnSvcConstants;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.authnsvc.AuthnSvcException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.authnsvc.AuthnSvcUtils;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.disco.common.DiscoConstants;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.disco.ResourceOffering;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.soapbinding.Utils;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster/**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * The <code>SASLResponse</code> class represents <code>SASLResponse</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * element defined in Authentication Service schema.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @supported.all.api
f948ca04a28ccfeed9633bf4b0fb0d2c59c37478David Luna * @deprecated since 12.0.0
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
f948ca04a28ccfeed9633bf4b0fb0d2c59c37478David Luna@Deprecated
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpublic class SASLResponse {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Continue status where the server expects the client to send another
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>SASLRequest</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static final String CONTINUE = "continue";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Abort status where the server is aborting the authentication exchange.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static final String ABORT = "abort";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * OK status where the server considers the authentication exchange to have
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * successfully completed.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static final String OK = "OK";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private String statusCode = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private PasswordTransforms passwordTransforms = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private byte[] data = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private ResourceOffering resourceOffering = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private List credentials = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private String serverMechanism = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private String id = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private String messageID = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private String refToMessageID = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Constructs a <code>SASLResponse</code> instance.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param statusCode Status Code.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public SASLResponse(String statusCode) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster this.statusCode = statusCode;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Constructs a <code>SASLResponse</code> with a
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>org.w3c.dom.Element</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param element a <code>SASLResponse</code> element
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception AuthnSvcException if an error occurs while parsing the
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>SASLResponse</code> element
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public SASLResponse(Element element) throws AuthnSvcException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Element statusE = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Element ptE = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Element dataE = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Element roE = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Element credentialsE = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster NodeList nl = element.getChildNodes();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster int length = nl.getLength();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster int i;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for(i = 0; i < length; i++) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Node child = nl.item(i);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (child.getNodeType() == Node.ELEMENT_NODE) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Element childElement = (Element)child;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String localName = childElement.getLocalName();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String namespaceURI = childElement.getNamespaceURI();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (AuthnSvcConstants.NS_AUTHN_SVC.equals(namespaceURI) &&
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AuthnSvcConstants.TAG_STATUS.equals(localName)){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster statusE = childElement;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster break;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new AuthnSvcException("missingStatus");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String statusCodeStr = XMLUtils.getNodeAttributeValue(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster statusE,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AuthnSvcConstants.ATTR_CODE);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster QName statusCodeQN = Utils.convertStringToQName(statusCodeStr,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster statusE);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (!AuthnSvcConstants.NS_AUTHN_SVC
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster .equals(statusCodeQN.getNamespaceURI())) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new AuthnSvcException("invalidStatusCodeNS");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster statusCode = statusCodeQN.getLocalPart();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for(i = i + 1; i < length; i++) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Node child = nl.item(i);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (child.getNodeType() == Node.ELEMENT_NODE) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Element childElement = (Element)child;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String localName = childElement.getLocalName();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String namespaceURI = childElement.getNamespaceURI();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (AuthnSvcConstants.NS_AUTHN_SVC.equals(namespaceURI)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (AuthnSvcConstants.TAG_STATUS.equals(localName)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new AuthnSvcException("tooManyStatus");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else if(AuthnSvcConstants.TAG_PASSWORD_TRANSFORMS
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster .equals(localName)){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (ptE != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new AuthnSvcException("tooManyPT");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else if (dataE != null || roE != null ||
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster credentialsE != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new AuthnSvcException("invalidSeq");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ptE = childElement;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else if(AuthnSvcConstants.TAG_DATA.equals(localName)){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (dataE != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new AuthnSvcException("tooManyData");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else if (roE != null || credentialsE != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new AuthnSvcException("invalidSeq");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster dataE = childElement;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else if(AuthnSvcConstants.TAG_CREDENTIALS
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster .equals(localName)){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (credentialsE != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new AuthnSvcException("tooManyCr");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster credentialsE = childElement;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new AuthnSvcException("invalidChild");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else if (DiscoConstants.DISCO_NS.equals(namespaceURI) &&
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AuthnSvcConstants.TAG_RESOURCE_OFFERING
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster .equals(localName)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (roE != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new AuthnSvcException("tooManyRO");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else if (credentialsE != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new AuthnSvcException("invalidSeq");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster roE = childElement;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new AuthnSvcException("invalidChild");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (ptE != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster passwordTransforms = new PasswordTransforms(ptE);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster data = AuthnSvcUtils.decodeDataElement(dataE);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (roE != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster resourceOffering = new ResourceOffering(roE);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (Exception ex) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new AuthnSvcException(ex);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (credentialsE != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster credentials = new ArrayList();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster nl = credentialsE.getChildNodes();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for(i = 0; i < nl.getLength(); i++) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Node child = nl.item(i);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (child.getNodeType() == Node.ELEMENT_NODE) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster credentials.add(child);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster serverMechanism = XMLUtils.getNodeAttributeValue(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster element,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AuthnSvcConstants.ATTR_SERVER_MECHANISM);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster id = XMLUtils.getNodeAttributeValue(element,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AuthnSvcConstants.ATTR_id);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns value of attribute 'code' of Element 'Status'.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return value of attribute 'code' of Element 'Status'
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @see #setStatusCode(String)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public String getStatusCode()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return statusCode;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns child Element 'PasswordTransforms'.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return child Element 'PasswordTransforms'
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @see #setPasswordTransforms(PasswordTransforms)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public PasswordTransforms getPasswordTransforms()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return passwordTransforms;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns value of Element 'Data'.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return value of Element 'Data'
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @see #setData(byte[])
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public byte[] getData()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return data;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns Element <code>ResourceOffering</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return Element <code>ResourceOffering</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @see #setResourceOffering(ResourceOffering)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public ResourceOffering getResourceOffering() {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return resourceOffering;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns a list of child Element of 'Credentials' Element.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return a list of child Element of 'Credentials' Element
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @see #setCredentials(List)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public List getCredentials() {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return credentials;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns value of <code>serverMechanism</code> attribute.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return value of <code>serverMechanism</code> attribute
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @see #setServerMechanism(String)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public String getServerMechanism() {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return serverMechanism;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns value of <code>id</code> attribute.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return value of <code>id</code> attribute
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @see #setId(String)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public String getId() {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return id;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns value of <code>messageID</code> attribute of
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>CorrelationHeader</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return value of <code>messageID</code> attribute
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @see #setMessageID(String)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public String getMessageID() {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return messageID;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns value of <code>refToMessageID</code> attribute of
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>CorrelationHeader</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return value of <code>refToMessageID</code> attribute
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @see #setRefToMessageID(String)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public String getRefToMessageID() {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return refToMessageID;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Sets value of attribute 'code' of Element 'Status'.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param statusCode value of attribute 'code' of Element 'Status'
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @see #getStatusCode()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void setStatusCode(String statusCode) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster this.statusCode = statusCode;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Sets child Element 'PasswordTransforms'
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param passwordTransforms Element 'PasswordTransforms'
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @see #getPasswordTransforms()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void setPasswordTransforms(PasswordTransforms passwordTransforms)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster this.passwordTransforms = passwordTransforms;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Sets value of Element 'Data'.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param data value of Element 'Data'
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @see #getData()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void setData(byte[] data) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster this.data = data;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Sets Element <code>ResourceOffering</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param resourceOffering Element <code>ResourceOffering</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @see #getResourceOffering()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void setResourceOffering(ResourceOffering resourceOffering) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster this.resourceOffering = resourceOffering;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Sets a list of child Elements of 'Credentials' Element.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param credentials a list of child Elements of 'Credentials' Element
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @see #getCredentials()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void setCredentials(List credentials) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster this.credentials = credentials;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Sets value of <code>mechanism</code> attribute.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param serverMechanism value of <code>mechanism</code> attribute
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @see #getServerMechanism()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void setServerMechanism(String serverMechanism) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster this.serverMechanism = serverMechanism;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Sets value of <code>id</code> attribute.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param id value of <code>id</code> attribute
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @see #getId()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void setId(String id) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster this.id = id;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Sets value of <code>messageID</code> attribute of
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>CorrelationHeader</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param messageID value of <code>messageID</code> attribute
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @see #getMessageID()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void setMessageID(String messageID) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster this.messageID = messageID;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Sets value of <code>refToMessageID</code> attribute of
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>CorrelationHeader</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param refToMessageID value of <code>refToMessageID</code> attribute
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @see #getRefToMessageID()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void setRefToMessageID(String refToMessageID) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster this.refToMessageID = refToMessageID;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns <code>SASLResponse</code> in <code>org.w3c.dom.Element</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * format.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return <code>SASLResponse</code> in <code>org.w3c.dom.Element</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * format.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception AuthnSvcException if an error occurs while creating the
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>SASLResponse</code> element
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public Element toElement() throws AuthnSvcException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Document doc = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster doc = XMLUtils.newDocument();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (Exception ex) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AuthnSvcUtils.debug.error("SASLResponse:toElement", ex);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new AuthnSvcException(ex.getMessage());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Element saslRespE = doc.createElementNS(AuthnSvcConstants.NS_AUTHN_SVC,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AuthnSvcConstants.PTAG_SASL_RESPONSE);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster saslRespE.setAttributeNS(AuthnSvcConstants.NS_XML,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AuthnSvcConstants.XMLNS_AUTHN_SVC,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AuthnSvcConstants.NS_AUTHN_SVC);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster saslRespE.setAttributeNS(AuthnSvcConstants.NS_XML,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AuthnSvcConstants.XMLNS_DISCO,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DiscoConstants.DISCO_NS);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Element statusE = doc.createElementNS(AuthnSvcConstants.NS_AUTHN_SVC,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AuthnSvcConstants.PTAG_STATUS);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster statusE.setAttributeNS(null, AuthnSvcConstants.ATTR_CODE,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AuthnSvcConstants.PREFIX_AUTHN_SVC + ":" + statusCode);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster saslRespE.appendChild(statusE);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (passwordTransforms != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster passwordTransforms.addToParent(saslRespE);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (data != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Element dataE = doc.createElementNS(AuthnSvcConstants.NS_AUTHN_SVC,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AuthnSvcConstants.PTAG_DATA);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster dataE.appendChild(doc.createTextNode(Base64.encode(data)));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster saslRespE.appendChild(dataE);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (resourceOffering != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Document roDoc =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster XMLUtils.toDOMDocument(resourceOffering.toString(),
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AuthnSvcUtils.debug);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (roDoc == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new AuthnSvcException("invalidRO");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster saslRespE.appendChild(doc.importNode(roDoc.getDocumentElement(),
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster true));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (credentials != null && !credentials.isEmpty()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Element credentialsE =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster doc.createElementNS(AuthnSvcConstants.NS_AUTHN_SVC,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AuthnSvcConstants.PTAG_CREDENTIALS);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Iterator iter = credentials.iterator();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster while (iter.hasNext()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster credentialsE.appendChild(doc.importNode((Element)iter.next(),
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster true));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster saslRespE.appendChild(credentialsE);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (serverMechanism != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster saslRespE.setAttributeNS(null,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AuthnSvcConstants.ATTR_SERVER_MECHANISM,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster serverMechanism);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (id != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster saslRespE.setAttributeNS(null, AuthnSvcConstants.ATTR_id, id);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster doc.appendChild(saslRespE);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return doc.getDocumentElement();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster}