/* * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. * * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * * Copyright 2008 Pentaho Corporation. All rights reserved. * * Created Mar 25, 2008 * @author Michael D'Amour */ package org.pentaho.mantle.server; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.httpclient.Credentials; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.UsernamePasswordCredentials; import org.apache.commons.httpclient.auth.AuthScope; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.methods.StringRequestEntity; import com.google.gwt.user.server.rpc.RPCServletUtils; public class DebugMantleServlet extends DebugRemoteServiceServlet { private static final long serialVersionUID = -2907930444468382603L; public void doPost(HttpServletRequest req, HttpServletResponse resp) { // use HTTPClient to forward on the data to whatever server we want // eg. http://localhost:8080/pentaho/MantleService // 1. set the contentType // 2. add the data // 3. tack the response onto our response try { HttpClient client = new HttpClient(); // If server userid/password was supplied, use basic authentication to // authenticate with the server. Credentials creds = new UsernamePasswordCredentials("joe", "password"); //$NON-NLS-1$ //$NON-NLS-2$ client.getState().setCredentials(AuthScope.ANY, creds); client.getParams().setAuthenticationPreemptive(true); // Enumeration attributes = req.getAttributeNames(); // while (attributes.hasMoreElements()) { // System.out.println("Attribute: " + attributes.nextElement()); // } // // Enumeration params = req.getParameterNames(); // while (params.hasMoreElements()) { // System.out.println("Parameter: " + params.nextElement()); // } // // Enumeration headers = req.getHeaderNames(); // while (headers.hasMoreElements()) { // String headerName = (String) headers.nextElement(); // String headerValue = req.getHeader(headerName).replaceAll("8888", "8080"); // System.out.println("Header: " + headerName + "=" + headerValue); // if (!headerName.equals("accept-encoding") && !headerName.equals("content-type") && !"content-length".equals(headerName)) { // postMethod.setRequestHeader(headerName, headerValue); // } // } String requestPayload = RPCServletUtils.readContentAsUtf8(req); System.out.println("INCOMING: " + requestPayload); //$NON-NLS-1$ requestPayload = requestPayload.replaceAll("8888/mantle", "8080/pentaho/mantle"); //$NON-NLS-1$ //$NON-NLS-2$ PostMethod postMethod = null; if (requestPayload.indexOf("MantleLoginService") != -1) { //$NON-NLS-1$ postMethod = new PostMethod("http://localhost:8080/pentaho/mantleLogin/MantleLoginService"); //$NON-NLS-1$ } else if (requestPayload.indexOf("MantleService") != -1) { //$NON-NLS-1$ postMethod = new PostMethod("http://localhost:8080/pentaho/mantle/MantleService"); //$NON-NLS-1$ } requestPayload = requestPayload.replaceAll("org.pentaho.mantle.MantleApplication", "pentaho/mantle"); //$NON-NLS-1$ //$NON-NLS-2$ requestPayload = requestPayload.replaceAll("org.pentaho.mantle.login.MantleLogin", "pentaho/mantleLogin"); //$NON-NLS-1$ //$NON-NLS-2$ System.out.println("OUTGOING: " + requestPayload); //$NON-NLS-1$ StringRequestEntity stringEntity = new StringRequestEntity(requestPayload, "text/x-gwt-rpc", "UTF-8"); //$NON-NLS-1$ //$NON-NLS-2$ postMethod.setRequestEntity(stringEntity); try { @SuppressWarnings("unused") int status = client.executeMethod(postMethod); String postResult = postMethod.getResponseBodyAsString(); resp.getOutputStream().write(postResult.getBytes("UTF-8")); //$NON-NLS-1$ } catch (IOException e) { e.printStackTrace(); } } catch (Exception e) { } } protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // use HTTPClient to forward on the data to whatever server we want // eg. http://localhost:8080/pentaho/MantleService // 1. set the contentType // 2. add the data // 3. tack the response onto our response try { HttpClient client = new HttpClient(); GetMethod getMethod = null; String passthru = req.getParameter("passthru"); //$NON-NLS-1$ if (!"".equals(passthru)) { //$NON-NLS-1$ getMethod = new GetMethod("http://localhost:8080/pentaho/" + passthru); //$NON-NLS-1$ getMethod.setQueryString(req.getQueryString()); } else { // not known resp.setStatus(404); return; } // If server userid/password was supplied, use basic authentication to // authenticate with the server. Credentials creds = new UsernamePasswordCredentials("joe", "password"); //$NON-NLS-1$ //$NON-NLS-2$ client.getState().setCredentials(AuthScope.ANY, creds); client.getParams().setAuthenticationPreemptive(true); try { @SuppressWarnings("unused") int status = client.executeMethod(getMethod); String postResult = getMethod.getResponseBodyAsString(); resp.getOutputStream().write(postResult.getBytes("UTF-8")); //$NON-NLS-1$ } catch (IOException e) { e.printStackTrace(); } } catch (Exception e) { } } }