Ravi Nori has uploaded a new change for review. Change subject: core : Persist engine session on login and delete on logout ......................................................................
core : Persist engine session on login and delete on logout Persist engine session into database on user login and clear the engine session on user logout Change-Id: Id716d9c6f65898ccd0ffd84d8b05926b78ac9692 Bug-Url: https://bugzilla.redhat.com/1092744 Signed-off-by: Ravi Nori <rn...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/aaa/LoginBaseCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/aaa/SessionDataContainer.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AbstractGetEntitiesWithPermittedActionParametersQueryTest.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/aaa/SessionDataContainerTest.java 5 files changed, 77 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/61/35361/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java index 54dcd02..e7e4dd9 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java @@ -9,6 +9,7 @@ import javax.ejb.Startup; import org.ovirt.engine.core.bll.aaa.DbUserCacheManager; +import org.ovirt.engine.core.bll.aaa.SessionDataContainer; import org.ovirt.engine.core.bll.dwh.DwhHeartBeat; import org.ovirt.engine.core.bll.gluster.GlusterJobsManager; import org.ovirt.engine.core.bll.job.ExecutionHandler; @@ -105,6 +106,8 @@ SchedulingManager.getInstance().init(); + SessionDataContainer.getInstance().cleanupAllEngineSessions(); + new DwhHeartBeat().init(); } catch (Exception ex) { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/aaa/LoginBaseCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/aaa/LoginBaseCommand.java index e261156..ffba6b3 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/aaa/LoginBaseCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/aaa/LoginBaseCommand.java @@ -127,6 +127,7 @@ SessionDataContainer.getInstance().setAuthRecord(engineSessionId, authRecord); SessionDataContainer.getInstance().setPrincipal(engineSessionId, authRecord.<String>get(Authn.AuthRecord.PRINCIPAL)); SessionDataContainer.getInstance().setPrincipalRecord(engineSessionId, principalRecord); + SessionDataContainer.getInstance().persistEngineSession(engineSessionId); // Add the user password to the session, as it will be needed later // when trying to log on to virtual machines: diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/aaa/SessionDataContainer.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/aaa/SessionDataContainer.java index 7ea494d..24ad054 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/aaa/SessionDataContainer.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/aaa/SessionDataContainer.java @@ -1,7 +1,9 @@ package org.ovirt.engine.core.bll.aaa; +import java.util.ArrayList; import java.util.Date; import java.util.Iterator; +import java.util.List; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; @@ -10,9 +12,13 @@ import org.ovirt.engine.api.extensions.ExtMap; import org.ovirt.engine.api.extensions.aaa.Acct; import org.ovirt.engine.core.aaa.AcctUtils; +import org.ovirt.engine.core.common.businessentities.EngineSession; +import org.ovirt.engine.core.common.businessentities.Permissions; import org.ovirt.engine.core.common.businessentities.aaa.DbUser; import org.ovirt.engine.core.common.config.Config; import org.ovirt.engine.core.common.config.ConfigValues; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.extensions.mgr.ExtensionProxy; import org.ovirt.engine.core.utils.timer.OnTimerMethodAnnotation; @@ -88,6 +94,37 @@ return sessionInfoMap.get(sessionId); } + public void persistEngineSession(String sessionId) { + SessionInfo sessionInfo = getSessionInfo(sessionId); + if (sessionInfo != null) { + EngineSession engineSession = new EngineSession(); + engineSession.setEngineSessionId(sessionId); + DbUser user = getUser(sessionId, false); + engineSession.setUserId(user.getId()); + engineSession.setUserName(user.getLoginName()); + engineSession.setGroupIds(user.getGroupIds()); + engineSession.setRoleIds(getSystemRolesForUser(user.getId(), user.isAdmin() ? false : true)); + getDbFacade().getEngineSessionDao().save(engineSession); + } + } + + private List<Guid> getSystemRolesForUser(Guid userId, boolean isFiltered) { + List<Guid> systemRoles = new ArrayList<>(); + for (Permissions p : + DbFacade.getInstance().getPermissionDao().getAllForEntity(Guid.SYSTEM, userId, isFiltered)) { + systemRoles.add(p.getrole_id()); + } + + return systemRoles; + } + + public EngineSession getEngineSession(String sessionId) { + return getDbFacade().getEngineSessionDao().getBySessionId(sessionId); + } + + public void cleanupAllEngineSessions() { + getDbFacade().getEngineSessionDao().removeAll(); + } /** * Remove the cached data of current session @@ -222,9 +259,23 @@ msgArgs ); sessionInfoMap.remove(sessionId); + getDbFacade().getEngineSessionDao().removeBySessionId(sessionId); } private String getPrincipalName(String sessionId) { return (String) getData(sessionId, PRINCIPAL_PARAMETER_NAME, false); } + + DbFacade dbFacade; + + public void setDbFacade(DbFacade dbFacade) { + this.dbFacade = dbFacade; + } + + public DbFacade getDbFacade() { + if (dbFacade == null) { + dbFacade = DbFacade.getInstance(); + } + return dbFacade; + } } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AbstractGetEntitiesWithPermittedActionParametersQueryTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AbstractGetEntitiesWithPermittedActionParametersQueryTest.java index 067fa09..1404664 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AbstractGetEntitiesWithPermittedActionParametersQueryTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AbstractGetEntitiesWithPermittedActionParametersQueryTest.java @@ -1,5 +1,7 @@ package org.ovirt.engine.core.bll; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import org.junit.After; @@ -7,6 +9,8 @@ import org.ovirt.engine.core.bll.aaa.SessionDataContainer; import org.ovirt.engine.core.common.businessentities.ActionGroup; import org.ovirt.engine.core.common.queries.GetEntitiesWithPermittedActionParameters; +import org.ovirt.engine.core.dal.dbbroker.DbFacade; +import org.ovirt.engine.core.dao.EngineSessionDAO; import org.ovirt.engine.core.utils.RandomUtils; public abstract class AbstractGetEntitiesWithPermittedActionParametersQueryTest<P, Q> extends AbstractUserQueryTest<GetEntitiesWithPermittedActionParameters, QueriesCommandBase<? extends GetEntitiesWithPermittedActionParameters>> { @@ -32,6 +36,13 @@ sessionID = RandomUtils.instance().nextString(10); when(getQueryParameters().getSessionId()).thenReturn(sessionID); SessionDataContainer.getInstance().setUser(sessionID, getUser()); + + DbFacade dbFacadeMock = mock(DbFacade.class); + SessionDataContainer.getInstance().setDbFacade(dbFacadeMock); + + EngineSessionDAO engineSessionDAOMock = mock(EngineSessionDAO.class); + when(engineSessionDAOMock.removeBySessionId(any(String.class))).thenReturn(1); + when(dbFacadeMock.getEngineSessionDao()).thenReturn(engineSessionDAOMock); } @After diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/aaa/SessionDataContainerTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/aaa/SessionDataContainerTest.java index c5edc9e..ae985a2 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/aaa/SessionDataContainerTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/aaa/SessionDataContainerTest.java @@ -3,8 +3,10 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; +import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; import java.util.Date; @@ -15,6 +17,8 @@ import org.junit.Test; import org.ovirt.engine.core.common.businessentities.aaa.DbUser; import org.ovirt.engine.core.common.config.ConfigValues; +import org.ovirt.engine.core.dal.dbbroker.DbFacade; +import org.ovirt.engine.core.dao.EngineSessionDAO; import org.ovirt.engine.core.utils.MockConfigRule; /** @@ -36,6 +40,13 @@ @Before public void setUpContainer() { container = spy(SessionDataContainer.getInstance()); + DbFacade dbFacadeMock = mock(DbFacade.class); + when(container.getDbFacade()).thenReturn(dbFacadeMock); + + EngineSessionDAO engineSessionDAOMock = mock(EngineSessionDAO.class); + when(engineSessionDAOMock.removeBySessionId(any(String.class))).thenReturn(1); + when(dbFacadeMock.getEngineSessionDao()).thenReturn(engineSessionDAOMock); + clearSession(); } -- To view, visit http://gerrit.ovirt.org/35361 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Id716d9c6f65898ccd0ffd84d8b05926b78ac9692 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Ravi Nori <rn...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches