diff --git a/README.md b/README.md index 5726758..d691934 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ Server communicate with all connected clients using JSON. The following table sh | Variable |Meaning | |---------------------|-----------------------------------------------------------------------------| | status |Status code (as integer), representing response type. See listing below* | -| statusDescription |Status description (as String) describing status code | +| statusDescription |Status description (as String) describing response type. | | respondsTo |`(Optional)` Original command sent by client which triggered this response| | message |Response content | @@ -87,7 +87,6 @@ Server communicate with all connected clients using JSON. The following table sh - **200**: Ok/Processed. - **400**: Unknown command. - **401**: Login required/Not logged in. - - **403**: Forbidden/Unauthorised (Probably not logged in). #### Client -> Websocket Server diff --git a/html/scripts/WebConsole.js b/html/scripts/WebConsole.js index 498e806..8adaf63 100644 --- a/html/scripts/WebConsole.js +++ b/html/scripts/WebConsole.js @@ -138,10 +138,6 @@ function onWebSocketsMessage(message){ }else{ $('#passwordModal').modal('show'); } - break; - case 403: - //Forbidden - break; default: console.log('Unknown server response:'); diff --git a/src/com/mesacarlos/webconsole/command/LogInCommand.java b/src/com/mesacarlos/webconsole/command/LogInCommand.java index 9e12440..49a38d1 100644 --- a/src/com/mesacarlos/webconsole/command/LogInCommand.java +++ b/src/com/mesacarlos/webconsole/command/LogInCommand.java @@ -13,7 +13,7 @@ public class LogInCommand implements WSCommand { @Override public void execute(WSServer wsServer, WebSocket conn, String password) { // If user is logged in, then return. - if (LoginManager.getInstance().isLoggedIn(conn.getRemoteSocketAddress().getAddress().toString())) + if (LoginManager.getInstance().isLoggedIn(conn.getRemoteSocketAddress())) return; // Get password from config files @@ -21,7 +21,7 @@ public class LogInCommand implements WSCommand { if (receivedPassword.equals(password)) { // Password is correct, logging in - LoginManager.getInstance().logIn(conn.getRemoteSocketAddress().getAddress().toString()); + LoginManager.getInstance().logIn(conn.getRemoteSocketAddress()); wsServer.sendToClient(conn, new Processed("Logged In", "LOGIN ********")); Bukkit.getLogger().info("[WebConsole] Successfully logged in from " + conn.getRemoteSocketAddress()); } else { diff --git a/src/com/mesacarlos/webconsole/json/Forbidden.java b/src/com/mesacarlos/webconsole/json/Forbidden.java deleted file mode 100644 index bb33270..0000000 --- a/src/com/mesacarlos/webconsole/json/Forbidden.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.mesacarlos.webconsole.json; - -import com.google.gson.JsonObject; - -public class Forbidden implements JSONOutput{ - private String message; - private String respondsTo; - - public Forbidden(String message, String respondsTo) { - this.message = message; - this.respondsTo = respondsTo; - } - - @Override - public int getStatusCode() { - return 403; - } - - @Override - public String getRespondsTo() { - return respondsTo; - } - - @Override - public String getMessage() { - return message; - } - - @Override - public String toJSON() { - JsonObject object = new JsonObject(); - object.addProperty("status", getStatusCode()); - object.addProperty("statusDescription", "Forbidden"); - object.addProperty("respondsTo", getRespondsTo()); - object.addProperty("message", getMessage()); - return object.toString(); - } - -} \ No newline at end of file diff --git a/src/com/mesacarlos/webconsole/json/Processed.java b/src/com/mesacarlos/webconsole/json/Processed.java index e2231dc..4b9ba76 100644 --- a/src/com/mesacarlos/webconsole/json/Processed.java +++ b/src/com/mesacarlos/webconsole/json/Processed.java @@ -6,6 +6,10 @@ public class Processed implements JSONOutput{ private String message; private String respondsTo; + public Processed(String message) { + this.message = message; + } + public Processed(String message, String respondsTo) { this.message = message; this.respondsTo = respondsTo; diff --git a/src/com/mesacarlos/webconsole/util/LoginManager.java b/src/com/mesacarlos/webconsole/util/LoginManager.java index 7b7b49f..08c8354 100644 --- a/src/com/mesacarlos/webconsole/util/LoginManager.java +++ b/src/com/mesacarlos/webconsole/util/LoginManager.java @@ -1,10 +1,11 @@ package com.mesacarlos.webconsole.util; +import java.net.InetSocketAddress; import java.util.ArrayList; import java.util.List; public class LoginManager { - private List loggedInUsers = new ArrayList(); + private List loggedInUsers = new ArrayList(); private static LoginManager instance; private LoginManager() {} @@ -15,15 +16,15 @@ public class LoginManager { return instance; } - public void logIn(String address) { + public void logIn(InetSocketAddress address) { loggedInUsers.add(address); } - public void logOut(String address) { + public void logOut(InetSocketAddress address) { loggedInUsers.remove(address); } - public boolean isLoggedIn(String address) { + public boolean isLoggedIn(InetSocketAddress address) { return loggedInUsers.contains(address); } } \ No newline at end of file diff --git a/src/com/mesacarlos/webconsole/websockets/WSServer.java b/src/com/mesacarlos/webconsole/websockets/WSServer.java index 0c3183e..63d05cd 100644 --- a/src/com/mesacarlos/webconsole/websockets/WSServer.java +++ b/src/com/mesacarlos/webconsole/websockets/WSServer.java @@ -13,9 +13,9 @@ import com.mesacarlos.webconsole.WebConsole; import com.mesacarlos.webconsole.command.CommandFactory; import com.mesacarlos.webconsole.command.WSCommand; import com.mesacarlos.webconsole.json.ConsoleOutput; -import com.mesacarlos.webconsole.json.Forbidden; import com.mesacarlos.webconsole.json.JSONOutput; import com.mesacarlos.webconsole.json.LoginRequired; +import com.mesacarlos.webconsole.json.Processed; import com.mesacarlos.webconsole.json.UnknownWSCmd; import com.mesacarlos.webconsole.util.LoginManager; @@ -30,7 +30,10 @@ public class WSServer extends WebSocketServer { @Override public void onOpen(WebSocket conn, ClientHandshake handshake) { - sendToClient(conn, new LoginRequired("Connection started, waiting login")); + if(LoginManager.getInstance().isLoggedIn(conn.getRemoteSocketAddress())) + sendToClient(conn, new Processed("Connected. Already logged in, welcome back!")); + else + sendToClient(conn, new LoginRequired("Connection started, waiting login")); Bukkit.getLogger().info("[WebConsole] Connected and waiting login from " + conn.getRemoteSocketAddress()); } @@ -50,10 +53,10 @@ public class WSServer extends WebSocketServer { sendToClient(conn, new UnknownWSCmd("Unknown command", message)); Bukkit.getLogger().info( "[WebConsole] Signal '" + message + "' was not processed since is not valid. Is your plugin/web interface up to date?"); - } else if (!LoginManager.getInstance().isLoggedIn(conn.getRemoteSocketAddress().getAddress().toString()) + } else if (!LoginManager.getInstance().isLoggedIn(conn.getRemoteSocketAddress()) && !wsCommand.equals("LOGIN")) { //User is not authorised. DO NOTHING, IMPORTANT! - sendToClient(conn, new Forbidden("Forbidden", message)); + sendToClient(conn, new LoginRequired("Forbidden")); Bukkit.getLogger().warning("[WebConsole] " + conn.getRemoteSocketAddress() + " tried to run '" + message + "' while not logged in!"); } else { @@ -63,7 +66,7 @@ public class WSServer extends WebSocketServer { @Override public void onClose(WebSocket conn, int code, String reason, boolean remote) { - LoginManager.getInstance().logOut(conn.getRemoteSocketAddress().getAddress().toString()); + LoginManager.getInstance().logOut(conn.getRemoteSocketAddress()); Bukkit.getLogger() .info("[WebConsole] Closed WS connection " + conn.getRemoteSocketAddress() + ". Reason: " + reason); } @@ -93,7 +96,7 @@ public class WSServer extends WebSocketServer { public void onNewConsoleLinePrinted(String line) { Collection connections = getConnections(); for (WebSocket connection : connections) { - if (LoginManager.getInstance().isLoggedIn(connection.getRemoteSocketAddress().getAddress().toString())) + if (LoginManager.getInstance().isLoggedIn(connection.getRemoteSocketAddress())) sendToClient(connection, new ConsoleOutput(line)); } }