This is an automated email from the ASF dual-hosted git repository.
rohit pushed a commit to branch 4.15
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/4.15 by this push:
new cdc3b08 novnc: Accept new novnc client and disconnect old session
(#4531)
cdc3b08 is described below
commit cdc3b08759ab7268fc126840037f4dd86f188db7
Author: Wei Zhou <[email protected]>
AuthorDate: Sat Mar 6 10:13:21 2021 +0100
novnc: Accept new novnc client and disconnect old session (#4531)
* novnc: Reject new novnc client if novnc viewer object is still alive
* #4531 novnc: Accept new novnc client and disconnect old session
---
.../main/java/com/cloud/consoleproxy/ConsoleProxy.java | 18 +++++++++++++++---
.../cloud/consoleproxy/ConsoleProxyNoVNCHandler.java | 10 ++++++++--
.../cloud/consoleproxy/ConsoleProxyNoVncClient.java | 4 ++++
3 files changed, 27 insertions(+), 5 deletions(-)
diff --git
a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxy.java
b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxy.java
index 7a70a38..577d6ed 100644
---
a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxy.java
+++
b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxy.java
@@ -551,11 +551,23 @@ public class ConsoleProxy {
!param.getClientHostPassword().equals(viewer.getClientHostPassword()))
throw new AuthenticationException("Cannot use the existing
viewer " + viewer + ": bad sid");
- if (!viewer.isFrontEndAlive()) {
+ try {
authenticationExternally(param);
- viewer.initClient(param);
- reportLoadChange = true;
+ } catch (Exception e) {
+ s_logger.error("Authencation failed for param: " + param);
+ return null;
+ }
+ s_logger.info("Initializing new novnc client and disconnecting
existing session");
+ try {
+
((ConsoleProxyNoVncClient)viewer).getSession().disconnect();
+ } catch (IOException e) {
+ s_logger.error("Exception while disconnect session of
novnc viewer object: " + viewer, e);
}
+ removeViewer(viewer);
+ viewer = new ConsoleProxyNoVncClient(session);
+ viewer.initClient(param);
+ connectionMap.put(clientKey, viewer);
+ reportLoadChange = true;
}
if (reportLoadChange) {
diff --git
a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyNoVNCHandler.java
b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyNoVNCHandler.java
index 349d984..b3359b5 100644
---
a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyNoVNCHandler.java
+++
b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyNoVNCHandler.java
@@ -38,7 +38,7 @@ import
org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;
@WebSocket
public class ConsoleProxyNoVNCHandler extends WebSocketHandler {
- private ConsoleProxyNoVncClient viewer;
+ private ConsoleProxyNoVncClient viewer = null;
private static final Logger s_logger =
Logger.getLogger(ConsoleProxyNoVNCHandler.class);
public ConsoleProxyNoVNCHandler() {
@@ -130,12 +130,18 @@ public class ConsoleProxyNoVNCHandler extends
WebSocketHandler {
} catch (Exception e) {
s_logger.warn("Failed to create viewer due to " + e.getMessage(),
e);
return;
+ } finally {
+ if (viewer == null) {
+ session.disconnect();
+ }
}
}
@OnWebSocketClose
public void onClose(Session session, int statusCode, String reason) throws
IOException, InterruptedException {
- ConsoleProxy.removeViewer(viewer);
+ if (viewer != null) {
+ ConsoleProxy.removeViewer(viewer);
+ }
}
@OnWebSocketFrame
diff --git
a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyNoVncClient.java
b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyNoVncClient.java
index 97963f8..353c32d 100644
---
a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyNoVncClient.java
+++
b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyNoVncClient.java
@@ -235,4 +235,8 @@ public class ConsoleProxyNoVncClient implements
ConsoleProxyClient {
return "";
}
+ public Session getSession() {
+ return session;
+ }
+
}