package org.gcube.portlets_widgets.catalogue_sharing_widget.server; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.gcube.common.portal.PortalContext; import org.gcube.common.scope.api.ScopeProvider; import org.gcube.datacatalogue.utillibrary.server.ApplicationProfileScopePerUrlReader; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; public class ServerUtils { private static final Log logger = LogFactoryUtil.getLog(ServerUtils.class); public static final String GCUBE_REQUEST_URL = "gcube-request-url"; /** * Get the scope in which ckan information needs to be discovered from the url * @param httpServletRequest * @return */ public static String getScopeFromClientUrl(HttpServletRequest httpServletRequest){ if(httpServletRequest == null) throw new IllegalArgumentException("HttpServletRequest is null!"); String scopeToReturn = null; try{ String clientUrl = getCurrentClientUrl(httpServletRequest).split("\\?")[0]; logger.debug("Client url is " + clientUrl); // check if this information is in session, otherwise set it and return HttpSession session = httpServletRequest.getSession(); if((scopeToReturn = (String) session.getAttribute(clientUrl)) != null){ logger.debug("Scope to return is " + scopeToReturn); }else{ // ask to the ckan library and set it scopeToReturn = ApplicationProfileScopePerUrlReader.getScopePerUrl(clientUrl); logger.debug("Scope to return is " + scopeToReturn); session.setAttribute(clientUrl, scopeToReturn); } }catch(Exception e){ scopeToReturn = getCurrentContext(httpServletRequest, false); logger.warn("Failed to determine the scope from the client url, returning the current one: " + scopeToReturn); } return scopeToReturn; } /** * Retrieve the current scope by using the portal manager * @param b * @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); logger.debug("Returning context " + context); if(context != null && setInThread) ScopeProvider.instance.set(context); return context; } /** * Needed to get the url of the client * @param httpServletRequest the httpServletRequest object * @return the instance of the user * @see the url at client side */ public static String getCurrentClientUrl(HttpServletRequest httpServletRequest) { if(httpServletRequest == null) throw new IllegalArgumentException("HttpServletRequest is null!"); return httpServletRequest.getHeader(GCUBE_REQUEST_URL); } /** * Needed to get the url of the client * @param httpServletRequest the httpServletRequest object * @return the instance of the user * @see the url at client side */ public static String getUserInSession(HttpServletRequest httpServletRequest) { return PortalContext.getConfiguration().getCurrentUser(httpServletRequest).getUsername(); } }