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

Reply via email to