/**
* Copyright (c) 2009-2014 Câmara dos Deputados. Todos os direitos reservados.
*
* e-Democracia é um software livre; você pode redistribuí-lo e/ou modificá-lo dentro
* dos termos da Licença Pública Geral Menor GNU como publicada pela Fundação do
* Software Livre (FSF); na versão 2.1 da Licença, ou (na sua opinião) qualquer versão.
*
* Este programa é distribuído na esperança de que possa ser útil, mas SEM NENHUMA GARANTIA;
* sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR.
* Veja a Licença Pública Geral Menor GNU para maiores detalhes.
*/
package br.gov.camara.edemocracia.hook.portal;
import javax.portlet.PortletMode;
import javax.portlet.PortletRequest;
import javax.portlet.PortletURL;
import javax.portlet.WindowState;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.liferay.portal.kernel.portlet.WindowStateFactory;
import com.liferay.portal.kernel.struts.BaseStrutsAction;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.HttpUtil;
import com.liferay.portal.kernel.util.MethodKey;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.PortalClassInvoker;
import com.liferay.portal.kernel.util.PrefsPropsUtil;
import com.liferay.portal.kernel.util.PropsKeys;
import com.liferay.portal.kernel.util.PropsUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.theme.ThemeDisplay;
import com.liferay.portal.util.PortalUtil;
import com.liferay.portal.util.PortletKeys;
import com.liferay.portlet.PortletURLFactoryUtil;
/**
* Autentica, mas redirecionando para o portlet de login através de HTTP
*
* @author p_7339
*
*/
public class CDLoginAction extends BaseStrutsAction {
@Override
public String execute(HttpServletRequest request,
HttpServletResponse response) throws Exception {
ThemeDisplay themeDisplay = (ThemeDisplay) request
.getAttribute(WebKeys.THEME_DISPLAY);
if (GetterUtil.getBoolean(PropsUtil.get(PropsKeys.AUTH_LOGIN_DISABLED))) {
response.sendRedirect(themeDisplay.getPathMain()
+ PropsUtil.get(PropsKeys.AUTH_LOGIN_DISABLED_PATH));
return null;
}
String login = ParamUtil.getString(request, "login");
String password = request.getParameter("password");
boolean rememberMe = ParamUtil.getBoolean(request, "rememberMe");
String authType = ParamUtil.getString(request, "authType");
if (Validator.isNotNull(login) && Validator.isNotNull(password)) {
MethodKey method = new MethodKey(
"com.liferay.portlet.login.util.LoginUtil", "login",
new Class[] { HttpServletRequest.class,
HttpServletResponse.class, String.class,
String.class, boolean.class, String.class });
PortalClassInvoker.invoke(false, method, request, response, login,
password, rememberMe, authType);
}
HttpSession session = request.getSession();
if ((session.getAttribute("j_username") != null)
&& (session.getAttribute("j_password") != null)) {
if (GetterUtil.getBoolean(PropsUtil
.get(PropsKeys.PORTAL_JAAS_ENABLE))) {
return "/portal/touch_protected.jsp";
} else {
response.sendRedirect(themeDisplay.getPathMain());
return null;
}
}
String redirect = PortalUtil.getSiteLoginURL(themeDisplay);
if (Validator.isNull(redirect)) {
redirect = PropsUtil.get(PropsKeys.AUTH_LOGIN_URL);
}
if (Validator.isNull(redirect)) {
PortletURL portletURL = PortletURLFactoryUtil.create(request,
PortletKeys.LOGIN, themeDisplay.getPlid(),
PortletRequest.RENDER_PHASE);
portletURL.setWindowState(getWindowState(request));
portletURL.setPortletMode(PortletMode.VIEW);
portletURL.setParameter("saveLastPath", "0");
portletURL.setParameter("struts_action", "/login/login");
redirect = portletURL.toString();
}
String loginRedirect = ParamUtil.getString(request, "redirect");
if (Validator.isNotNull(loginRedirect)) {
if (PrefsPropsUtil.getBoolean(themeDisplay.getCompanyId(),
PropsKeys.CAS_AUTH_ENABLED, GetterUtil.getBoolean(PropsUtil
.get(PropsKeys.CAS_AUTH_ENABLED)))) {
redirect = loginRedirect;
} else {
String loginPortletNamespace = PortalUtil
.getPortletNamespace(PropsUtil
.get(PropsKeys.AUTH_LOGIN_PORTLET_NAME));
String loginRedirectParameter = loginPortletNamespace
+ "redirect";
redirect = HttpUtil.setParameter(redirect, "p_p_id",
PropsUtil.get(PropsKeys.AUTH_LOGIN_PORTLET_NAME));
redirect = HttpUtil
.setParameter(redirect, "p_p_lifecycle", "0");
redirect = HttpUtil.setParameter(redirect,
loginRedirectParameter, loginRedirect);
}
}
response.sendRedirect(redirect);
return null;
}
protected WindowState getWindowState(HttpServletRequest request) {
WindowState windowState = WindowState.MAXIMIZED;
String windowStateString = ParamUtil.getString(request, "windowState");
if (Validator.isNotNull(windowStateString)) {
windowState = WindowStateFactory.getWindowState(windowStateString);
}
return windowState;
}
}