/* * Copyright 2005-2008 Pentaho Corporation. All rights reserved. * 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 - 2009 Pentaho Corporation. All rights reserved. * * Created * @author Steven Barkdull */ package org.pentaho.pac.server.common; import java.util.HashMap; import java.util.Map; public class BiServerTrustedProxy extends ThreadSafeHttpClient { private static final String TRUSTED_USER_KEY = "_TRUST_USER_"; //$NON-NLS-1$ private static BiServerTrustedProxy instance = new BiServerTrustedProxy(); private BiServerTrustedProxy() { super(); } public void createNewInstance() { instance = new BiServerTrustedProxy(); } public static BiServerTrustedProxy getInstance() { return instance; } // TODO sbarkdull, probably need to throw a different exception // move to utils class // TODO, need to have a single instance of HTTP client (as opposed to // creating a new one on each method call, to maintain an ongoing session w/ the remote server // to understand threading issues: // http://hc.apache.org/httpclient-3.x/performance.html // http://hc.apache.org/httpclient-3.x/threading.html /** * Configuration note: In order to use this method to contact the pentaho bi server, * the bi server must be configured to trust the host (ie IP address) that this * method is executing on. To do that: * Edit the bi server application's (ie the PCI) web.xml file and add this * filter definition: * <filter> * <filter-name>Proxy Trusting Filter</filter-name> * <filter-class>org.pentaho.ui.servlet.ProxyTrustingFilter</filter-class> * <init-param> * <param-name>TrustedIpAddrs</param-name> * <param-value>127.0.0.1</param-value> * <description>Comma separated list of IP addresses of a trusted hosts.</description> * </init-param> * </filter> * The param-value for the param named TrustedIpAddrs is a comma separater list of * IP addresses/hostnames that the bi server will trust. The hostname or IP address * of the machine running this method must be in the TrustedIpAddrs list. * * In addition, you must have a filter mapping that maps the above filter name * (Proxy Trusting Filter) to a url that this method will be accessing on * the bi server. * * <filter-mapping> * <filter-name>Proxy Trusting Filter</filter-name> * <url-pattern>/SchedulerAdmin</url-pattern> * </filter-mapping> * Currently the PAC console uses SchedulerAdmin, Publish, and ResetRepository * * @param baseUrl base url of server, for instance: http://localhost:8080/pentaho * @param serviceName name of service on server, for instance: SchedulerAdmin * @param params params to pass with request */ public String execRemoteMethod(String baseUrl, String serviceName, HttpMethodType methodType, String userName, Map<String,Object> params ) throws ProxyException { if (params == null) { params = new HashMap<String, Object>(); } params.put( TRUSTED_USER_KEY, userName ); return super.execRemoteMethod(baseUrl, serviceName, methodType, params ); } }