package org.ovirt.engine.core.bll;
import java.util.Collections;
import java.util.Map;
import org.ovirt.engine.core.bll.session.SessionDataContainer;
import org.ovirt.engine.core.common.AuditLogType;
import org.ovirt.engine.core.common.VdcObjectType;
import org.ovirt.engine.core.common.action.LogoutUserParameters;
import org.ovirt.engine.core.common.businessentities.DbUser;
import org.ovirt.engine.core.common.users.VdcUser;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.compat.StringHelper;
import org.ovirt.engine.core.dal.dbbroker.DbFacade;
public class LogoutUserCommand<T extends LogoutUserParameters> extends CommandBase<T> {
public LogoutUserCommand(T parameters) {
super(parameters);
if (getCurrentUser() == null) {
DbUser dbUser = DbFacade.getInstance().getDbUserDAO().get(parameters.getUserId());
setCurrentUser(new VdcUser(dbUser.getuser_id(), dbUser.getusername(), dbUser.getdomain()));
}
}
@Override
public AuditLogType getAuditLogTypeValue() {
return getSucceeded() ? AuditLogType.USER_VDC_LOGOUT : AuditLogType.USER_VDC_LOGOUT_FAILED;
}
@Override
protected void executeCommand() {
Guid userId = (getParameters()).getUserId();
String httpSessionId = getParameters().getHttpSessionId();
if (httpSessionId != null) {
DbFacade.getInstance().getDbUserDAO().removeUserSession(httpSessionId, userId);
SessionDataContainer.getInstance().removeSession(httpSessionId);
} else if (!StringHelper.EqOp(getParameters().getSessionId(), "")) {
SessionDataContainer.getInstance().removeSession(getParameters().getSessionId());
} else {
SessionDataContainer.getInstance().removeSession();
}
setSucceeded(true);
}
@Override
protected boolean IsUserAutorizedToRunAction() {
return true;
}
@Override
public Map<Guid, VdcObjectType> getPermissionCheckSubjects() {
// Not needed for admin operations.
return Collections.emptyMap();
}
}