163 lines
6.4 KiB
Java
163 lines
6.4 KiB
Java
/****************************************************************************
|
|
* This software is part of the gCube Project.
|
|
* Site: http://www.gcube-system.org/
|
|
****************************************************************************
|
|
* The gCube/gCore software is licensed as Free Open Source software
|
|
* conveying to the EUPL (http://ec.europa.eu/idabc/eupl).
|
|
* The software and documentation is provided by its authors/distributors
|
|
* "as is" and no expressed or
|
|
* implied warranty is given for its use, quality or fitness for a
|
|
* particular case.
|
|
****************************************************************************
|
|
* Filename: StatusHandler.java
|
|
****************************************************************************
|
|
* @author <a href="mailto:daniele.strollo@isti.cnr.it">Daniele Strollo</a>
|
|
***************************************************************************/
|
|
|
|
package org.gcube.portlets.admin.resourcemanagement.server.gcube.services;
|
|
|
|
import java.util.List;
|
|
|
|
import javax.servlet.http.HttpSession;
|
|
|
|
import org.gcube.application.framework.core.session.ASLSession;
|
|
import org.gcube.application.framework.core.session.SessionManager;
|
|
import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper;
|
|
import org.gcube.portlets.admin.resourcemanagement.server.gcube.services.configuration.ConfigurationLoader;
|
|
import org.gcube.resourcemanagement.support.client.utils.CurrentStatus;
|
|
import org.gcube.resourcemanagement.support.server.utils.ServerConsole;
|
|
import org.gcube.resourcemanagement.support.shared.types.RunningMode;
|
|
import org.gcube.resourcemanagement.support.shared.types.UserGroup;
|
|
import org.gcube.vomanagement.usermanagement.RoleManager;
|
|
import org.gcube.vomanagement.usermanagement.UserManager;
|
|
import org.gcube.vomanagement.usermanagement.impl.LiferayRoleManager;
|
|
import org.gcube.vomanagement.usermanagement.impl.LiferayUserManager;
|
|
import org.gcube.vomanagement.usermanagement.model.GCubeRole;
|
|
import org.gcube.vomanagement.usermanagement.model.GCubeUser;
|
|
|
|
/**
|
|
* @author Daniele Strollo (ISTI-CNR)
|
|
*
|
|
*/
|
|
public class StatusHandler {
|
|
private static final String STATUS_KEY = "current_status";
|
|
public static final String USER_EMAIL_KEY = "theusermail";
|
|
private static final String LOG_PREFIX = "[StatusHandler]";
|
|
private static final String ADMIN_ROLE = "VO-Admin";
|
|
|
|
public static final void setStatus(final HttpSession session, final CurrentStatus status) {
|
|
session.setAttribute(STATUS_KEY, status);
|
|
}
|
|
|
|
public static final void clearStatus(final HttpSession session) {
|
|
if (session != null && session.getAttribute(STATUS_KEY) != null) {
|
|
session.removeAttribute(STATUS_KEY);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Initializes the status if running in portal mode otherwise returns null.
|
|
* @param session
|
|
* @return
|
|
*/
|
|
private static CurrentStatus initStatus(final HttpSession session) {
|
|
if (session == null || session.getAttribute(ScopeHelper.USERNAME_ATTRIBUTE) == null) {
|
|
return null;
|
|
}
|
|
|
|
String username = session.getAttribute(ScopeHelper.USERNAME_ATTRIBUTE).toString();
|
|
|
|
// inside portal
|
|
if (username != null) {
|
|
ServerConsole.info(LOG_PREFIX, "Running inside portal... [OK]");
|
|
CurrentStatus status = new CurrentStatus();
|
|
status.setCurrentUser(username);
|
|
status.setCredentials(UserGroup.USER);
|
|
status.setRunningMode(RunningMode.PORTAL);
|
|
ASLSession aslSession = SessionManager.getInstance().getASLSession(session.getId(), username);
|
|
ServerConsole.error(LOG_PREFIX, "The portal scope is [" + aslSession.getScopeName() + "]");
|
|
|
|
status.setCurrentScope(aslSession.getScopeName());
|
|
|
|
aslSession.getGroupId();
|
|
RoleManager rman = new LiferayRoleManager();
|
|
UserManager uman = new LiferayUserManager();
|
|
|
|
|
|
try {
|
|
List<GCubeRole> roles = null;
|
|
|
|
// Gets the user email. If not provided the default one will be used.
|
|
// The mail will be store inside the session.
|
|
GCubeUser umodel = uman.getUserByUsername(username);
|
|
session.setAttribute(USER_EMAIL_KEY, umodel.getEmail());
|
|
long groupId = aslSession.getGroupId();
|
|
roles = rman.listRolesByUserAndGroup(groupId, uman.getUserByUsername(username).getUserId());
|
|
for (GCubeRole role : roles) {
|
|
if (role.getRoleName().equals(ADMIN_ROLE)) {
|
|
status.setCredentials(UserGroup.ADMIN);
|
|
}
|
|
}
|
|
} catch (Exception e) {
|
|
ServerConsole.error(LOG_PREFIX, e);
|
|
}
|
|
return status;
|
|
}
|
|
// not running in a portal
|
|
return null;
|
|
}
|
|
|
|
public static final CurrentStatus getStatus(final HttpSession session) {
|
|
// CREATING THE STATUS
|
|
// Status initialization
|
|
if (session.getAttribute(STATUS_KEY) == null) {
|
|
CurrentStatus status = initStatus(session);
|
|
|
|
// Not in portal mode
|
|
if (status == null) {
|
|
ServerConsole.info(LOG_PREFIX, "Running outside portal... [OK]");
|
|
status = new CurrentStatus();
|
|
|
|
// LOADS THE DEFAULTS
|
|
try {
|
|
String runningMode = ConfigurationLoader.getProperty("RUNNING_MODE");
|
|
status.setRunningMode(RunningMode.valueOf(runningMode));
|
|
ServerConsole.debug(LOG_PREFIX, "Setting RUNNING_MODE to: " + status.getRunningMode());
|
|
} catch (Exception e) {
|
|
ServerConsole.error(LOG_PREFIX, "Loading defaults", e);
|
|
}
|
|
try {
|
|
String credentials = ConfigurationLoader.getProperty("USER_CREDENTIALS");
|
|
status.setCredentials(UserGroup.valueOf(credentials));
|
|
ServerConsole.debug(LOG_PREFIX, "Setting USER_CREDENTIALS to: " + status.getCredentials());
|
|
} catch (Exception e) {
|
|
ServerConsole.error(LOG_PREFIX, "Loading defaults", e);
|
|
}
|
|
try {
|
|
status.setCurrentUser(ConfigurationLoader.getProperty("DEFAULT_USER"));
|
|
ServerConsole.debug(LOG_PREFIX, "Setting DEFAULT_USER to: " + status.getCurrentUser());
|
|
} catch (Exception e) {
|
|
ServerConsole.error(LOG_PREFIX, "Loading defaults", e);
|
|
}
|
|
try {
|
|
status.setCurrentScope(ConfigurationLoader.getProperty("DEFAULT_SCOPE"));
|
|
ServerConsole.debug(LOG_PREFIX, "Setting DEFAULT_SCOPE to: " + status.getCurrentScope());
|
|
} catch (Exception e) {
|
|
ServerConsole.error(LOG_PREFIX, "Loading defaults", e);
|
|
}
|
|
try {
|
|
if (ConfigurationLoader.getProperty("LIST_GHN_STARTUP").equalsIgnoreCase("NO"))
|
|
status.setLoadGHNatStartup(false);
|
|
ServerConsole.debug(LOG_PREFIX, "*********************\n\n\nSetting LIST_GHN_STARTUP to: " + status.isLoadGHNatStartup());
|
|
} catch (Exception e) {
|
|
ServerConsole.error(LOG_PREFIX, "Loading defaults", e);
|
|
}
|
|
}
|
|
session.setAttribute(STATUS_KEY, status);
|
|
return status;
|
|
} else {
|
|
return (CurrentStatus) session.getAttribute(STATUS_KEY);
|
|
}
|
|
}
|
|
}
|