diff --git a/src/es/mesacarlos/webconsole/auth/User.java b/src/es/mesacarlos/webconsole/auth/ConnectedUser.java similarity index 75% rename from src/es/mesacarlos/webconsole/auth/User.java rename to src/es/mesacarlos/webconsole/auth/ConnectedUser.java index 066f2dc..6318679 100644 --- a/src/es/mesacarlos/webconsole/auth/User.java +++ b/src/es/mesacarlos/webconsole/auth/ConnectedUser.java @@ -1,33 +1,34 @@ -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); - } +package es.mesacarlos.webconsole.auth; + +import java.net.InetSocketAddress; + +import es.mesacarlos.webconsole.config.UserType; +import es.mesacarlos.webconsole.util.Internationalization; + +public class ConnectedUser { + private String username; + private InetSocketAddress socketAddress; + private UserType userType; + + public ConnectedUser(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/LoginManager.java b/src/es/mesacarlos/webconsole/auth/LoginManager.java index 8a39c3e..ecfc47a 100644 --- a/src/es/mesacarlos/webconsole/auth/LoginManager.java +++ b/src/es/mesacarlos/webconsole/auth/LoginManager.java @@ -4,7 +4,7 @@ import java.net.InetSocketAddress; import java.util.ArrayList; public class LoginManager { - private ArrayList loggedInUsers = new ArrayList(); + private ArrayList loggedInUsers = new ArrayList(); private static LoginManager instance; private LoginManager() {} @@ -19,7 +19,7 @@ public class LoginManager { * Logs user in * @param user User to login */ - public void logIn(User user) { + public void logIn(ConnectedUser user) { loggedInUsers.add(user); } @@ -28,7 +28,7 @@ public class LoginManager { * @param address User to logout */ public void logOut(InetSocketAddress address) { - for(User user : loggedInUsers) + for(ConnectedUser user : loggedInUsers) if(user.getSocketAddress().equals(address)) loggedInUsers.remove(user); } @@ -38,8 +38,8 @@ public class LoginManager { * @param address socket of the user * @return User object, null if no user logged in from that address */ - public User getUser(InetSocketAddress address) { - for(User user : loggedInUsers) + public ConnectedUser getUser(InetSocketAddress address) { + for(ConnectedUser user : loggedInUsers) if(user.getSocketAddress().equals(address)) return user; return null; @@ -51,7 +51,7 @@ public class LoginManager { * @return true if user is logged in, false otherwise */ public boolean isLoggedIn(InetSocketAddress address) { - for(User user : loggedInUsers) + for(ConnectedUser user : loggedInUsers) if(user.getSocketAddress().equals(address)) return true; return false; @@ -61,7 +61,7 @@ public class LoginManager { * Retrieve the full logged-in user list * @return list of logged in users */ - public ArrayList getLoggedInUsers() { + public ArrayList getLoggedInUsers() { return loggedInUsers; } diff --git a/src/es/mesacarlos/webconsole/auth/PasswordManager.java b/src/es/mesacarlos/webconsole/auth/PasswordManager.java deleted file mode 100644 index 6ae87d4..0000000 --- a/src/es/mesacarlos/webconsole/auth/PasswordManager.java +++ /dev/null @@ -1,52 +0,0 @@ -package es.mesacarlos.webconsole.auth; - -import es.mesacarlos.webconsole.config.ConfigManager; -import es.mesacarlos.webconsole.config.UserData; - -public class PasswordManager { - - /** - * Get the user type of a given password - * @param password Password to check - * @return ADMIN if password correspond to a admin user, VIEWER if viewer or UNKNOWN if invalid password - */ - public static UserType isValidUser(String password) { - //Check if is an admin - String username = getAdminUsernameFromPassword(password); - if(username != null) - return UserType.ADMIN; - - //Check if is a viewer - username = getViewerUsernameFromPassword(password); - if(username != null) - return UserType.VIEWER; - - //He is nothing - return UserType.UNKNOWN; - } - - /** - * 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 static String getAdminUsernameFromPassword(String password) { - for(UserData ud : ConfigManager.getInstance().getAdmins()) - if(ud.getPassword().equals(password)) - return ud.getUsername(); - 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 static String getViewerUsernameFromPassword(String password) { - for(UserData ud : ConfigManager.getInstance().getViewers()) - if(ud.getPassword().equals(password)) - return ud.getUsername(); - return null; - } - -} \ No newline at end of file diff --git a/src/es/mesacarlos/webconsole/auth/UserType.java b/src/es/mesacarlos/webconsole/auth/UserType.java deleted file mode 100644 index f653b0f..0000000 --- a/src/es/mesacarlos/webconsole/auth/UserType.java +++ /dev/null @@ -1,7 +0,0 @@ -package es.mesacarlos.webconsole.auth; - -public enum UserType { - ADMIN, - VIEWER, - UNKNOWN -} \ No newline at end of file diff --git a/src/es/mesacarlos/webconsole/config/ConfigManager.java b/src/es/mesacarlos/webconsole/config/ConfigManager.java index 3797862..564b610 100644 --- a/src/es/mesacarlos/webconsole/config/ConfigManager.java +++ b/src/es/mesacarlos/webconsole/config/ConfigManager.java @@ -1,122 +1,132 @@ -package es.mesacarlos.webconsole.config; - -import java.net.InetSocketAddress; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import org.bukkit.Bukkit; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.FileConfiguration; - -import es.mesacarlos.webconsole.WebConsole; - -public class ConfigManager { - private static ConfigManager instance; - private WebConsole plugin = (WebConsole) Bukkit.getPluginManager().getPlugin("WebConsole"); - private FileConfiguration config = plugin.getConfig(); - - private ConfigManager() { - loadConfig(); - } - - public static ConfigManager getInstance() { - if(instance == null) - instance = new ConfigManager(); - return instance; - } - - /** - * Create configuration file or load it if already exist - */ - private void loadConfig() { - // SSL variables - config.addDefault("useSSL", false); - config.addDefault("StoreType", "JKS"); - config.addDefault("KeyStore", "plugins/WebConsole/keystore.jks"); - config.addDefault("StorePassword", "storepassword"); - config.addDefault("KeyPassword", "keypassword"); - - // Connection config variables - config.addDefault("host", "0.0.0.0"); - config.addDefault("port", 8080); - - // 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); - plugin.saveConfig(); - } - - public boolean isSslEnabled() { - return config.getBoolean("useSSL"); - } - - public String getStoreType() { - return config.getString("StoreType"); - } - - public String getKeyStore() { - return config.getString("KeyStore"); - } - - public String getStorePassword() { - return config.getString("StorePassword"); - } - - public String getKeyPassword() { - return config.getString("KeyPassword"); - } - - /** - * Get host and port fields already as InetSocketAddress - * @return InetSocketAddress created from the fields host and port of config.yml - */ - public InetSocketAddress getSocketAdress() { - return new InetSocketAddress(config.getString("host"), config.getInt("port")); - } - - /** - * Language code from config.yml - * @return language code - */ - public String getLanguage() { - return config.getString("language"); - } - - /** - * Get all admins as a UserData list - * @return list of admin users - */ - public List getAdmins() { - Map passwords = plugin.getConfig().getConfigurationSection("passwords").getConfigurationSection("admin").getValues(false); - List adminUsers = new ArrayList(); - - for(Map.Entry entry : passwords.entrySet()) - adminUsers.add(new UserData(entry.getKey(), entry.getValue().toString())); - - return adminUsers; - } - - /** - * Get all viewers as a UserData list - * @return list of viewer users - */ - public List getViewers() { - Map passwords = plugin.getConfig().getConfigurationSection("passwords").getConfigurationSection("viewer").getValues(false); - List viewerUsers = new ArrayList(); - - for(Map.Entry entry : passwords.entrySet()) - viewerUsers.add(new UserData(entry.getKey(), entry.getValue().toString())); - - return viewerUsers; - } - +package es.mesacarlos.webconsole.config; + +import java.net.InetSocketAddress; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.bukkit.Bukkit; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.FileConfiguration; + +import es.mesacarlos.webconsole.WebConsole; + +public class ConfigManager { + private static ConfigManager instance; + private WebConsole plugin = (WebConsole) Bukkit.getPluginManager().getPlugin("WebConsole"); + private FileConfiguration config = plugin.getConfig(); + + private ConfigManager() { + loadConfig(); + } + + public static ConfigManager getInstance() { + if(instance == null) + instance = new ConfigManager(); + return instance; + } + + /** + * Create configuration file or load it if already exist + */ + private void loadConfig() { + // SSL variables + config.addDefault("useSSL", false); + config.addDefault("StoreType", "JKS"); + config.addDefault("KeyStore", "plugins/WebConsole/keystore.jks"); + config.addDefault("StorePassword", "storepassword"); + config.addDefault("KeyPassword", "keypassword"); + + // Connection config variables + config.addDefault("host", "0.0.0.0"); + config.addDefault("port", 8080); + + // 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); + plugin.saveConfig(); + } + + public boolean isSslEnabled() { + return config.getBoolean("useSSL"); + } + + public String getStoreType() { + return config.getString("StoreType"); + } + + public String getKeyStore() { + return config.getString("KeyStore"); + } + + public String getStorePassword() { + return config.getString("StorePassword"); + } + + public String getKeyPassword() { + return config.getString("KeyPassword"); + } + + /** + * Get host and port fields already as InetSocketAddress + * @return InetSocketAddress created from the fields host and port of config.yml + */ + public InetSocketAddress getSocketAdress() { + return new InetSocketAddress(config.getString("host"), config.getInt("port")); + } + + /** + * Language code from config.yml + * @return language code + */ + public String getLanguage() { + return config.getString("language"); + } + + /** + * Get all admins as a UserData list + * @return list of admin users + */ + private List getAdmins() { + Map passwords = plugin.getConfig().getConfigurationSection("passwords").getConfigurationSection("admin").getValues(false); + List adminUsers = new ArrayList(); + + for(Map.Entry entry : passwords.entrySet()) + adminUsers.add(new UserData(entry.getKey(), entry.getValue().toString(), UserType.ADMIN)); + + return adminUsers; + } + + /** + * Get all viewers as a UserData list + * @return list of viewer users + */ + private List getViewers() { + Map passwords = plugin.getConfig().getConfigurationSection("passwords").getConfigurationSection("viewer").getValues(false); + List viewerUsers = new ArrayList(); + + for(Map.Entry entry : passwords.entrySet()) + viewerUsers.add(new UserData(entry.getKey(), entry.getValue().toString(), UserType.VIEWER)); + + return viewerUsers; + } + + /** + * Get all registered users + * @return All Admin and Viewer users inside config.yml + */ + public List getAllUsers(){ + List users = getAdmins(); + users.addAll(getViewers()); + return users; + } + } \ No newline at end of file diff --git a/src/es/mesacarlos/webconsole/config/UserData.java b/src/es/mesacarlos/webconsole/config/UserData.java index 8253bc3..dfd8590 100644 --- a/src/es/mesacarlos/webconsole/config/UserData.java +++ b/src/es/mesacarlos/webconsole/config/UserData.java @@ -1,19 +1,25 @@ -package es.mesacarlos.webconsole.config; - -public class UserData { - private String username; - private String password; - - public UserData(String username, String password) { - this.username = username; - this.password = password; - } - - public String getUsername() { - return username; - } - - public String getPassword() { - return password; - } +package es.mesacarlos.webconsole.config; + +public class UserData { + private String username; + private String password; + private UserType userType; + + public UserData(String username, String password, UserType userType) { + this.username = username; + this.password = password; + this.userType = userType; + } + + public String getUsername() { + return username; + } + + public String getPassword() { + return password; + } + + public UserType getUserType() { + return userType; + } } \ No newline at end of file diff --git a/src/es/mesacarlos/webconsole/config/UserType.java b/src/es/mesacarlos/webconsole/config/UserType.java new file mode 100644 index 0000000..7ad5bca --- /dev/null +++ b/src/es/mesacarlos/webconsole/config/UserType.java @@ -0,0 +1,6 @@ +package es.mesacarlos.webconsole.config; + +public enum UserType { + ADMIN, + VIEWER +} \ 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 f68713c..4070431 100644 --- a/src/es/mesacarlos/webconsole/minecraft/WebConsoleCommand.java +++ b/src/es/mesacarlos/webconsole/minecraft/WebConsoleCommand.java @@ -7,7 +7,7 @@ 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.auth.ConnectedUser; import es.mesacarlos.webconsole.util.Internationalization; public class WebConsoleCommand implements CommandExecutor { @@ -22,14 +22,14 @@ public class WebConsoleCommand implements CommandExecutor { StringBuilder msg = new StringBuilder(); msg.append(Internationalization.getPhrase("webconsole-version", version) + "\n"); - ArrayList users = LoginManager.getInstance().getLoggedInUsers(); + ArrayList users = LoginManager.getInstance().getLoggedInUsers(); if (users.isEmpty()) { msg.append(Internationalization.getPhrase("webconsole-no-connections")); } else { msg.append(Internationalization.getPhrase("webconsole-active-connections") + "\n"); for (int i = 0; i < users.size(); i++) { - User user = users.get(i); + ConnectedUser user = users.get(i); msg.append(user.toString()); if(i+1 < users.size()) msg.append("\n"); diff --git a/src/es/mesacarlos/webconsole/websocket/command/ExecCommand.java b/src/es/mesacarlos/webconsole/websocket/command/ExecCommand.java index 6be39e8..e7ced5a 100644 --- a/src/es/mesacarlos/webconsole/websocket/command/ExecCommand.java +++ b/src/es/mesacarlos/webconsole/websocket/command/ExecCommand.java @@ -8,8 +8,8 @@ import org.java_websocket.WebSocket; import es.mesacarlos.webconsole.WebConsole; import es.mesacarlos.webconsole.auth.LoginManager; -import es.mesacarlos.webconsole.auth.User; -import es.mesacarlos.webconsole.auth.UserType; +import es.mesacarlos.webconsole.auth.ConnectedUser; +import es.mesacarlos.webconsole.config.UserType; import es.mesacarlos.webconsole.util.Internationalization; import es.mesacarlos.webconsole.websocket.WSServer; @@ -17,7 +17,7 @@ public class ExecCommand implements WSCommand { @Override public void execute(WSServer wsServer, WebSocket conn, String command) { - User u = LoginManager.getInstance().getUser(conn.getRemoteSocketAddress()); + ConnectedUser 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)); diff --git a/src/es/mesacarlos/webconsole/websocket/command/LogInCommand.java b/src/es/mesacarlos/webconsole/websocket/command/LogInCommand.java index 2665ed9..343523d 100644 --- a/src/es/mesacarlos/webconsole/websocket/command/LogInCommand.java +++ b/src/es/mesacarlos/webconsole/websocket/command/LogInCommand.java @@ -4,9 +4,9 @@ import org.bukkit.Bukkit; import org.java_websocket.WebSocket; import es.mesacarlos.webconsole.auth.LoginManager; -import es.mesacarlos.webconsole.auth.PasswordManager; -import es.mesacarlos.webconsole.auth.User; -import es.mesacarlos.webconsole.auth.UserType; +import es.mesacarlos.webconsole.auth.ConnectedUser; +import es.mesacarlos.webconsole.config.ConfigManager; +import es.mesacarlos.webconsole.config.UserData; import es.mesacarlos.webconsole.util.Internationalization; import es.mesacarlos.webconsole.websocket.WSServer; import es.mesacarlos.webconsole.websocket.response.LoginRequired; @@ -20,28 +20,19 @@ public class LogInCommand implements WSCommand { if (LoginManager.getInstance().isLoggedIn(conn.getRemoteSocketAddress())) return; - //Check user type and login is password is valid - switch(PasswordManager.isValidUser(password)) { - case ADMIN: - login(wsServer, conn, PasswordManager.getAdminUsernameFromPassword(password), UserType.ADMIN); - break; - case VIEWER: - login(wsServer, conn, PasswordManager.getViewerUsernameFromPassword(password), UserType.VIEWER); - break; - default: - wsServer.sendToClient(conn, new LoginRequired(Internationalization.getPhrase("login-failed-message"))); - Bukkit.getLogger().info(Internationalization.getPhrase("login-failed-console", conn.getRemoteSocketAddress())); - break; + //Check if user exists + for(UserData ud : ConfigManager.getInstance().getAllUsers()) { + if(ud.getPassword().equals(password)) { + ConnectedUser user = new ConnectedUser(conn.getRemoteSocketAddress(), ud.getUsername(), ud.getUserType()); + LoginManager.getInstance().logIn(user); + + wsServer.sendToClient(conn, new LoggedIn(Internationalization.getPhrase("login-sucessful-message"), "LOGIN ********", user.getUsername(), user.getUserType())); + Bukkit.getLogger().info(Internationalization.getPhrase("login-sucessful-console", user.toString())); + return; + } } - - } - - 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 LoggedIn(Internationalization.getPhrase("login-sucessful-message"), "LOGIN ********", user.getUsername(), user.getUserType())); - Bukkit.getLogger().info(Internationalization.getPhrase("login-sucessful-console", user.toString())); + wsServer.sendToClient(conn, new LoginRequired(Internationalization.getPhrase("login-failed-message"))); + Bukkit.getLogger().info(Internationalization.getPhrase("login-failed-console", conn.getRemoteSocketAddress())); } } \ No newline at end of file diff --git a/src/es/mesacarlos/webconsole/websocket/response/LoggedIn.java b/src/es/mesacarlos/webconsole/websocket/response/LoggedIn.java index b630484..a2e1210 100644 --- a/src/es/mesacarlos/webconsole/websocket/response/LoggedIn.java +++ b/src/es/mesacarlos/webconsole/websocket/response/LoggedIn.java @@ -2,7 +2,7 @@ package es.mesacarlos.webconsole.websocket.response; import com.google.gson.JsonObject; -import es.mesacarlos.webconsole.auth.UserType; +import es.mesacarlos.webconsole.config.UserType; public class LoggedIn implements JSONOutput{ private String message;