From e7f6cbd2fc73595a6776bc2e1ed9624d86e2e03c Mon Sep 17 00:00:00 2001 From: Alexander Skoblikov Date: Thu, 13 Jun 2024 17:50:37 +0300 Subject: [PATCH] dbeaver/pro#2116 send user deleted event for headless session (#2659) Co-authored-by: Elizabeth --- .../io/cloudbeaver/server/events/WSUserEventHandler.java | 2 +- .../cloudbeaver/service/session/WebSessionManager.java | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/events/WSUserEventHandler.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/events/WSUserEventHandler.java index 59adcbda55..4188468da5 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/events/WSUserEventHandler.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/events/WSUserEventHandler.java @@ -45,7 +45,7 @@ public class WSUserEventHandler implements WSEven break; case USER_DELETED: if (event instanceof WSUserDeletedEvent userDeletedEvent) { - sessionManager.closeUserSession(userDeletedEvent.getDeletedUserId()); + sessionManager.closeUserSession(userDeletedEvent); } break; default: diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/session/WebSessionManager.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/session/WebSessionManager.java index db96e088b3..40dc20ae00 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/session/WebSessionManager.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/session/WebSessionManager.java @@ -37,6 +37,7 @@ import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.model.auth.SMAuthInfo; import org.jkiss.dbeaver.model.security.user.SMAuthPermissions; import org.jkiss.dbeaver.model.websocket.WSConstants; +import org.jkiss.dbeaver.model.websocket.event.WSUserDeletedEvent; import org.jkiss.dbeaver.model.websocket.event.session.WSSessionStateEvent; import org.jkiss.utils.CommonUtils; @@ -347,11 +348,15 @@ public class WebSessionManager { } } - public void closeUserSession(@NotNull String userId) { + public void closeUserSession(@NotNull WSUserDeletedEvent userDeletedEvent) { synchronized (sessionMap) { for (Iterator iterator = sessionMap.values().iterator(); iterator.hasNext(); ) { var session = iterator.next(); - if (CommonUtils.equalObjects(session.getUserContext().getUserId(), userId)) { + if (CommonUtils.equalObjects(session.getUserContext().getUserId(), + userDeletedEvent.getDeletedUserId())) { + if (session instanceof WebHeadlessSession headlessSession) { + headlessSession.addSessionEvent(userDeletedEvent); + } iterator.remove(); session.close(); }