summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUdo Walter2020-06-18 05:14:59 +0200
committerUdo Walter2020-06-18 05:14:59 +0200
commitced83b2dae2763449cc5c57591ba024dd7bc3d56 (patch)
tree3f8f002c21f7aaf7fb782903254f9c4610dcbc47
parentBetter debug spam for connection checks (diff)
downloadbwlp-guacamole-ext-ced83b2dae2763449cc5c57591ba024dd7bc3d56.tar.gz
bwlp-guacamole-ext-ced83b2dae2763449cc5c57591ba024dd7bc3d56.tar.xz
bwlp-guacamole-ext-ced83b2dae2763449cc5c57591ba024dd7bc3d56.zip
Send resolution from the users browser to the server and try to autologin the user on the client.
-rw-r--r--src/main/java/de/bwlehrpool/bwlp_guac/AvailableClient.java28
-rw-r--r--src/main/java/de/bwlehrpool/bwlp_guac/BwlpAuthenticationProvider.java25
-rw-r--r--src/main/java/de/bwlehrpool/bwlp_guac/BwlpUserContext.java6
-rw-r--r--src/main/java/de/bwlehrpool/bwlp_guac/WrappedConnection.java5
-rw-r--r--src/main/resources/controllers/groupFieldController.js2
5 files changed, 54 insertions, 12 deletions
diff --git a/src/main/java/de/bwlehrpool/bwlp_guac/AvailableClient.java b/src/main/java/de/bwlehrpool/bwlp_guac/AvailableClient.java
index 5165a9c..ca4b7a5 100644
--- a/src/main/java/de/bwlehrpool/bwlp_guac/AvailableClient.java
+++ b/src/main/java/de/bwlehrpool/bwlp_guac/AvailableClient.java
@@ -1,15 +1,18 @@
package de.bwlehrpool.bwlp_guac;
-import java.io.IOException;
+import java.io.*;
+import java.net.Socket;
import java.util.ArrayList;
import java.util.concurrent.atomic.AtomicLong;
+import org.apache.guacamole.net.auth.Credentials;
import org.apache.guacamole.protocol.GuacamoleConfiguration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import de.bwlehrpool.bwlp_guac.JsonClient.State;
+
public class AvailableClient implements Cloneable {
private static final Logger LOGGER = LoggerFactory.getLogger(AvailableClient.class);
@@ -197,6 +200,29 @@ public class AvailableClient implements Cloneable {
}
}
+ public void remoteLogin(Credentials credentials, String resolution) {
+ String username = credentials.getUsername();
+ try {
+ LOGGER.info("Logging in user " + username + " on client " + this);
+
+ Socket socket = new Socket(this.clientip, 1234); // TODO Port?
+ OutputStream output = socket.getOutputStream();
+
+ int version = 1;
+ output.write(version & 0xFF);
+ output.write(version >> 8);
+
+ String data = username + "\n" + credentials.getPassword() + "\n" + resolution;
+ output.write(data.getBytes());
+
+ output.flush();
+
+ socket.close();
+ } catch (IOException e) {
+ LOGGER.warn("Login failed. User: " + username + " Client: " + this, e);
+ }
+ }
+
@Override
public AvailableClient clone() {
AvailableClient c = new AvailableClient(this.clientip);
diff --git a/src/main/java/de/bwlehrpool/bwlp_guac/BwlpAuthenticationProvider.java b/src/main/java/de/bwlehrpool/bwlp_guac/BwlpAuthenticationProvider.java
index 017c806..a75d585 100644
--- a/src/main/java/de/bwlehrpool/bwlp_guac/BwlpAuthenticationProvider.java
+++ b/src/main/java/de/bwlehrpool/bwlp_guac/BwlpAuthenticationProvider.java
@@ -70,17 +70,23 @@ public class BwlpAuthenticationProvider implements AuthenticationProvider {
if (exConn != null) {
user = new BwlpUserContext(authenticatedUser, context, exConn);
} else {
- int groupid = requestGroup(credentials);
+ UserResponse response = requestGroup(credentials);
LOGGER.warn("Doing the REdecoration");
- user = new BwlpUserContext(authenticatedUser, context, groupid);
+ user = new BwlpUserContext(authenticatedUser, context, response.groupid, response.resolution);
}
oldMappings.put(username, user);
return user;
}
+ final class UserResponse {
+ public int groupid = 0;
+ public String resolution = "1920x1080";
+ }
+
+ private UserResponse requestGroup(Credentials credentials) throws GuacamoleException {
+ UserResponse response = new UserResponse();
- private int requestGroup(Credentials credentials) throws GuacamoleException {
// Request the user to select a group
ConnectionManager.updateList();
HttpServletRequest request = credentials.getRequest();
@@ -97,23 +103,24 @@ public class BwlpAuthenticationProvider implements AuthenticationProvider {
String message = "Select a Location";
- int selectedId = 0;
boolean tryAgain = false;
String password = "";
String correctPassword = null;
try {
JsonNode group = mapper.readTree(groupJson);
- selectedId = Integer.parseInt(group.get("id").asText());
- if (selectedId != 0) {
+ response.resolution = group.get("resolution").asText();
+
+ response.groupid = Integer.parseInt(group.get("id").asText());
+ if (response.groupid != 0) {
password = group.get("password").asText();
- correctPassword = ConnectionManager.getGroupPool().get(selectedId).password;
+ correctPassword = ConnectionManager.getGroupPool().get(response.groupid).password;
}
} catch (Exception e) {
LOGGER.info("Error reading group", e);
tryAgain = true;
}
- if (selectedId != 0 && correctPassword != null && !password.equals(correctPassword)) {
+ if (response.groupid != 0 && correctPassword != null && !password.equals(correctPassword)) {
tryAgain = true;
message = "Wrong password!";
}
@@ -125,7 +132,7 @@ public class BwlpAuthenticationProvider implements AuthenticationProvider {
));
}
- return selectedId;
+ return response;
}
public void shutdown() {
diff --git a/src/main/java/de/bwlehrpool/bwlp_guac/BwlpUserContext.java b/src/main/java/de/bwlehrpool/bwlp_guac/BwlpUserContext.java
index 2fcc6a6..88208b9 100644
--- a/src/main/java/de/bwlehrpool/bwlp_guac/BwlpUserContext.java
+++ b/src/main/java/de/bwlehrpool/bwlp_guac/BwlpUserContext.java
@@ -31,6 +31,7 @@ public class BwlpUserContext extends AbstractUserContext {
private final AuthenticatedUser authUser;
private final UserContext originalContext;
private final Integer groupid;
+ private final String resolution;
/**
* The Directory with access to all connections within the root group associated
@@ -38,11 +39,12 @@ public class BwlpUserContext extends AbstractUserContext {
*/
private Directory<Connection> connectionDirectory;
- public BwlpUserContext(AuthenticatedUser authenticatedUser, UserContext context, int groupid)
+ public BwlpUserContext(AuthenticatedUser authenticatedUser, UserContext context, int groupid, String resolution)
throws GuacamoleCredentialsException {
authUser = authenticatedUser;
originalContext = context;
this.groupid = groupid;
+ this.resolution = resolution;
// OK
addConn();
}
@@ -51,12 +53,14 @@ public class BwlpUserContext extends AbstractUserContext {
authUser = authenticatedUser;
originalContext = context;
this.groupid = -1;
+ this.resolution = "";
connectionDirectory = new SimpleDirectory<Connection>(exConn);
}
private void addConn() throws GuacamoleCredentialsException {
WrappedConnection connection = ConnectionManager.getForUser(authUser.getCredentials().getUsername(), groupid);
if (connection != null) {
+ connection.remoteLogin(authUser.getCredentials(), this.resolution);
connection.setContext(this);
connectionDirectory = new SimpleDirectory<Connection>(connection);
} else {
diff --git a/src/main/java/de/bwlehrpool/bwlp_guac/WrappedConnection.java b/src/main/java/de/bwlehrpool/bwlp_guac/WrappedConnection.java
index 95a014b..8dedd15 100644
--- a/src/main/java/de/bwlehrpool/bwlp_guac/WrappedConnection.java
+++ b/src/main/java/de/bwlehrpool/bwlp_guac/WrappedConnection.java
@@ -1,5 +1,6 @@
package de.bwlehrpool.bwlp_guac;
+import org.apache.guacamole.net.auth.Credentials;
import org.apache.guacamole.net.auth.simple.SimpleConnection;
import org.apache.guacamole.protocol.GuacamoleConfiguration;
@@ -43,4 +44,8 @@ public class WrappedConnection extends SimpleConnection {
this.context = context;
}
+ public void remoteLogin(Credentials credentials, String resolution) {
+ this.ac.remoteLogin(credentials, resolution);
+ }
+
}
diff --git a/src/main/resources/controllers/groupFieldController.js b/src/main/resources/controllers/groupFieldController.js
index 3b6f9ea..f49862b 100644
--- a/src/main/resources/controllers/groupFieldController.js
+++ b/src/main/resources/controllers/groupFieldController.js
@@ -1,6 +1,6 @@
angular.module('group').controller('groupFieldController', ['$scope', function groupFieldController($scope) {
- $scope.data = { id: 0, password: '' };
+ $scope.data = { id: 0, password: '', resolution: window.screen.innerWidth + 'x' + window.screen.innerHeight };
$scope.$watch('data', function(newValue) {
if (window.location.hash !== '#/') {