Deleted 403 response code and now also comparing port on login.

This commit is contained in:
Carlos 2019-08-12 19:39:32 +02:00
parent bbb35815e9
commit 4ce66aec2e
7 changed files with 21 additions and 57 deletions

View File

@ -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

View File

@ -138,10 +138,6 @@ function onWebSocketsMessage(message){
}else{
$('#passwordModal').modal('show');
}
break;
case 403:
//Forbidden
break;
default:
console.log('Unknown server response:');

View File

@ -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 {

View File

@ -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();
}
}

View File

@ -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;

View File

@ -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<String> loggedInUsers = new ArrayList<String>();
private List<InetSocketAddress> loggedInUsers = new ArrayList<InetSocketAddress>();
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);
}
}

View File

@ -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<WebSocket> 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));
}
}