/** * */ package org.gcube.portlets.user.geoportaldataviewer.server.util; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.gcube.application.geoportalcommon.shared.products.model.UploadedImageDV; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.portal.PortalContext; import org.gcube.common.scope.api.ScopeProvider; import org.gcube.portlets.user.geoportaldataviewer.server.ConcessioneImageUtil; import org.gcube.portlets.user.urlshortener.UrlShortener; import org.gcube.vomanagement.usermanagement.GroupManager; import org.gcube.vomanagement.usermanagement.exception.GroupRetrievalFault; import org.gcube.vomanagement.usermanagement.exception.UserManagementSystemException; import org.gcube.vomanagement.usermanagement.impl.LiferayGroupManager; import org.gcube.vomanagement.usermanagement.model.GCubeGroup; import org.gcube.vomanagement.usermanagement.model.GCubeUser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.liferay.portal.service.UserLocalServiceUtil; /** * The Class SessionUtil. * * @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it) * * Oct 20, 2020 */ public class SessionUtil { /** The log. */ private static Logger LOG = LoggerFactory.getLogger(SessionUtil.class); public static final String URL_SHORTENER_SERVICE = "URL_SHORTENER_SERVICE"; public static final String CACHE_IMAGE_PREVIEW_FOR_CONCESSIONE = "MAP_IMAGE_PREVIEW_FOR_CONCESSIONE"; /** * Checks if is into portal. * * @return true, if is into portal */ public static boolean isIntoPortal() { try { UserLocalServiceUtil.getService(); return true; } catch (Exception ex) { LOG.warn("Development Mode ON"); return false; } } /** * Checks if is session expired. * * @param httpServletRequest the http servlet request * @return true, if is session expired * @throws Exception the exception */ public static boolean isSessionExpired(HttpServletRequest httpServletRequest) throws Exception { LOG.trace("workspace session validating..."); return PortalContext.getConfiguration().getCurrentUser(httpServletRequest) == null; } /** * Retrieve the current user by using the portal manager. * * @param request the request * @return a GcubeUser object */ public static GCubeUser getCurrentUser(HttpServletRequest request) { if (request == null) throw new IllegalArgumentException("HttpServletRequest is null!"); PortalContext pContext = PortalContext.getConfiguration(); GCubeUser user = pContext.getCurrentUser(request); LOG.debug("Returning user " + user); return user; } /** * Retrieve the current scope by using the portal manager. * * @param request the request * @param setInThread the set in thread * @return a GcubeUser object */ public static String getCurrentContext(HttpServletRequest request, boolean setInThread) { if (request == null) throw new IllegalArgumentException("HttpServletRequest is null!"); PortalContext pContext = PortalContext.getConfiguration(); String context = pContext.getCurrentScope(request); if (context != null && setInThread) ScopeProvider.instance.set(context); LOG.debug("Returning context " + context); return context; } /** * Retrieve the current scope by using the portal manager. * * @param request the request * @param setInThread the set in thread * @return a GcubeUser object */ public static String getCurrentToken(HttpServletRequest request, boolean setInThread) { if (request == null) throw new IllegalArgumentException("HttpServletRequest is null!"); PortalContext pContext = PortalContext.getConfiguration(); String scope = pContext.getCurrentScope(request); GCubeUser user = pContext.getCurrentUser(request); String token = PortalContext.getConfiguration().getCurrentUserToken(scope, user.getUsername()); if (token != null && setInThread) SecurityTokenProvider.instance.set(token); LOG.debug("Returning token " + token.substring(1, 10) + "MASKED_TOKEN"); return token; } /** * Retrieve the group given the scope. * * @param scope the scope * @return the group from scope * @throws UserManagementSystemException the user management system exception * @throws GroupRetrievalFault the group retrieval fault */ public static GCubeGroup getGroupFromScope(String scope) throws UserManagementSystemException, GroupRetrievalFault { if (scope == null || scope.isEmpty()) throw new IllegalArgumentException("Scope is missing here!!"); GroupManager gm = new LiferayGroupManager(); long groupId = gm.getGroupIdFromInfrastructureScope(scope); return gm.getGroup(groupId); } /** * Gets the url shortener. * * @param httpServletRequest the http servlet request * @return the url shortener */ public static UrlShortener getUrlShortener(HttpServletRequest httpServletRequest) { HttpSession session = httpServletRequest.getSession(); UrlShortener shortener = null; try { shortener = (UrlShortener) session.getAttribute(URL_SHORTENER_SERVICE); if (shortener == null) { shortener = new UrlShortener(); session.setAttribute(URL_SHORTENER_SERVICE, shortener); } } catch (Exception e) { LOG.warn("Error occurred when instancing the " + UrlShortener.class.getSimpleName(), e); } return shortener; } /** * Gets the preview image for concessione. It is the first image retrieved from * mongoService for mongoConcessioneId. Caching it into session * * @param httpServletRequest the http servlet request * @param itemType the item type * @param mongoConcessioneId the mongo concessione id * @return the preview image for concessione */ public static UploadedImageDV getPreviewImageForConcessione(HttpServletRequest httpServletRequest, String itemType, String mongoConcessioneId) { HttpSession session = httpServletRequest.getSession(); Map> mapImages = null; List lUI = null; try { mapImages = (LinkedHashMap) session.getAttribute(CACHE_IMAGE_PREVIEW_FOR_CONCESSIONE); if (mapImages == null) { mapImages = new LinkedHashMap>(); } List imagePreviewForConcessione = mapImages.get(mongoConcessioneId); if (imagePreviewForConcessione == null || imagePreviewForConcessione.size() == 0) { LOG.info("Into " + CACHE_IMAGE_PREVIEW_FOR_CONCESSIONE + " object session the mongoConcessioneId " + mongoConcessioneId + " is empty or null, loading from service and filling it"); lUI = new ConcessioneImageUtil().getUploadedImagesForId(httpServletRequest, itemType, mongoConcessioneId, 1); mapImages.put(mongoConcessioneId, lUI); } lUI = mapImages.get(mongoConcessioneId); LOG.info("From " + CACHE_IMAGE_PREVIEW_FOR_CONCESSIONE + " object session read image: " + lUI); session.setAttribute(CACHE_IMAGE_PREVIEW_FOR_CONCESSIONE, mapImages); } catch (Exception e) { LOG.warn("Error occurred when instancing the " + UrlShortener.class.getSimpleName(), e); } if (lUI == null || lUI.isEmpty()) return null; return lUI.get(0); } }