From e3a650a4fc37c9f89487aaf59e6739235032da3a Mon Sep 17 00:00:00 2001 From: simon Date: Fri, 27 Apr 2018 21:59:07 -0400 Subject: [PATCH] Reorganised debug info in account page and extracted user loading to UserManager --- .../java/net/simon987/server/GameServer.java | 13 ++-- .../net/simon987/server/user/UserManager.java | 34 ++++++++++- .../src/main/resources/templates/account.vm | 61 ++++++++++++------- .../main/resources/templates/leaderboard.vm | 4 +- 4 files changed, 76 insertions(+), 36 deletions(-) diff --git a/Server/src/main/java/net/simon987/server/GameServer.java b/Server/src/main/java/net/simon987/server/GameServer.java index d651b70..64ee6c6 100644 --- a/Server/src/main/java/net/simon987/server/GameServer.java +++ b/Server/src/main/java/net/simon987/server/GameServer.java @@ -2,7 +2,6 @@ package net.simon987.server; import com.mongodb.*; -import net.simon987.server.assembly.exception.CancelledException; import net.simon987.server.crypto.CryptoProvider; import net.simon987.server.event.GameEvent; import net.simon987.server.event.GameEventDispatcher; @@ -19,6 +18,7 @@ import net.simon987.server.websocket.SocketServer; import java.io.File; import java.net.UnknownHostException; +import java.util.ArrayList; public class GameServer implements Runnable { @@ -202,7 +202,6 @@ public class GameServer implements Runnable { DB db = mongo.getDB("mar"); DBCollection worlds = db.getCollection("world"); - DBCollection users = db.getCollection("user"); DBCollection server = db.getCollection("server"); BasicDBObject whereQuery = new BasicDBObject(); @@ -215,13 +214,9 @@ public class GameServer implements Runnable { } //Load users - cursor = users.find(); - while (cursor.hasNext()) { - try { - universe.addUser(User.deserialize(cursor.next())); - } catch (CancelledException e) { - e.printStackTrace(); - } + ArrayList userList = userManager.getUsers(); + for (User user : userList) { + universe.addUser(user); } //Load misc server info diff --git a/Server/src/main/java/net/simon987/server/user/UserManager.java b/Server/src/main/java/net/simon987/server/user/UserManager.java index 6e3e743..80dfac4 100644 --- a/Server/src/main/java/net/simon987/server/user/UserManager.java +++ b/Server/src/main/java/net/simon987/server/user/UserManager.java @@ -21,6 +21,11 @@ public class UserManager { userCollection = db.getCollection("user"); } + /** + * Get and deserialise all users from mongo + * + * @return list of de-serialized users + */ public ArrayList getUsers() { ArrayList userList = new ArrayList<>(); @@ -37,6 +42,12 @@ public class UserManager { return userList; } + /** + * Register an user and initialises its controlled unit + * @param username username + * @param password plain password + * @throws RegistrationException is username/password length is invalid + */ public void registerUser(String username, String password) throws RegistrationException { if (username.length() < 5 || username.length() > 20) { @@ -70,6 +81,12 @@ public class UserManager { } } + /** + * Validate a username/password combo + * @param username username + * @param password plain password + * @return true if combo is valid + */ public boolean validateUser(String username, String password) { DBObject where = new BasicDBObject(); @@ -79,6 +96,12 @@ public class UserManager { return user != null && BCrypt.checkpw(password, (String) user.get("password")); } + /** + * Change the password of an user and immediately save it + * @param username Username + * @param newPassword New plain password + * @throws RegistrationException When password length is invalid + */ public void changePassword(String username, String newPassword) throws RegistrationException { if (newPassword.length() < 8 || newPassword.length() > 96) { @@ -111,19 +134,24 @@ public class UserManager { RandomStringGenerator generator = new RandomStringGenerator(128); String token = generator.nextString(); - user.setAccessToken(token); + user.setAccessToken(token); //Token is not saved in DB, and is erased when used LogManager.LOGGER.fine("(Web) Generated access token for " + username); return token; } + /** + * Validate an access token sent by the client + * @param token 128-char accesss token + * @return username of the corresponding user, null if not found + */ public User validateAuthToken(String token) { for (User user : GameServer.INSTANCE.getGameUniverse().getUsers()) { - if (user.getAccessToken().equals(token)) { - user.setAccessToken(""); + if (user.getAccessToken() != null && user.getAccessToken().equals(token)) { + user.setAccessToken(""); //Token is erased when used return user; } diff --git a/Server/src/main/resources/templates/account.vm b/Server/src/main/resources/templates/account.vm index 6269d75..1d31b99 100644 --- a/Server/src/main/resources/templates/account.vm +++ b/Server/src/main/resources/templates/account.vm @@ -49,25 +49,47 @@
-
Debug information
-
-
CPU
-
$user.getCpu()
- -
Controlled unit
-

id: $user.getControlledUnit().getObjectId()

-

energy: $user.getControlledUnit().getEnergy()

-

x: $user.getControlledUnit().getX()

-

y: $user.getControlledUnit().getY()

-

console mode: $user.getControlledUnit().getConsoleMode()

-

kbBuffer size: $user.getControlledUnit().getKeyboardBuffer().size()

- -
World
-
$user.getControlledUnit().getWorld()
- -
User code
-
$user.getUserCode()
+
+
+ Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. + 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt + laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin + coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes + anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings + occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard + of them accusamus labore sustainable VHS. +
+ +

+ +

+ +
+
+

Moderator: $user.isModerator()

+ +
CPU
+
$user.getCpu()
+ +
Controlled unit
+

id: $user.getControlledUnit().getObjectId()

+

energy: $user.getControlledUnit().getEnergy()

+

x: $user.getControlledUnit().getX()

+

y: $user.getControlledUnit().getY()

+

console mode: $user.getControlledUnit().getConsoleMode()

+

kbBuffer size: $user.getControlledUnit().getKeyboardBuffer().size()

+ +
World
+
$user.getControlledUnit().getWorld()
+ +
User code
+
$user.getUserCode()
+
+ +
+ #else ## NOT LOGGED IN
Login
@@ -115,7 +137,4 @@ #parse("footer.vm") - - - \ No newline at end of file diff --git a/Server/src/main/resources/templates/leaderboard.vm b/Server/src/main/resources/templates/leaderboard.vm index d820fbd..b70b5b5 100644 --- a/Server/src/main/resources/templates/leaderboard.vm +++ b/Server/src/main/resources/templates/leaderboard.vm @@ -40,7 +40,5 @@ #parse("footer.vm") - - - + \ No newline at end of file