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: WSPRedirectHandlerServlet.java,v 1.6 2008/08/06 17:28:10 exu Exp $
564945e59b60a40c3b9458177b2ff63e2947686cPeter Major * Portions Copyrighted 2012-2014 ForgeRock AS
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpackage com.sun.identity.liberty.ws.interaction;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.common.HttpURLConnectionManager;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.common.LogUtil;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.interaction.jaxb.InquiryElement;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.interaction.jaxb.InteractionResponseElement;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.interaction.jaxb.ParameterType;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport javax.xml.parsers.ParserConfigurationException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport javax.xml.transform.TransformerException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Class that works in conjection with InteractionManager to facilitate
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * WSP- resource owner interactions
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpublic class WSPRedirectHandlerServlet extends HttpServlet {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static Debug debug = Debug.getInstance("libIDWSF");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static String PARAMETER_PREFIX = "isparam_";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static String TRUE_LABEL = "trueLabel";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static String FALSE_LABEL = "falseLabel";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static String HELP_LABEL = "helpLabel";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static String HINT_LABEL = "hintLabel";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static String LINK_LABEL = "linkLabel";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static String MORE_LINK_LABEL = "moreLinkLabel";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static String DEFAULT_TRUE_LABEL = "true";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static String DEFAULT_FALSE_LABEL = "false";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static String DEFAULT_HELP_LABEL = "help";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static String DEFAULT_HINT_LABEL = "hint";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static String DEFAULT_LINK_LABEL = "link";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static String DEFAULT_MORE_LINK_LABEL = "moreLink";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static int CONNECT_TIMEOUT = 5000; // 5 seconds
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static int READ_TIMEOUT = 5000; // 5 seconds
23e304384f98fca4ab2e6f9f07a53465c1bfc645Peter Major DocumentBuilder db = XMLUtils.getSafeDocumentBuilder(false);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Document doc = db.parse(new File(htmlStyleSheetLocation));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster doc = db.parse(new File(wmlStyleSheetLocation));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.error("WSPRedirectHandlerServlet.init()", pce);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.error("WSPRedirectHandlerServlet.init()", se);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.error("WSPRedirectHandlerServlet.init()", ioe);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("WSPRedirectHandlerServlet.init():initialized");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void doGet(HttpServletRequest httpRequest,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //testXSL(httpRequest, httpResponse);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void doPost(HttpServletRequest httpRequest,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private void handleRequest(HttpServletRequest httpRequest,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster InteractionConfig.getInstance().getWSPRedirectHandler();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster InteractionConfig.getInstance().getLbWSPRedirectHandler();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String queryString = httpRequest.getQueryString();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster int i = queryString.indexOf(InteractionConfig.HANDLER_HOST_ID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (i != -1) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster InteractionConfig.HANDLER_HOST_ID.length() + 1);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (j != -1) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "WSPRedirectHandlerServlet.handleRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " : wspRedirectHandler:" + wspRedirectHandler
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " : lbWspRedirectHandler:" + lbWspRedirectHandler);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //check for trusted handlers
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster InteractionConfig.getInstance().getTrustedWSPRedirectHandlers();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if(!trustedRedirectHandlers.containsKey(handlerHostId)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster sendErrorPageUntrustedHost(httpRequest, httpResponse,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "WSPRedirectHandlerServlet.handleRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "denied attempt to forward to untrusted host id:"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster InteractionConfig.getInstance().getLocalServerId();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster = (String)trustedRedirectHandlers.get(handlerHostId);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String forwardToUrl = handlerHostUrl + "?" + queryString;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "WSPRedirectHandlerServlet.handleRequest()"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster forwardRequest(forwardToUrl, httpRequest, httpResponse);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "WSPRedirectHandlerServlet.handleRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "no need to forward, "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "processing request in the local server");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String requestURL = getRequestURL(httpRequest);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "WSPRedirectHandlerServlet.handleRequest():entering "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (returnToURL != null) { //initial request, render query
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "WSPRedirecthandlerServlet.handleRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " :a new request");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //returnToURL should not have ResendMessage parameter
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (!(returnToURL.indexOf(InteractionManager.RESEND_MESSAGE
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "WSPRedirecthandlerServlet.handleRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "invalid Request - illegal parameter:"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Invalid Request - illegal parameter:"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //returnToURL should be https
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (InteractionConfig.getInstance().wspEnforcesHttpsCheck()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "WSPRedirecthandlerServlet.handleRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "Invalid Request "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " not https"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Invalid Request "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " not https"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //returnToURL should point to requestHost
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster && !checkReturnToHost(messageID, returnToURL)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "WSPRedirecthandlerServlet.handleRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "Invalid Request ReturnToHost differs from "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " RequestHost"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + ":requestHost="
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Invalid Request ReturnToHost differs from "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " RequestHost"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + ":requestHost="
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //save returnToURL against messageID in InteractionManager
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster InteractionManager.getInstance().setReturnToURL(messageID,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else { //no returnToURL, response submission
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "WSPRedirecthandlerServlet.handleRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " entering without retunrnToRL:"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " response for query");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //get returnToURL against messageID in InteractionManager
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "WSPRedirecthandlerServlet.handleRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " returnToURL, cacheEntry "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " not found to redirect, for TransactionID : "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster " returnToURL not found in cache");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "WSPRedirecthandlerServlet.handleRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "request without messageID"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //show some error page
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Invalid Request - missing messageID"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "WSPRedirecthandlerServlet.handleRequest():returning");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Constructs an HTML/WML page from InteractionQuery using
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * an XSL stylesheet and sends the page to browser.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private void sendInteractionRequestPage(String messageID,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // generate html page, with action url pointing back to this servlet
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // set query parameters transID and responseID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster InteractionConfig.getInstance().getWSPRedirectHandler();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster InteractionConfig.getInstance().getLbWSPRedirectHandler();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster action = httpRequest.getRequestURL().toString() +"?"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + InteractionManager.TRANS_ID + "=" + messageID;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster InteractionConfig.getInstance().getLocalServerId();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + InteractionManager.TRANS_ID + "=" + messageID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "WSPRedirectHandlerServlet.sendInteractionRequestPage():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (!wmlClient) { //not a wmlClient, assume html client
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "sendInteractionRequestPage():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "clientType=html");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else { //a wml client
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "sendInteractionRequestPage():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "clientType=wml");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster httpResponse.setContentType("text/vnd.wap.wml");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\"");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster out.println(" \"http://www.wapforum.org/DTD/wml_1.1.xml\">");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //style inquiryElement and send it to browser
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "com.sun.identity.liberty.ws.interaction.jaxb");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Marshaller marshaller = jaxbContext.createMarshaller();
23e304384f98fca4ab2e6f9f07a53465c1bfc645Peter Major DocumentBuilder db = XMLUtils.getSafeDocumentBuilder(false);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster doc.getDocumentElement().setAttribute("action", action);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String moreLinkLabel = DEFAULT_MORE_LINK_LABEL;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String language = InteractionManager.getInstance().
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster moreLinkLabel = i18n.getString(MORE_LINK_LABEL);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ResourceBundle.getBundle("libInteraction", locale);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster moreLinkLabel = bundle.getString(MORE_LINK_LABEL);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Element documentElement = doc.getDocumentElement();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster documentElement.setAttribute(TRUE_LABEL, trueLabel);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster documentElement.setAttribute(FALSE_LABEL, falseLabel);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster documentElement.setAttribute(HELP_LABEL, helpLabel);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster documentElement.setAttribute(HINT_LABEL, hintLabel);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster documentElement.setAttribute(LINK_LABEL, linkLabel);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster documentElement.setAttribute(MORE_LINK_LABEL, moreLinkLabel);
564945e59b60a40c3b9458177b2ff63e2947686cPeter Major TransformerFactory transformerFactory = XMLUtils.getTransformerFactory();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster StreamResult streamResult = new StreamResult(out);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster = transformerFactory.newTransformer(styleSource);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster transformer.transform(domSource, streamResult);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster LogUtil.IS_PRESENTED_QUERY_TO_USER_AGENT,objs);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "WSPRedirectHandlerServlet.sendInteractionRequestPage():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Error creating JAXBObject:"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "WSPRedirectHandlerServlet.sendInteractionRequestPage():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "catching ParserConfigurationException =", pce);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Error creating interaction request page:"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "WSPRedirectHandlerServlet.sendInteractionRequestPage():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Error creating interaction request page:"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private void sendInteractionResponsePage(String messageID,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster HttpServletResponse httpResponse, String returnToURL)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "WSPRedirectHandlerServlet.sendInteractionResponsePage():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster +"entering");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //read and save query parameters;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster InteractionResponseElement interactionResponseElement
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster List list = interactionResponseElement.getParameter();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Enumeration parameterNames = httpRequest.getParameterNames();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ParameterType parameterType
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster = JAXBObjectFactory.getObjectFactory()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster .createParameterType();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + ".sendInteractionResponsePage():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster int index = parameterName.indexOf(PARAMETER_PREFIX);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //store InteractionResponse in interaction manager;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster InteractionManager.getInstance().setInteractionResponseElement(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + InteractionManager.RESEND_MESSAGE + "=" + messageID;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "WSPRedirectHandlerServlet."
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " sendInteractionResponsePage():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "redirecting user agent to returnToURL="
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster LogUtil.access(Level.INFO,LogUtil.IS_REDIRECTED_USER_AGENT_BACK,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "WSPRedirectHandlerServlet.sendInteractionResponsePage():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Error createing JAXBObject:"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "WSPRedirectHandlerServlet.sendInteractionResponsePage():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "catching Exception =", e);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private String getRequestURL(HttpServletRequest httpRequest) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster .append(httpRequest.getQueryString()).toString();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private void showErrorPage(HttpServletRequest httpRequest,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster HttpServletResponse httpResponse, String message)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster out.println("<head><title>WSPRedirectHandler</title></head>");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster out.println("WSPRedirectHandler - Interaction Error");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else { //a wml client
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster httpResponse.setContentType("text/vnd.wap.wml");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster out.println("WSPRediretHandler - encountered error");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private boolean checkReturnToHost(String messageID, String returnToURL) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster boolean answer = false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String requestHost = InteractionManager.getInstance()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "WSPRedirecthandlerServlet.handleRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "malformed "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster answer = requestHost.equalsIgnoreCase(returnToHost);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //requestHost does not include domain under jdk1.3
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ( (answer == false)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster && (returnToHost.indexOf(requestHost + ".") == 0)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "WSPRedirectHandlerServlet.checkReturnToHost():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " returning: "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private boolean isWMLClient(HttpServletRequest httpRequest) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // TODO: need to find a way to detect client
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private void forwardRequest(String forwardToUrl,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "WSPRedirectHandlerServlet.forwardRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster urlConnection.setConnectTimeout(CONNECT_TIMEOUT); //hard coding for 5seconds
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster urlConnection.setReadTimeout(READ_TIMEOUT); //hard coding for 5seconds
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster urlConnection.setInstanceFollowRedirects(false);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster clientIn = new BufferedInputStream(request.getInputStream());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster serverOut = new BufferedOutputStream(urlConnection.getOutputStream());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String statusLine = urlConnection.getHeaderField(null);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("WSPRedirectHandlerServlet.forwardRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (i != -1) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster response.setStatus(Integer.valueOf(status).intValue());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Map headersMap = urlConnection.getHeaderFields();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String value = urlConnection.getHeaderField(name);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster serverIn = new BufferedInputStream(urlConnection.getInputStream());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster clientOut = new BufferedOutputStream(response.getOutputStream());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.warning("WSPRedirectHandlerServlet.forwardRequest()"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "exception in finally block:", e);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private void sendErrorPageUntrustedHost(HttpServletRequest request,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster HttpServletResponse response, String handlerHostUrl)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "WSPRedirectHandlerServlet.sendErrorPageUntrustedHost()");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster response.setStatus(HttpServletResponse.SC_FORBIDDEN);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster response.setContentType("text/html;charset=UTF-8");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster out.println("<title>Denied attempt to forward to untrusted server"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "</title>");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + i18n.getString("denied_attemtpt_to_forward_to_untrusted_server")