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