From d8c71045d2dd3adff7d073e0613e803e719c4b98 Mon Sep 17 00:00:00 2001
From: Carlos <28845529+mesacarlos@users.noreply.github.com>
Date: Mon, 22 Jun 2020 18:26:15 +0200
Subject: [PATCH] Massive update enabling view-only users
---
client/index.html | 2 +-
phrases.properties | 10 +-
phrases_cs.properties | 8 +-
phrases_de.properties | 8 +-
phrases_en.properties | 8 +-
phrases_es.properties | 8 +-
phrases_fr.properties | 8 +-
phrases_it.properties | 8 +-
phrases_nl.properties | 8 +-
phrases_pt.properties | 6 +-
phrases_ru.properties | 8 +-
phrases_zh.properties | 8 +-
plugin.yml | 2 +-
pom.xml | 2 +-
src/es/mesacarlos/webconsole/WebConsole.java | 11 +-
.../webconsole/auth/LoginManager.java | 116 ++++++++++++++++++
src/es/mesacarlos/webconsole/auth/User.java | 33 +++++
.../mesacarlos/webconsole/auth/UserType.java | 7 ++
.../minecraft/WebConsoleCommand.java | 16 +--
.../webconsole/util/LoginManager.java | 50 --------
.../webconsole/websocket/WSServer.java | 2 +-
.../websocket/command/ExecCommand.java | 11 +-
.../websocket/command/LogInCommand.java | 45 ++++---
23 files changed, 283 insertions(+), 102 deletions(-)
create mode 100644 src/es/mesacarlos/webconsole/auth/LoginManager.java
create mode 100644 src/es/mesacarlos/webconsole/auth/User.java
create mode 100644 src/es/mesacarlos/webconsole/auth/UserType.java
delete mode 100644 src/es/mesacarlos/webconsole/util/LoginManager.java
diff --git a/client/index.html b/client/index.html
index f4b4616..9ca786a 100644
--- a/client/index.html
+++ b/client/index.html
@@ -248,7 +248,7 @@
diff --git a/phrases.properties b/phrases.properties
index 046a378..ad13cfe 100644
--- a/phrases.properties
+++ b/phrases.properties
@@ -13,17 +13,18 @@ forbidden-console = [WebConsole] {0} tried to run "{1}" while not logged in!
closed-connection = [WebConsole] Closed connection and logged out from {0}
error-on-connection = [WebConsole] Error occurred on connection {0}: {1}
started-websocket = [WebConsole] WebSocket Server started successfully.
-error-disconnected-client = [WebConsole] Attempted to send a message to a disconnected client.
+error-disconnected-client = [WebConsole] Attempted to send a message to a disconnected WebSocket client.
# CpuUsageCommand.java
cpu-usage-message = Usage is {0}%
# ExecCommand.java
+viewer-error-console = [WebConsole] {0} tried to run {1} without permission.
cmd-executed-console = [WebConsole] {0} executed "{1}".
# LogInCommand.java
login-sucessful-message = Logged in
-login-sucessful-console = [WebConsole] Successfully logged in from {0}
+login-sucessful-console = [WebConsole] {0} successfully logged in.
login-failed-message = Incorrect password, try again
login-failed-console = [WebConsole] Password incorrect while login from {0}
@@ -39,4 +40,7 @@ webconsole-no-connections = There are no logged in WebConsole connections now.
webconsole-active-connections = Connected to WebConsole from:
# ReadLogFileCommand.java
-log-read-error = Error trying to read latest.log file
\ No newline at end of file
+log-read-error = Error trying to read latest.log file
+
+# User.java
+user-tostring = User {0} from {1} as {2}
\ No newline at end of file
diff --git a/phrases_cs.properties b/phrases_cs.properties
index eea808b..004d38a 100644
--- a/phrases_cs.properties
+++ b/phrases_cs.properties
@@ -19,11 +19,12 @@ error-disconnected-client = [WebConsole] Pokus o odeslání zprávy odpojenému
cpu-usage-message = Využití je {0}%
# ExecCommand.java
+viewer-error-console = [WebConsole] {0} se pokusil spustit {1} bez povolení.
cmd-executed-console = [WebConsole] {0} spustil "{1}".
# LogInCommand.java
login-sucessful-message = Jste přihlášeni.
-login-sucessful-console = [WebConsole] Úspěšné přihlášení z {0}
+login-sucessful-console = [WebConsole] {0} úspěšně přihlášeni.
login-failed-message = Špatné heslo, zkuste prosím znovu.
login-failed-console = [WebConsole] {0} se pokusil připojit se špatným heslem.
@@ -39,4 +40,7 @@ webconsole-no-connections = Nejsou žádné WebConsole připojení.
webconsole-active-connections = Připojeno k WebConsole z:
# ReadLogFileCommand.java
-log-read-error = Chyba při čtení souboru latest.log
\ No newline at end of file
+log-read-error = Chyba při čtení souboru latest.log
+
+# User.java
+user-tostring = Uživatel {0} z {1} tak jako {2}
\ No newline at end of file
diff --git a/phrases_de.properties b/phrases_de.properties
index e797802..3b94ebd 100644
--- a/phrases_de.properties
+++ b/phrases_de.properties
@@ -19,11 +19,12 @@ error-disconnected-client = [WebConsole] Es wurde versucht, eine Nachricht an ei
cpu-usage-message = Die CPU Auslastung liegt bei {0}%.
# ExecCommand.java
+viewer-error-console = [WebConsole] {0} hat versucht, {1} ohne Erlaubnis auszuführen.
cmd-executed-console = [WebConsole] {0} hat "{1}" ausgeführt.
# LogInCommand.java
login-sucessful-message = Eingeloggt.
-login-sucessful-console = [WebConsole] {0} hat sich erfolgreich eingeloggt!
+login-sucessful-console = [WebConsole] {0} hat sich erfolgreich eingeloggt.
login-failed-message = Falsches Passwort, versuch es nochmal!
login-failed-console = [WebConsole] {0} hat das Passwort falsch eingegeben
@@ -39,4 +40,7 @@ webconsole-no-connections = Aktuell ist niemand mit der WebConsole verbunden
webconsole-active-connections = Aktive Verbindugen von:
# ReadLogFileCommand.java
-log-read-error = Fehler beim lesen der 'latest.log'-Logdatei
\ No newline at end of file
+log-read-error = Fehler beim lesen der 'latest.log'-Logdatei
+
+# User.java
+user-tostring = Benutzer {0} von {1} wie {2}
\ No newline at end of file
diff --git a/phrases_en.properties b/phrases_en.properties
index 772e83e..ad13cfe 100644
--- a/phrases_en.properties
+++ b/phrases_en.properties
@@ -19,11 +19,12 @@ error-disconnected-client = [WebConsole] Attempted to send a message to a discon
cpu-usage-message = Usage is {0}%
# ExecCommand.java
+viewer-error-console = [WebConsole] {0} tried to run {1} without permission.
cmd-executed-console = [WebConsole] {0} executed "{1}".
# LogInCommand.java
login-sucessful-message = Logged in
-login-sucessful-console = [WebConsole] Successfully logged in from {0}
+login-sucessful-console = [WebConsole] {0} successfully logged in.
login-failed-message = Incorrect password, try again
login-failed-console = [WebConsole] Password incorrect while login from {0}
@@ -39,4 +40,7 @@ webconsole-no-connections = There are no logged in WebConsole connections now.
webconsole-active-connections = Connected to WebConsole from:
# ReadLogFileCommand.java
-log-read-error = Error trying to read latest.log file
\ No newline at end of file
+log-read-error = Error trying to read latest.log file
+
+# User.java
+user-tostring = User {0} from {1} as {2}
\ No newline at end of file
diff --git a/phrases_es.properties b/phrases_es.properties
index c1f68bc..d8b3eeb 100644
--- a/phrases_es.properties
+++ b/phrases_es.properties
@@ -19,11 +19,12 @@ error-disconnected-client = [WebConsole] Se intentó enviar un mensaje a un clie
cpu-usage-message = En uso {0}%
# ExecCommand.java
+viewer-error-console = [WebConsole] {0} intentó ejecutar {1} sin permiso.
cmd-executed-console = [WebConsole] {0} ejecutó "{1}".
# LogInCommand.java
login-sucessful-message = Sesión iniciada
-login-sucessful-console = [WebConsole] Sesión iniciada con éxito desde {0}
+login-sucessful-console = [WebConsole] {0} inició sesión con exito.
login-failed-message = Contraña incorrecta, inténtalo de nuevo
login-failed-console = [WebConsole] Contraseña incorrecta al intentar iniciar sesión desde {0}
@@ -39,4 +40,7 @@ webconsole-no-connections = No hay ninguna conexión activa a WebConsole en este
webconsole-active-connections = Conectado a WebConsole desde:
# ReadLogFileCommand.java
-log-read-error = Error leyendo el fichero latest.log
\ No newline at end of file
+log-read-error = Error leyendo el fichero latest.log
+
+# User.java
+user-tostring = Usuario {0} desde {1} como {2}
\ No newline at end of file
diff --git a/phrases_fr.properties b/phrases_fr.properties
index 3874eed..4ad4b61 100644
--- a/phrases_fr.properties
+++ b/phrases_fr.properties
@@ -19,11 +19,12 @@ error-disconnected-client = [WebConsole] Vous avez tenté d'envoyer un message
cpu-usage-message = L'utilisation est {0}%
# ExecCommand.java
+viewer-error-console = [WebConsole] {0} a tenté d'exécuter {1} sans autorisation.
cmd-executed-console = [WebConsole] {0} a exécuté "{1}".
# LogInCommand.java
login-sucessful-message = Connecté
-login-sucessful-console = [WebConsole] Connexion réussie à partir de {0}
+login-sucessful-console = [WebConsole] {0} session démarrée avec succès.
login-failed-message = Mot de passe incorrect, réessayez
login-failed-console = [WebConsole] Mot de passe incorrect lors de la connexion depuis {0}
@@ -39,4 +40,7 @@ webconsole-no-connections = Aucune connexion WebConsole n'est connectée mainten
webconsole-active-connections = Connecté à WebConsole depuis:
# ReadLogFileCommand.java
-log-read-error = Erreur lors de la lecture du fichier latest.log
\ No newline at end of file
+log-read-error = Erreur lors de la lecture du fichier latest.log
+
+# User.java
+user-tostring = Utilisateur {0} depuis {1} comme {2}
\ No newline at end of file
diff --git a/phrases_it.properties b/phrases_it.properties
index 337d2bd..e5bd04b 100644
--- a/phrases_it.properties
+++ b/phrases_it.properties
@@ -19,11 +19,12 @@ error-disconnected-client = [WebConsole] Tentativo di inviare un messaggio a un
cpu-usage-message = L''uso è {0}%
# ExecCommand.java
+viewer-error-console = [WebConsole] {0} ha provato a eseguire {1} senza autorizzazione.
cmd-executed-console = [WebConsole] {0} eseguito "{1}".
# LogInCommand.java
login-sucessful-message = Accesso eseguito
-login-sucessful-console = [WebConsole] Connessione stabilita correttamente da {0}
+login-sucessful-console = [WebConsole] {0} ha effettuato l'accesso correttamente.
login-failed-message = Password scorretta, riprova
login-failed-console = [WebConsole] Password scorretta inserita da {0}
@@ -39,4 +40,7 @@ webconsole-no-connections = Non è stata effettuata ancora nessuna connessione t
webconsole-active-connections = Connesso a WebConsole da:
# ReadLogFileCommand.java
-log-read-error = Errore metre tentavo di leggere latest.log
\ No newline at end of file
+log-read-error = Errore metre tentavo di leggere latest.log
+
+# User.java
+user-tostring = Utente {0} a partire dal {1} come {2}
\ No newline at end of file
diff --git a/phrases_nl.properties b/phrases_nl.properties
index e5a6279..af769f4 100644
--- a/phrases_nl.properties
+++ b/phrases_nl.properties
@@ -19,11 +19,12 @@ error-disconnected-client = [WebConsole] Poging om een bericht te sturen naar ee
cpu-usage-message = Verbruik is {0}%
# ExecCommand.java
+viewer-error-console = [WebConsole] {0} heeft geprobeerd {1} uit te voeren zonder toestemming.
cmd-executed-console = [WebConsole] {0} voerde "{1}" uit.
# LogInCommand.java
login-sucessful-message = Ingelogd
-login-sucessful-console = [WebConsole] Successvol ingelogd van {0}
+login-sucessful-console = [WebConsole] {0} succesvol ingelogd.
login-failed-message = Incorrect wachtwoord, probeer het opnieuw
login-failed-console = [WebConsole] Wachtwoord onjuist bij inloggen vanaf {0}
@@ -39,4 +40,7 @@ webconsole-no-connections = Er zijn nu geen ingelogde Web Console-verbindingen.
webconsole-active-connections = Verbonden aan WebConsole vanaf:
# ReadLogFileCommand.java
-log-read-error = Er is een fout opgetreden bij het lezen van het bestand latest.log
\ No newline at end of file
+log-read-error = Er is een fout opgetreden bij het lezen van het bestand latest.log
+
+# User.java
+user-tostring = Gebruiker {0} uit {1} als {2}
\ No newline at end of file
diff --git a/phrases_pt.properties b/phrases_pt.properties
index 692e55c..4d66632 100644
--- a/phrases_pt.properties
+++ b/phrases_pt.properties
@@ -19,6 +19,7 @@ error-disconnected-client = [WebConsole] Tentativa de enviar uma mensagem para u
cpu-usage-message = Consumindo {0}%
# ExecCommand.java
+viewer-error-console = [WebConsole] {0} tentou executar o {1} sem permissão.
cmd-executed-console = [WebConsole] {0} executou "{1}".
# LogInCommand.java
@@ -39,4 +40,7 @@ webconsole-no-connections = Atualmente não tem nenhum usuário conectado.
webconsole-active-connections = Atualmente temos:
# ReadLogFileCommand.java
-log-read-error = Erro ao ler o arquivo latest.log
\ No newline at end of file
+log-read-error = Erro ao ler o arquivo latest.log
+
+# User.java
+user-tostring = Usuário {0} da {1} como {2}
\ No newline at end of file
diff --git a/phrases_ru.properties b/phrases_ru.properties
index 31267e5..9313abb 100644
--- a/phrases_ru.properties
+++ b/phrases_ru.properties
@@ -19,11 +19,12 @@ error-disconnected-client = [WebConsole] Попытка отправить со
cpu-usage-message = Использование {0}%
# ExecCommand.java
+viewer-error-console = [WebConsole] {0} попытался запустить {1} без разрешения.
cmd-executed-console = [WebConsole] {0} выполнил "{1}".
# LogInCommand.java
login-sucessful-message = Войти в систему
-login-sucessful-console = [WebConsole] Успешно вошел в систему с {0}
+login-sucessful-console = [WebConsole] {0} успешно авторизован
login-failed-message = Неверный пароль, попробуйте еще раз
login-failed-console = [WebConsole] Неверный пароль при входе с {0}
@@ -39,4 +40,7 @@ webconsole-no-connections = В настоящее время нет подклю
webconsole-active-connections = Подключен к веб-консоли из :
# ReadLogFileCommand.java
-log-read-error = ошибка чтения последнего latest.log
\ No newline at end of file
+log-read-error = ошибка чтения последнего latest.log
+
+# User.java
+user-tostring = пользователь {0} из {1} так как {2}
\ No newline at end of file
diff --git a/phrases_zh.properties b/phrases_zh.properties
index a66f11f..2a11d1a 100644
--- a/phrases_zh.properties
+++ b/phrases_zh.properties
@@ -19,11 +19,12 @@ error-disconnected-client = [WebConsole] 尝试向断开连接的WebSocket客户
cpu-usage-message = 已使用 {0}%
# ExecCommand.java
+viewer-error-console = [WebConsole] {0}试图未经许可而运行{1}。
cmd-executed-console = [網站控制台] {0} 執行 '{1}'.
# LogInCommand.java
login-sucessful-message = 登錄
-login-sucessful-console = [網站控制台] 成功登錄 {0}
+login-sucessful-console = [網站控制台] {0}已成功登录。
login-failed-message = 密碼不正確,請重試
login-failed-console = [網站控制台] 登錄時密碼不正確 {0}
@@ -39,4 +40,7 @@ webconsole-no-connections = 現在沒有連接登錄網站控制台。
webconsole-active-connections = 從以下位置連接到網站控制台:
# ReadLogFileCommand.java
-log-read-error = 读取Latest.log文件时出错
\ No newline at end of file
+log-read-error = 读取Latest.log文件时出错
+
+# User.java
+user-tostring = 用户 {0} 从 {1} 如 {2}
\ No newline at end of file
diff --git a/plugin.yml b/plugin.yml
index 05ea86a..78cb045 100644
--- a/plugin.yml
+++ b/plugin.yml
@@ -1,7 +1,7 @@
name: WebConsole
main: es.mesacarlos.webconsole.WebConsole
api-version: 1.13
-version: 1.6
+version: 2.0
description: WebSockets-based web console
author: Carlos Mesa
commands:
diff --git a/pom.xml b/pom.xml
index 3354db7..1e58e37 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
WebConsole
WebConsole
- 1.6
+ 2.0
src
diff --git a/src/es/mesacarlos/webconsole/WebConsole.java b/src/es/mesacarlos/webconsole/WebConsole.java
index 1c9b2b2..6fafc25 100644
--- a/src/es/mesacarlos/webconsole/WebConsole.java
+++ b/src/es/mesacarlos/webconsole/WebConsole.java
@@ -13,6 +13,7 @@ import javax.net.ssl.TrustManagerFactory;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.Filter;
import org.bukkit.Bukkit;
+import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.plugin.java.JavaPlugin;
import org.java_websocket.server.DefaultSSLWebSocketServerFactory;
@@ -76,11 +77,17 @@ public class WebConsole extends JavaPlugin {
// Connection config variables
config.addDefault("host", "0.0.0.0");
config.addDefault("port", 8080);
- config.addDefault("password", 1234);
// Language config
config.addDefault("language", "en");
-
+
+ if(config.getConfigurationSection("passwords") == null) {
+ ConfigurationSection passwordsSection = config.createSection("passwords");
+ ConfigurationSection adminPasswordSection = passwordsSection.createSection("admin");
+ adminPasswordSection.addDefault("user1", "mySecurePassword");
+ passwordsSection.createSection("viewer");
+ }
+
config.options().copyDefaults(true);
saveConfig();
}
diff --git a/src/es/mesacarlos/webconsole/auth/LoginManager.java b/src/es/mesacarlos/webconsole/auth/LoginManager.java
new file mode 100644
index 0000000..f7865dd
--- /dev/null
+++ b/src/es/mesacarlos/webconsole/auth/LoginManager.java
@@ -0,0 +1,116 @@
+package es.mesacarlos.webconsole.auth;
+
+import java.net.InetSocketAddress;
+import java.util.ArrayList;
+import java.util.Map;
+
+import org.bukkit.Bukkit;
+
+import es.mesacarlos.webconsole.WebConsole;
+
+public class LoginManager {
+ private ArrayList loggedInUsers = new ArrayList();
+ private static LoginManager instance;
+
+ private LoginManager() {}
+
+ public static LoginManager getInstance() {
+ if(instance == null)
+ instance = new LoginManager();
+ return instance;
+ }
+
+ /**
+ * Logs user in
+ * @param user User to login
+ */
+ public void logIn(User user) {
+ loggedInUsers.add(user);
+ }
+
+ /**
+ * Logs user out
+ * @param address User to logout
+ */
+ public void logOut(InetSocketAddress address) {
+ for(User user : loggedInUsers)
+ if(user.getSocketAddress().equals(address))
+ loggedInUsers.remove(user);
+ }
+
+ public User getUser(InetSocketAddress address) {
+ for(User user : loggedInUsers)
+ if(user.getSocketAddress().equals(address))
+ return user;
+ return null;
+ }
+
+ /**
+ * Check if user is logged in
+ * @param address User to check
+ * @return true if user is logged in, false otherwise
+ */
+ public boolean isLoggedIn(InetSocketAddress address) {
+ for(User user : loggedInUsers)
+ if(user.getSocketAddress().equals(address))
+ return true;
+ return false;
+ }
+
+ /**
+ * Retrieve the full logged-in user list
+ * @return list of logged in users
+ */
+ public ArrayList getLoggedInUsers() {
+ return loggedInUsers;
+ }
+
+ /**
+ * Check if the provided password corresponds to any admin
+ * @param password Provided password
+ * @return Name of the user if password corresponds to a valid admin, null if is a viewer or an invalid password
+ */
+ public String isValidAdminPassword(String password) {
+ WebConsole plugin = (WebConsole)Bukkit.getPluginManager().getPlugin("WebConsole");
+ Map passwords = plugin.getConfig().getConfigurationSection("passwords").getConfigurationSection("admin").getValues(false);
+
+ for(Map.Entry entry : passwords.entrySet()) {
+ String pwd = (String)entry.getValue();
+ if(pwd.equals(password))
+ return entry.getKey();
+ }
+ return null;
+ }
+
+ /**
+ * Check if the provided password corresponds to any viewer
+ * @param password Provided password
+ * @return Name of the user if password corresponds to a valid viewer, null if is a admin or invalid password
+ */
+ public String isValidViewerPassword(String password) {
+ WebConsole plugin = (WebConsole)Bukkit.getPluginManager().getPlugin("WebConsole");
+ Map passwords = plugin.getConfig().getConfigurationSection("passwords").getConfigurationSection("viewer").getValues(false);
+
+ for(Map.Entry entry : passwords.entrySet()) {
+ String pwd = (String)entry.getValue();
+ if(pwd.equals(password))
+ return entry.getKey();
+ }
+ return null;
+ }
+
+ public UserType isValidUser(String password) {
+ //Check if is an admin
+ String username = isValidAdminPassword(password);
+ if(username != null)
+ return UserType.ADMIN;
+
+ //Check if is a viewer
+ username = isValidViewerPassword(password);
+ if(username != null)
+ return UserType.VIEWER;
+
+ //He is nothing
+ return UserType.UNKNOWN;
+ }
+}
\ No newline at end of file
diff --git a/src/es/mesacarlos/webconsole/auth/User.java b/src/es/mesacarlos/webconsole/auth/User.java
new file mode 100644
index 0000000..066f2dc
--- /dev/null
+++ b/src/es/mesacarlos/webconsole/auth/User.java
@@ -0,0 +1,33 @@
+package es.mesacarlos.webconsole.auth;
+
+import java.net.InetSocketAddress;
+
+import es.mesacarlos.webconsole.util.Internationalization;
+
+public class User {
+ private String username;
+ private InetSocketAddress socketAddress;
+ private UserType userType;
+
+ public User(InetSocketAddress socketAddress, String username, UserType userType) {
+ this.socketAddress = socketAddress;
+ this.username = username;
+ this.userType = userType;
+ }
+
+ public InetSocketAddress getSocketAddress() {
+ return socketAddress;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public UserType getUserType() {
+ return userType;
+ }
+
+ public String toString() {
+ return Internationalization.getPhrase("user-tostring", username, socketAddress, userType);
+ }
+}
\ No newline at end of file
diff --git a/src/es/mesacarlos/webconsole/auth/UserType.java b/src/es/mesacarlos/webconsole/auth/UserType.java
new file mode 100644
index 0000000..f653b0f
--- /dev/null
+++ b/src/es/mesacarlos/webconsole/auth/UserType.java
@@ -0,0 +1,7 @@
+package es.mesacarlos.webconsole.auth;
+
+public enum UserType {
+ ADMIN,
+ VIEWER,
+ UNKNOWN
+}
\ No newline at end of file
diff --git a/src/es/mesacarlos/webconsole/minecraft/WebConsoleCommand.java b/src/es/mesacarlos/webconsole/minecraft/WebConsoleCommand.java
index 4d6c92c..f68713c 100644
--- a/src/es/mesacarlos/webconsole/minecraft/WebConsoleCommand.java
+++ b/src/es/mesacarlos/webconsole/minecraft/WebConsoleCommand.java
@@ -1,14 +1,14 @@
package es.mesacarlos.webconsole.minecraft;
-import java.net.InetSocketAddress;
import java.util.ArrayList;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
+import es.mesacarlos.webconsole.auth.LoginManager;
+import es.mesacarlos.webconsole.auth.User;
import es.mesacarlos.webconsole.util.Internationalization;
-import es.mesacarlos.webconsole.util.LoginManager;
public class WebConsoleCommand implements CommandExecutor {
private String version;
@@ -22,16 +22,16 @@ public class WebConsoleCommand implements CommandExecutor {
StringBuilder msg = new StringBuilder();
msg.append(Internationalization.getPhrase("webconsole-version", version) + "\n");
- ArrayList connections = LoginManager.getInstance().getLoggedInUsers();
+ ArrayList users = LoginManager.getInstance().getLoggedInUsers();
- if (connections.isEmpty()) {
+ if (users.isEmpty()) {
msg.append(Internationalization.getPhrase("webconsole-no-connections"));
} else {
msg.append(Internationalization.getPhrase("webconsole-active-connections") + "\n");
- for (int i = 0; i < connections.size(); i++) {
- InetSocketAddress connection = connections.get(i);
- msg.append(connection.toString());
- if(i+1 < connections.size())
+ for (int i = 0; i < users.size(); i++) {
+ User user = users.get(i);
+ msg.append(user.toString());
+ if(i+1 < users.size())
msg.append("\n");
}
}
diff --git a/src/es/mesacarlos/webconsole/util/LoginManager.java b/src/es/mesacarlos/webconsole/util/LoginManager.java
deleted file mode 100644
index 836e164..0000000
--- a/src/es/mesacarlos/webconsole/util/LoginManager.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package es.mesacarlos.webconsole.util;
-
-import java.net.InetSocketAddress;
-import java.util.ArrayList;
-
-public class LoginManager {
- private ArrayList loggedInUsers = new ArrayList();
- private static LoginManager instance;
-
- private LoginManager() {}
-
- public static LoginManager getInstance() {
- if(instance == null)
- instance = new LoginManager();
- return instance;
- }
-
- /**
- * Logs user in
- * @param address User to login
- */
- public void logIn(InetSocketAddress address) {
- loggedInUsers.add(address);
- }
-
- /**
- * Logs user out
- * @param address User to logout
- */
- public void logOut(InetSocketAddress address) {
- loggedInUsers.remove(address);
- }
-
- /**
- * Check if user is logged in
- * @param address User to check
- * @return true if user is logged in, false otherwise
- */
- public boolean isLoggedIn(InetSocketAddress address) {
- return loggedInUsers.contains(address);
- }
-
- /**
- * Retrieve the full logged-in user list
- * @return list of logged in users
- */
- public ArrayList getLoggedInUsers() {
- return loggedInUsers;
- }
-}
\ No newline at end of file
diff --git a/src/es/mesacarlos/webconsole/websocket/WSServer.java b/src/es/mesacarlos/webconsole/websocket/WSServer.java
index 1473e37..38daf5b 100644
--- a/src/es/mesacarlos/webconsole/websocket/WSServer.java
+++ b/src/es/mesacarlos/webconsole/websocket/WSServer.java
@@ -11,9 +11,9 @@ import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer;
import es.mesacarlos.webconsole.WebConsole;
+import es.mesacarlos.webconsole.auth.LoginManager;
import es.mesacarlos.webconsole.util.DateTimeUtils;
import es.mesacarlos.webconsole.util.Internationalization;
-import es.mesacarlos.webconsole.util.LoginManager;
import es.mesacarlos.webconsole.websocket.command.WSCommandFactory;
import es.mesacarlos.webconsole.websocket.command.WSCommand;
import es.mesacarlos.webconsole.websocket.response.ConsoleOutput;
diff --git a/src/es/mesacarlos/webconsole/websocket/command/ExecCommand.java b/src/es/mesacarlos/webconsole/websocket/command/ExecCommand.java
index 98f0725..9348ccd 100644
--- a/src/es/mesacarlos/webconsole/websocket/command/ExecCommand.java
+++ b/src/es/mesacarlos/webconsole/websocket/command/ExecCommand.java
@@ -6,6 +6,9 @@ import org.bukkit.Bukkit;
import org.bukkit.command.ConsoleCommandSender;
import org.java_websocket.WebSocket;
+import es.mesacarlos.webconsole.auth.LoginManager;
+import es.mesacarlos.webconsole.auth.User;
+import es.mesacarlos.webconsole.auth.UserType;
import es.mesacarlos.webconsole.util.Internationalization;
import es.mesacarlos.webconsole.websocket.WSServer;
@@ -13,7 +16,13 @@ public class ExecCommand implements WSCommand {
@Override
public void execute(WSServer wsServer, WebSocket conn, String command) {
-
+ User u = LoginManager.getInstance().getUser(conn.getRemoteSocketAddress());
+ if(u == null || u.getUserType() != UserType.ADMIN) {
+ if(u != null)
+ Bukkit.getLogger().warning(Internationalization.getPhrase("viewer-error-console", u, command));
+ return;
+ }
+
Bukkit.getLogger().info(Internationalization.getPhrase("cmd-executed-console", conn.getRemoteSocketAddress(), Internationalization.utf8ToIso(command)));
ConsoleCommandSender sender = Bukkit.getServer().getConsoleSender();
diff --git a/src/es/mesacarlos/webconsole/websocket/command/LogInCommand.java b/src/es/mesacarlos/webconsole/websocket/command/LogInCommand.java
index 11a4a72..a98f755 100644
--- a/src/es/mesacarlos/webconsole/websocket/command/LogInCommand.java
+++ b/src/es/mesacarlos/webconsole/websocket/command/LogInCommand.java
@@ -3,33 +3,48 @@ package es.mesacarlos.webconsole.websocket.command;
import org.bukkit.Bukkit;
import org.java_websocket.WebSocket;
+import es.mesacarlos.webconsole.auth.LoginManager;
+import es.mesacarlos.webconsole.auth.User;
+import es.mesacarlos.webconsole.auth.UserType;
import es.mesacarlos.webconsole.util.Internationalization;
-import es.mesacarlos.webconsole.util.LoginManager;
import es.mesacarlos.webconsole.websocket.WSServer;
import es.mesacarlos.webconsole.websocket.response.LoginRequired;
import es.mesacarlos.webconsole.websocket.response.Processed;
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()))
return;
-
- // Get password from config files
- String receivedPassword = wsServer.getMainClass().getConfig().getString("password");
-
- if (receivedPassword.equals(password)) {
- // Password is correct, logging in
- LoginManager.getInstance().logIn(conn.getRemoteSocketAddress());
- wsServer.sendToClient(conn, new Processed(Internationalization.getPhrase("login-sucessful-message"), "LOGIN ********"));
- Bukkit.getLogger().info(Internationalization.getPhrase("login-sucessful-console", conn.getRemoteSocketAddress()));
- } else {
- // Password was incorrect
- wsServer.sendToClient(conn, new LoginRequired(Internationalization.getPhrase("login-failed-message")));
- Bukkit.getLogger().info(Internationalization.getPhrase("login-failed-console", conn.getRemoteSocketAddress()));
+
+ //Check user type and login is password is valid
+ switch(LoginManager.getInstance().isValidUser(password)) {
+ case ADMIN:
+ login(wsServer, conn, LoginManager.getInstance().isValidAdminPassword(password), UserType.ADMIN);
+ break;
+ case VIEWER:
+ login(wsServer, conn, LoginManager.getInstance().isValidViewerPassword(password), UserType.VIEWER);
+ break;
+ case UNKNOWN:
+ wsServer.sendToClient(conn, new LoginRequired(Internationalization.getPhrase("login-failed-message")));
+ Bukkit.getLogger().info(Internationalization.getPhrase("login-failed-console", conn.getRemoteSocketAddress()));
+ break;
+ default:
+ wsServer.sendToClient(conn, new LoginRequired(Internationalization.getPhrase("login-failed-message")));
+ Bukkit.getLogger().info(Internationalization.getPhrase("login-failed-console", conn.getRemoteSocketAddress()));
+ break;
}
+
+ }
+
+ private void login(WSServer wsServer, WebSocket conn, String username, UserType as) {
+ User user = new User(conn.getRemoteSocketAddress(), username, as);
+ LoginManager.getInstance().logIn(user);
+
+ wsServer.sendToClient(conn, new Processed(Internationalization.getPhrase("login-sucessful-message"), "LOGIN ********"));
+ Bukkit.getLogger().info(Internationalization.getPhrase("login-sucessful-console", user.toString()));
}
}
\ No newline at end of file