/* ===============================================================================
*
* Part of the InfoGlue Content Management Platform (www.infoglue.org)
*
* ===============================================================================
*
* Copyright (C)
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 2, as published by the
* Free Software Foundation. See the file LICENSE.html for more information.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY, including the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc. / 59 Temple
* Place, Suite 330 / Boston, MA 02111-1307 / USA.
*
* ===============================================================================
*/
package org.infoglue.deliver.applications.filters;
import java.security.Principal;
import java.util.Arrays;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.infoglue.cms.security.InfoGluePrincipal;
import org.infoglue.cms.security.InfoGlueRole;
import org.infoglue.deliver.portal.PathParser;
import org.infoglue.deliver.portal.PortalControlURL;
public class PortalServletRequest extends HttpServletRequestWrapper
{
private static final Log log = LogFactory.getLog(PortalServletRequest.class);
public static final String MULTI_VALUE = PathParser.MULTI_VALUE;
private Map paramMap;
private Principal principal = null;
/**
* @param req
*/
public PortalServletRequest(HttpServletRequest req)
{
super(req);
paramMap = PathParser.copyParameters(req.getParameterMap());
// Extend parameter map with infoglue parameters.
// TODO paramMap should be immutable
paramMap.putAll(PathParser.parsePathParameters(PortalControlURL.IG, req.getServletPath(), false));
if(paramMap.containsKey("proxyUrl") && req.getParameter("command") != null && !req.getParameter("command").equals(""))
{
//logger.info("\n\nCommand:" + req.getParameter("command") + " on " + req.getRequestURI());
paramMap.put("igproxy_command", new String[] {req.getParameter("command")});
paramMap.remove("command");
}
if (log.isDebugEnabled())
{
StringBuffer str = new StringBuffer();
for (Iterator it = paramMap.keySet().iterator(); it.hasNext();)
{
String name = (String) it.next();
str.append(name);
str.append(": ");
str.append(Arrays.asList((String[]) paramMap.get(name)));
if (it.hasNext())
str.append(", ");
}
log.debug("Available params: " + str);
}
this.principal = (InfoGluePrincipal)req.getSession().getAttribute("infogluePrincipal");
if(req.getUserPrincipal() != null)
this.principal = req.getUserPrincipal();
}
/* (non-Javadoc)
* @see javax.servlet.ServletRequest#getParameterMap()
*/
public Map getParameterMap()
{
return paramMap;
}
/* (non-Javadoc)
* @see javax.servlet.ServletRequest#getParameter(java.lang.String)
*/
public String getParameter(String name)
{
String[] values = (String[]) paramMap.get(name);
if (values != null && values.length > 0)
{
return values[0];
}
return null;
}
/* (non-Javadoc)
* @see javax.servlet.ServletRequest#getParameterNames()
*/
public Enumeration getParameterNames()
{
return Collections.enumeration(paramMap.keySet());
}
/* (non-Javadoc)
* @see javax.servlet.ServletRequest#getParameterValues(java.lang.String)
*/
public String[] getParameterValues(String name)
{
return (String[]) paramMap.get(name);
}
public String getRemoteUser()
{
return (this.principal == null ? null : this.principal.getName());
}
public boolean isUserInRole(String role)
{
boolean isUserInRole = false;
if(this.principal != null)
{
if(this.principal instanceof InfoGluePrincipal)
{
List roles = ((InfoGluePrincipal)this.principal).getRoles();
Iterator i = roles.iterator();
while(i.hasNext())
{
InfoGlueRole currentRole = (InfoGlueRole)i.next();
if(currentRole.getName().equals(role))
{
isUserInRole = true;
break;
}
}
}
else
{
isUserInRole = super.isUserInRole(role);
}
}
return isUserInRole;
}
public Principal getUserPrincipal()
{
return this.principal;
}
}