Ravi Nori has uploaded a new change for review.

Change subject: core : Duplicated login events
......................................................................

core : Duplicated login events

Duplicate login events are show on user
login. The first login event is from
webadmin and the second is from plugin
infrastructure.

A new LoginTracker has been introduced that
checks if the user had a login event in the past
5 seconds. If a login event is found the new
login command is not logged.

Change-Id: I7c24a82342d3d6315b7da6aa22e23b6cc594eb68
Bug-Url: https://bugzilla.redhat.com/1026389
Signed-off-by: Ravi Nori <rn...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/LoginUserCommand.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/LoginTracker.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/security/auth/LoginValidator.java
3 files changed, 46 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/39/22939/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/LoginUserCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/LoginUserCommand.java
index bd58b4b..403dccf 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/LoginUserCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/LoginUserCommand.java
@@ -7,6 +7,7 @@
 import org.ovirt.engine.core.bll.adbroker.LdapReturnValueBase;
 import org.ovirt.engine.core.bll.adbroker.LdapUserPasswordBaseParameters;
 import org.ovirt.engine.core.bll.adbroker.UserAuthenticationResult;
+import org.ovirt.engine.core.common.utils.LoginTracker;
 import org.ovirt.engine.core.common.action.LoginUserParameters;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 
@@ -31,6 +32,7 @@
         LdapReturnValueBase adReturnValue = 
adFactory.runAdAction(AdActionType.AuthenticateUser,
                 new LdapUserPasswordBaseParameters(loginDomain, 
getParameters().getUserName(), getUserPassword()));
         UserAuthenticationResult authResult = (UserAuthenticationResult) 
adReturnValue.getReturnValue();
+        LoginTracker.trackLoginEvent(getParameters().getUserName(), 
getDomain());
         return authResult;
     }
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/LoginTracker.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/LoginTracker.java
new file mode 100644
index 0000000..38fe377
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/LoginTracker.java
@@ -0,0 +1,42 @@
+package org.ovirt.engine.core.common.utils;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+public class LoginTracker {
+
+    private static final long LOGIN_THRESHOLD = 5000;
+    private static final Map<String, Long> lastUserLoginMap = new 
ConcurrentHashMap<String, Long>();
+    private static final ScheduledExecutorService scheduler = 
Executors.newScheduledThreadPool(1);
+    static {
+        final Runnable oldLoginEntriesCleaner = new Runnable() {
+            public void run() {
+                long currentTime = System.currentTimeMillis();
+                for (Iterator<Map.Entry<String, Long>> it = 
lastUserLoginMap.entrySet().iterator(); it.hasNext();) {
+                    Map.Entry<String, Long> entry = it.next();
+                    if (currentTime - entry.getValue() > LOGIN_THRESHOLD) {
+                        lastUserLoginMap.remove(entry.getKey());
+                    }
+                }
+            }
+        };
+        scheduler.scheduleAtFixedRate(oldLoginEntriesCleaner, 5, 5, 
TimeUnit.MINUTES);
+    }
+
+    public static void trackLoginEvent(String userName, String domain) {
+        lastUserLoginMap.put(domain + "." + userName, 
System.currentTimeMillis());
+    }
+
+    public static boolean shouldBeLogged(String userName, String domain) {
+        Long lastUserLogin = lastUserLoginMap.get(domain + "." + userName);
+        boolean shouldBeLogged = true;
+        if (lastUserLogin != null && System.currentTimeMillis() - 
lastUserLogin < LOGIN_THRESHOLD) {
+            shouldBeLogged = false;
+        }
+        return shouldBeLogged;
+    }
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/security/auth/LoginValidator.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/security/auth/LoginValidator.java
index 3684b1f..fb64111 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/security/auth/LoginValidator.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/security/auth/LoginValidator.java
@@ -15,6 +15,7 @@
 import org.ovirt.engine.api.common.security.auth.SessionUtils;
 import org.ovirt.engine.api.common.security.auth.Validator;
 import org.ovirt.engine.api.restapi.util.SessionHelper;
+import org.ovirt.engine.core.common.utils.LoginTracker;
 import org.ovirt.engine.core.common.action.LoginUserParameters;
 import org.ovirt.engine.core.common.action.LogoutUserParameters;
 import org.ovirt.engine.core.common.action.VdcActionType;
@@ -70,11 +71,11 @@
         if (principal.getDomain() == null) {
             return loginFailure(principal, NO_DOMAIN);
         }
-
         LoginUserParameters params = new 
LoginUserParameters(principal.getUser(),
                 principal.getSecret(),
                 principal.getDomain(),
                 null, null, null);
+        
params.setShouldBeLogged(LoginTracker.shouldBeLogged(principal.getUser(), 
principal.getDomain()));
         params.setActionType(VdcActionType.LoginUser);
         sessionHelper.setSessionId(sessionId);
         VdcReturnValueBase ret = 
backend.login(sessionHelper.sessionize(params));


-- 
To view, visit http://gerrit.ovirt.org/22939
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I7c24a82342d3d6315b7da6aa22e23b6cc594eb68
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