--- /dev/null
+/*******************************************************************************
+ * Copyright � Igor Barma, Alexandre Desoubeaux, Christian Martel, Eric Brun, Mathieu Amblard, Gwenael Gevet, Pierre Guillot, 2012
+ * Copyright Alexandre Desoubeaux, Christian Martel, Cedric Lecarpentier, Alexandre Lefevre, Marc Salvat 2014-2016
+ * Copyright Alexandre Desoubeaux, Christian Martel, Cedric Lecarpentier, Marc Salvat, Marc Suarez, Harifetra Ramamonjy 2017
+ *
+ * This file is part of the work and learning management system Pentila Nero.
+ *
+ * Pentila Nero is free software. You can redistribute it and/or modify since
+ * you respect the terms of either (at least one of the both license) :
+ * - under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ * - the CeCILL-C as published by CeCILL-C; either version 1 of the
+ * License, or any later version
+ * - the GNU Lesser General Public License as published by the
+ * Free Software Foundation, either version 3 of the license,
+ * or (at your option) any later version.
+ *
+ * There are special exceptions to the terms and conditions of the
+ * licenses as they are applied to this software. View the full text of
+ * the exception in file LICENSE-PROJECT.txt in the directory of this software
+ * distribution.
+ *
+ * Pentila Nero 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
+ * Licenses for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * and the CeCILL-C and the GNU Lesser General Public License along with
+ * Pentila Nero. If not, see :
+ * <http://www.gnu.org/licenses/> and
+ * <http://www.cecill.info/licences.fr.html>.
+ ******************************************************************************/
+package com.pentila.entSavoie.userProperties.action;
+
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.PortletConfig;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+
+import com.liferay.portal.events.EventsProcessorUtil;
+import com.liferay.portal.kernel.exception.PortalException;
+import com.liferay.portal.kernel.exception.SystemException;
+import com.liferay.portal.kernel.struts.LastPath;
+import com.liferay.portal.kernel.util.HttpUtil;
+import com.liferay.portal.kernel.util.ParamUtil;
+import com.liferay.portal.kernel.util.PropsKeys;
+import com.liferay.portal.kernel.util.StringPool;
+import com.liferay.portal.model.Company;
+import com.liferay.portal.model.User;
+import com.liferay.portal.service.UserLocalServiceUtil;
+import com.liferay.portal.struts.ActionConstants;
+import com.liferay.portal.struts.PortletAction;
+import com.liferay.portal.theme.ThemeDisplay;
+import com.liferay.portal.util.CookieKeys;
+import com.liferay.portal.util.PortalUtil;
+import com.liferay.portal.util.PropsValues;
+import com.liferay.portal.util.WebKeys;
+import com.liferay.util.Encryptor;
+import com.liferay.util.EncryptorException;
+import com.pentila.entSavoie.utils.ENTMainUtilsLocalServiceUtil;
+
+/**
+ * Demande de recuperation de mot de passe
+ */
+public class DoAsUserAction extends PortletAction {
+
+ public ActionForward strutsExecute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
+ try {
+ long doAsUserId = ParamUtil.getLong(request, "userId", 0);
+ boolean rememberMe = ParamUtil.getBoolean(request, "rememberMe", false);
+ ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(WebKeys.THEME_DISPLAY);
+ User currentUser = PortalUtil.getUser(request);
+
+ String doAsUserUrl = getDoAsUserUrl(request, response, themeDisplay, currentUser, doAsUserId, rememberMe);
+ response.sendRedirect(doAsUserUrl);
+
+ return null;
+ }
+ catch (Exception e) {
+ PortalUtil.sendError(e, request, response);
+ return null;
+ }
+ }
+
+ public void processAction(ActionMapping mapping, ActionForm form, PortletConfig portletConfig, ActionRequest actionRequest, ActionResponse actionResponse) throws Exception {
+ try {
+ long doAsUserId = ParamUtil.getLong(actionRequest, "userId", 0);
+ boolean rememberMe = ParamUtil.getBoolean(actionRequest, "rememberMe", false);
+
+ HttpServletRequest request = PortalUtil.getHttpServletRequest(actionRequest);
+ HttpServletResponse response = PortalUtil.getHttpServletResponse(actionResponse);
+
+ User currentUser = PortalUtil.getUser(request);
+ ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(WebKeys.THEME_DISPLAY);
+
+ String doAsUserUrl = getDoAsUserUrl(request, response, themeDisplay, currentUser, doAsUserId, rememberMe);
+ actionResponse.sendRedirect(doAsUserUrl);
+
+ setForward(actionRequest, ActionConstants.COMMON_NULL);
+ }
+ catch (Exception e) {
+ PortalUtil.sendError(e, actionRequest, actionResponse);
+ }
+ }
+
+ private String getDoAsUserUrl(HttpServletRequest request, HttpServletResponse response, ThemeDisplay themeDisplay, User currentUser, long doAsUserId, boolean rememberMe) throws EncryptorException, PortalException, SystemException{
+
+ Company company = themeDisplay.getCompany();
+
+ if (doAsUserId <= 0) {
+ doAsUserId = company.getDefaultUser().getUserId();
+ }
+
+ User doAsUser = UserLocalServiceUtil.getUser(doAsUserId);
+ String defaultPageLanding = ENTMainUtilsLocalServiceUtil.getLoginDefaultPageLanding(doAsUser.getCompanyId());
+ String doAsURL = themeDisplay.getPortalURL() + "/user/" + doAsUser.getScreenName() + defaultPageLanding;
+ String encDoAsUserId = "";
+ encDoAsUserId = Encryptor.encrypt(company.getKeyObj(), String.valueOf(doAsUserId));
+ doAsURL = HttpUtil.addParameter(doAsURL, "doAsUserId", encDoAsUserId);
+
+ if(doAsUserId != themeDisplay.getRealUserId()){
+ try {
+ request.setAttribute(WebKeys.USER, UserLocalServiceUtil.getUser(doAsUserId));
+
+ // Post login events
+ EventsProcessorUtil.process(
+ PropsKeys.LOGIN_EVENTS_POST, PropsValues.LOGIN_EVENTS_POST,
+ request, response);
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ Cookie cookie = new Cookie("DO_AS_USER_ID_" + themeDisplay.getRealUserId(), encDoAsUserId);
+ cookie.setMaxAge(rememberMe?CookieKeys.MAX_AGE:-1);
+ cookie.setPath(StringPool.SLASH);
+ response.addCookie(cookie);
+
+ return doAsURL;
+ }
+
+}