Server now responds with 401 when incorrect login (instead of 403)
This commit is contained in:
parent
31686615f3
commit
c691c2de0b
@ -20,17 +20,16 @@
|
||||
<div class="collapse navbar-collapse" id="navbarContainer">
|
||||
<ul class="navbar-nav mr-auto">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="#">Home</a>
|
||||
<a class="nav-link" href="index.html">Home</a>
|
||||
</li>
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" href="#" id="serversDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
Your servers
|
||||
</a>
|
||||
<div class="dropdown-menu" id="ServerListDropDown" aria-labelledby="serversDropdown">
|
||||
<a class="dropdown-item" href="#">Add Server</a>
|
||||
<a class="dropdown-item" href data-toggle="modal" data-target="#addServerModal">Add Server</a>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a class="dropdown-item servermenuitem" href="#">Survival</a>
|
||||
<a class="dropdown-item servermenuitem" href="#">SkyBlock</a>
|
||||
<a class="dropdown-item servermenuitem" href="#">Example server</a>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
@ -45,19 +44,92 @@
|
||||
|
||||
<!-- Begin page content -->
|
||||
<main role="main" class="flex-shrink-0">
|
||||
<!-- Index container -->
|
||||
<div class="container">
|
||||
<!-- Welcome container -->
|
||||
<div class="container" id="welcomeContainer">
|
||||
<h1 class="mt-5">Select a server from the menu</h1>
|
||||
<p class="lead">Use the navigation bar to add a new Minecraft Server or connect to a previously added one.</p>
|
||||
</div>
|
||||
|
||||
<!-- Server management container -->
|
||||
<div class="container" hidden>
|
||||
<div class="container" id="serverContainer">
|
||||
<h1 class="mt-5">Survival</h1>
|
||||
<p class="lead">Manage now your Minecraft Server.</p>
|
||||
<p>Here will be all control buttons and console logs</p>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<!-- Add Server Modal -->
|
||||
<div class="modal fade" id="addServerModal" tabindex="-1" role="dialog" aria-labelledby="addServerModalCenterTitle" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="addServerModalLongTitle">Add a new server</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form>
|
||||
<div class="form-group">
|
||||
<label for="server-name" class="col-form-label">Server name:</label>
|
||||
<input type="text" class="form-control" id="server-name">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="server-uri" class="col-form-label">Server URI:</label>
|
||||
<input type="text" class="form-control" id="server-uri" placeholder="ws://localhost:8080">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="server-pwd" class="col-form-label">Password:</label>
|
||||
<input type="text" class="form-control" id="server-pwd">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" id="rememberPwdCheckbox">
|
||||
<label class="form-check-label" for="rememberPwdCheckbox">Remember password</label>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||
<button type="button" class="btn btn-primary" data-dismiss="modal" id="saveAndConnectServerButton">Save and connect</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Password Modal -->
|
||||
<div class="modal fade" id="passwordModal" tabindex="-1" role="dialog" aria-labelledby="passwordModalCenterTitle" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="passwordModalLongTitle">Add a new server</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form>
|
||||
<div class="form-group">
|
||||
<label for="server-pwd" class="col-form-label">Password:</label>
|
||||
<input type="text" class="form-control" id="server-pwd">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" id="rememberPwdCheckbox">
|
||||
<label class="form-check-label" for="rememberPwdCheckbox">Remember password</label>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||
<button type="button" class="btn btn-primary" data-dismiss="modal" id="passwordTypedButton">Save and connect</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Webpage footer -->
|
||||
<footer class="footer mt-auto py-3">
|
||||
<div class="container">
|
||||
@ -71,9 +143,9 @@
|
||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
|
||||
|
||||
<!-- WebConsole JS Scripts -->
|
||||
<script src="scripts/WebConsole.js"></script>
|
||||
<script src="scripts/WebConsolePersistenceManager.js"></script>
|
||||
<script src="scripts/WebConsoleManager.js"></script>
|
||||
<script src="scripts/WebConsoleConnector.js"></script>
|
||||
<script src="scripts/WebConsoleManager.js"></script>
|
||||
<script src="scripts/WebConsolePersistenceManager.js"></script>
|
||||
<script src="scripts/WebConsole.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -5,6 +5,106 @@
|
||||
2019 Carlos Mesa under MIT License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Global variables
|
||||
*/
|
||||
var persistenceManager = new WebConsolePersistenceManager();
|
||||
var connectionManager = new WebConsoleManager();
|
||||
|
||||
/**
|
||||
* Show saved serverlist on startup
|
||||
*/
|
||||
$(document).ready(function() {
|
||||
$("#serverContainer").hide();
|
||||
updateServerList();
|
||||
});
|
||||
|
||||
/**
|
||||
* Server saver button click handler
|
||||
*/
|
||||
$("#saveAndConnectServerButton").click(function() {
|
||||
//Save server
|
||||
var name = $("#server-name").val();
|
||||
var uri = $("#server-uri").val();
|
||||
persistenceManager.saveServer(new WSServer(name, uri));
|
||||
|
||||
//Empty all modal values
|
||||
$("#server-name").val("");
|
||||
$("#server-uri").val("");
|
||||
|
||||
//Update GUI serverlist
|
||||
updateServerList();
|
||||
|
||||
//Connect to server
|
||||
openServer(name);
|
||||
});
|
||||
|
||||
/**
|
||||
* Server saver button click handler
|
||||
*/
|
||||
$("#passwordTypedButton").click(function() {
|
||||
//Send LOGIN command to server
|
||||
|
||||
});
|
||||
|
||||
/**
|
||||
* Prepare and show server to user
|
||||
*/
|
||||
function openServer(serverName){
|
||||
//Hide welcome div if user is in welcome page
|
||||
$("#welcomeContainer").hide();
|
||||
$("#serverContainer").show();
|
||||
|
||||
//If a connection is already active, delete all subscribers
|
||||
if(typeof connectionManager.activeConnection !== "undefined"){
|
||||
connectionManager.activeConnection.removeSubscribers();
|
||||
}
|
||||
|
||||
//Start connection or retrieve it if already exists
|
||||
if(typeof connectionManager.getConnection(serverName) === "undefined"){
|
||||
//Retrieve from persistence
|
||||
var serverObj = persistenceManager.getServer(serverName);
|
||||
connectionManager.activeConnection = new WebConsoleConnector(serverObj.serverName, serverObj.serverURI);
|
||||
}else{
|
||||
//Use active connection
|
||||
connectionManager.activeConnection = connectionManager.getConnection(serverName);
|
||||
|
||||
}
|
||||
|
||||
//Subscribe a function and connect
|
||||
connectionManager.activeConnection.subscribe(onWebSocketsMessage);
|
||||
connectionManager.activeConnection.connect();
|
||||
}
|
||||
|
||||
function onWebSocketsMessage(message){
|
||||
switch (message.status) {
|
||||
case 10:
|
||||
//Console Output
|
||||
|
||||
break;
|
||||
case 200:
|
||||
//Processed
|
||||
|
||||
break;
|
||||
case 400:
|
||||
//Unknown Command
|
||||
|
||||
break;
|
||||
case 401:
|
||||
//Waiting for login
|
||||
|
||||
break;
|
||||
case 403:
|
||||
//Forbidden
|
||||
|
||||
break;
|
||||
default:
|
||||
console.log('Unknown server response:');
|
||||
console.log(message);
|
||||
}
|
||||
console.log(message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update dropdown with saved server list
|
||||
*/
|
||||
@ -13,15 +113,13 @@ function updateServerList(){
|
||||
$('.servermenuitem').remove();
|
||||
|
||||
//Add all servers
|
||||
var servers = new WebConsolePersistenceManager().getAllServers();
|
||||
var servers = persistenceManager.getAllServers();
|
||||
for(var i = 0; i < servers.length; i++){
|
||||
$('#ServerListDropDown').append('<a class="dropdown-item servermenuitem" href="#" onclick=openServer("' + servers[i].serverName + '")>' + servers[i].serverName + '</a>');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepare and show server to user
|
||||
*/
|
||||
function openServer(serverName){
|
||||
|
||||
//Show a "no servers" message when no servers are added
|
||||
if(servers.length == 0){
|
||||
$('#ServerListDropDown').append('<a class="dropdown-item servermenuitem disabled" href="#">No Servers added</a>');
|
||||
}
|
||||
}
|
@ -6,7 +6,7 @@
|
||||
*/
|
||||
class WebConsoleManager {
|
||||
constructor(){
|
||||
this.activeConnections = [];
|
||||
this.activeConnections = []; //Active Connectors list
|
||||
}
|
||||
|
||||
/**
|
||||
@ -20,6 +20,7 @@ class WebConsoleManager {
|
||||
* Retrieve server by name
|
||||
*/
|
||||
getConnection(serverName){
|
||||
var i;
|
||||
for (i = 0; i < this.activeConnections.length; i++) {
|
||||
if(this.activeConnections[i].serverName == serverName){
|
||||
return this.activeConnections[i];
|
||||
|
@ -7,20 +7,28 @@
|
||||
class WebConsolePersistenceManager{
|
||||
|
||||
/**
|
||||
* Saves server into WebStorage
|
||||
* Saves or updates server into WebStorage
|
||||
*/
|
||||
saveServer(serverName, serverURI, serverPassword){
|
||||
this.createListIfUndefined();
|
||||
saveServer(serverObject){
|
||||
this.initializeLocalStorage();
|
||||
|
||||
//Create anonymous object
|
||||
var server = new Object();
|
||||
server.serverName = serverName;
|
||||
server.serverURI = serverURI;
|
||||
server.serverPassword = serverPassword;
|
||||
|
||||
//Save to WebStorage
|
||||
//Check if server exists
|
||||
var i;
|
||||
var found = false;
|
||||
var servers = this.getAllServers();
|
||||
servers.push(server);
|
||||
for (i = 0; i < servers.length; i++) {
|
||||
if(servers[i].serverName == serverObject.serverName){
|
||||
//Exists, replacing it
|
||||
servers[i] = serverObject;
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
|
||||
//Not found, adding it
|
||||
if(found == false){
|
||||
servers.push(serverObject);
|
||||
}
|
||||
|
||||
this.replaceAllServers(servers);
|
||||
}
|
||||
|
||||
@ -28,9 +36,10 @@ class WebConsolePersistenceManager{
|
||||
* Delete server from saved servers
|
||||
*/
|
||||
deleteServer(serverName){
|
||||
this.createListIfUndefined();
|
||||
this.initializeLocalStorage();
|
||||
|
||||
//Find server
|
||||
var i;
|
||||
var index = -1;
|
||||
var servers = this.getAllServers();
|
||||
for (i = 0; i < servers.length; i++) {
|
||||
@ -52,8 +61,9 @@ class WebConsolePersistenceManager{
|
||||
* Get server details as object
|
||||
*/
|
||||
getServer(serverName){
|
||||
this.createListIfUndefined();
|
||||
this.initializeLocalStorage();
|
||||
|
||||
var i;
|
||||
var servers = this.getAllServers();
|
||||
for (i = 0; i < servers.length; i++) {
|
||||
if(servers[i].serverName == serverName){
|
||||
@ -66,16 +76,23 @@ class WebConsolePersistenceManager{
|
||||
* Get all servers
|
||||
*/
|
||||
getAllServers(){
|
||||
this.createListIfUndefined();
|
||||
return JSON.parse(window.localStorage.servers);
|
||||
this.initializeLocalStorage();
|
||||
|
||||
var storageObj = JSON.parse(window.localStorage.WebConsole);
|
||||
return storageObj.servers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create server list if not defined
|
||||
*/
|
||||
createListIfUndefined(){
|
||||
if (typeof window.localStorage.servers === 'undefined') {
|
||||
window.localStorage.servers = JSON.stringify(new Array());
|
||||
initializeLocalStorage(){
|
||||
if (typeof window.localStorage.WebConsole === 'undefined') {
|
||||
//Create empty object
|
||||
var storageObj = new Object();
|
||||
storageObj.servers = new Array();
|
||||
|
||||
//Save to WebStorage
|
||||
window.localStorage.WebConsole = JSON.stringify(storageObj);
|
||||
}
|
||||
}
|
||||
|
||||
@ -83,7 +100,19 @@ class WebConsolePersistenceManager{
|
||||
* Replaces all server list with provided list
|
||||
*/
|
||||
replaceAllServers(newServerList){
|
||||
window.localStorage.servers = JSON.stringify(newServerList);
|
||||
//Retrieve saved data
|
||||
var storageObj = JSON.parse(window.localStorage.WebConsole);
|
||||
storageObj.servers = newServerList;
|
||||
|
||||
//Save to WebStorage
|
||||
window.localStorage.WebConsole = JSON.stringify(storageObj);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class WSServer{
|
||||
constructor(serverName, serverURI){
|
||||
this.serverName = serverName;
|
||||
this.serverURI = serverURI;
|
||||
}
|
||||
}
|
@ -3,7 +3,7 @@ package com.mesacarlos.webconsole.command;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.java_websocket.WebSocket;
|
||||
|
||||
import com.mesacarlos.webconsole.json.Forbidden;
|
||||
import com.mesacarlos.webconsole.json.LoginRequired;
|
||||
import com.mesacarlos.webconsole.json.Processed;
|
||||
import com.mesacarlos.webconsole.util.LoginManager;
|
||||
import com.mesacarlos.webconsole.websockets.WSServer;
|
||||
@ -25,7 +25,7 @@ public class LogInCommand implements WSCommand {
|
||||
wsServer.sendToClient(conn, new Processed("Logged In", "LOGIN ********"));
|
||||
Bukkit.getLogger().info("[WebConsole] Successfully logged in from " + conn.getRemoteSocketAddress());
|
||||
} else {
|
||||
wsServer.sendToClient(conn, new Forbidden("Forbidden","LOGIN ********"));
|
||||
wsServer.sendToClient(conn, new LoginRequired("Incorrect password, try again"));
|
||||
Bukkit.getLogger()
|
||||
.info("[WebConsole] Password incorrect while login from " + conn.getRemoteSocketAddress());
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user