/* * Copyright (C) 2011 eXo Platform SAS. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software 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. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.exoplatform.portal.application; import java.util.Enumeration; import java.util.Locale; import java.util.ResourceBundle; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.exoplatform.portal.config.UserPortalConfig; import org.exoplatform.portal.config.UserPortalConfigService; import org.exoplatform.portal.mop.SiteKey; import org.exoplatform.portal.mop.user.UserNavigation; import org.exoplatform.portal.mop.user.UserNode; import org.exoplatform.portal.mop.user.UserNodeFilterConfig; import org.exoplatform.portal.mop.user.UserPortal; import org.exoplatform.portal.mop.user.UserPortalContext; import org.exoplatform.portal.url.PortalURLContext; import org.exoplatform.portal.url.URLWriter; import org.exoplatform.web.ControllerContext; import org.exoplatform.web.WebRequestHandler; import org.exoplatform.web.url.MimeType; import org.exoplatform.web.url.URLFactoryService; import org.exoplatform.web.url.navigation.NavigationResource; import org.exoplatform.web.url.navigation.NodeURL; /** * This handler resolves legacy request and redirect them to the new URL computed dynamically against the routing table. * * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a> */ public class LegacyRequestHandler extends WebRequestHandler { /** . */ private final URLFactoryService urlFactory; /** . */ private final UserPortalConfigService userPortalService; /** . */ private final UserPortalContext userPortalContext = new UserPortalContext() { public ResourceBundle getBundle(UserNavigation navigation) { return null; } public Locale getUserLocale() { return Locale.ENGLISH; } }; public LegacyRequestHandler(URLFactoryService urlFactory, UserPortalConfigService userPortalService) { this.urlFactory = urlFactory; this.userPortalService = userPortalService; } @Override public String getHandlerName() { return "legacy"; } @Override public boolean execute(ControllerContext context) throws Exception { String requestSiteName = context.getParameter(PortalRequestHandler.REQUEST_SITE_NAME); String requestPath = context.getParameter(PortalRequestHandler.REQUEST_PATH); String requestURI = context.getRequest().getRequestURI(); HttpServletRequest request = context.getRequest(); HttpServletResponse response = context.getResponse(); if (requestURI.startsWith(request.getContextPath() + "/private/") && request.getRemoteUser() == null) { // GTNPORTAL-3415 - Preserve query string if present StringBuilder initialURI = new StringBuilder(); initialURI.append(request.getRequestURI()); if (request.getQueryString() != null) { initialURI.append("?").append(request.getQueryString()); } String doLoginPath = request.getContextPath() + "/login" + "?initialURI=" + initialURI.toString(); response.sendRedirect(response.encodeRedirectURL(doLoginPath)); return true; } SiteKey siteKey = SiteKey.portal(requestSiteName); String uri = requestPath; // Resolve the user node if node path is indicated if (!requestPath.equals("")) { UserPortalConfig cfg = userPortalService.getUserPortalConfig(requestSiteName, request.getRemoteUser(), userPortalContext); if (cfg != null) { UserPortal userPortal = cfg.getUserPortal(); UserNodeFilterConfig.Builder builder = UserNodeFilterConfig.builder().withAuthMode( UserNodeFilterConfig.AUTH_READ); UserNode userNode = userPortal.resolvePath(builder.build(), requestPath); if (userNode != null) { siteKey = userNode.getNavigation().getKey(); uri = userNode.getURI(); } } } // PortalURLContext urlContext = new PortalURLContext(context, siteKey); NodeURL url = urlFactory.newURL(NodeURL.TYPE, urlContext); url.setResource(new NavigationResource(siteKey.getType(), siteKey.getName(), uri)); if (URLWriter.isUrlEncoded()) { url.setMimeType(MimeType.XHTML); } else { url.setMimeType(MimeType.PLAIN); } Enumeration paraNames = request.getParameterNames(); while (paraNames.hasMoreElements()) { String parameter = paraNames.nextElement().toString(); url.setQueryParameterValues(parameter, request.getParameterValues(parameter)); } String s = url.toString(); response.sendRedirect(response.encodeRedirectURL(s)); return true; } @Override protected boolean getRequiresLifeCycle() { return true; } }