a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Copyright (c) 2006 Sun Microsystems Inc. All Rights Reserved
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 * You can obtain a copy of the License at
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * https://opensso.dev.java.net/public/CDDLv1.0.html or
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * See the License for the specific language governing
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * permission and limitations under the License.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * When distributing Covered Code, include this CDDL
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Header Notice in each file and include the License file
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 * $Id: AuthnSvcRequestHandlerImpl.java,v 1.2 2008/06/25 05:47:06 qcheng Exp $
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.authnsvc.mechanism.MechanismHandler;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.authnsvc.protocol.SASLRequest;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.authnsvc.protocol.SASLResponse;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.common.LogUtil;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.soapbinding.Message;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.soapbinding.RequestHandler;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * The class <code>AuthnSvcRequestHandlerImpl</code> is used to process
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * SASL requests.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpublic final class AuthnSvcRequestHandlerImpl implements RequestHandler {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Default constructor
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "AuthnSvcRequestHanderImpl constructor.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Extracts SASL request out of a SOAP Message and processes it.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param request a SOAP Message containing a SASL request
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return a SOAP Message containing a SASL response
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception AuthnSvcException if an error occurs while processing the
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * SOAP Message
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public Message processRequest(Message request) throws AuthnSvcException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster List list = request.getBodies(AuthnSvcConstants.NS_AUTHN_SVC,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new AuthnSvcException("missingSASLRequet");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new AuthnSvcException("tooManySASLRequet");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SASLRequest saslReq = new SASLRequest((Element)list.get(0));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster saslReq.setMessageID(request.getCorrelationHeader().getMessageID());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster saslReq.setRefToMessageID(request.getCorrelationHeader()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String respMessageID = message.getCorrelationHeader().getMessageID();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SASLResponse saslResp = processSASLRequest(saslReq, request,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Processes a SASL request and returns a SASL response.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param saslReq a SASL request
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param message a SOAP Message containing a SASL response
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param respMessageID messageID of SOAP Message response that will
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * contain returned SASL response
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return a SASL response
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception AuthnSvcException if an error occurs while processing the
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * SASL request
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static SASLResponse processSASLRequest(SASLRequest saslReq,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String mechanism = saslReq.getMechanism().trim();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String msg = AuthnSvcUtils.getString("messageID") + "=" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster message.getCorrelationHeader().getMessageID() + ", " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AuthnSvcUtils.getString("mechanism") + "=" + mechanism +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ", " + AuthnSvcUtils.getString("authzID") + "=" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AuthnSvcUtils.getString("advisoryAuthnID") + "=" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String[] data = { message.getCorrelationHeader().getMessageID(),
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "AuthnSvcRequestHanderImpl.processSASLRequest: " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "mechanism is empty");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster LogUtil.access(Level.INFO,LogUtil.AS_ABORT,data);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster StringTokenizer stz = new StringTokenizer(mechanism);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster mechanismHandler = AuthnSvcService.getMechanismHandler(mech);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "AuthnSvcRequestHanderImpl.processSASLRequest: " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Unable to find mechanismHandler");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster LogUtil.access(Level.INFO,LogUtil.AS_ABORT,data);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "AuthnSvcRequestHanderImpl.processSASLRequest: " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "mechanismHandler = " + mechanismHandler.getClass());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SASLResponse saslResp = mechanismHandler.processSASLRequest(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else if (statusCode.equals(SASLResponse.CONTINUE)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster LogUtil.access(Level.INFO, LogUtil.AS_CONTINUE,data);