diff --git a/Server/src/main/java/net/simon987/server/Main.java b/Server/src/main/java/net/simon987/server/Main.java index 6f4f910..9aadfa3 100644 --- a/Server/src/main/java/net/simon987/server/Main.java +++ b/Server/src/main/java/net/simon987/server/Main.java @@ -99,7 +99,7 @@ public class Main { if (username != null && password != null) { if (GameServer.INSTANCE.getUserManager().validateUser(username, password)) { - AlertMessage[] messages = {new AlertMessage("Logged in as " + username, AlertType.INFO)}; + AlertMessage[] messages = {new AlertMessage("Logged in as " + username, AlertType.SUCCESS)}; request.session().attribute("messages", messages); request.session().attribute("username", username); @@ -124,6 +124,40 @@ public class Main { return null; }); + Spark.post("change_password", (request, response) -> { + + String username = request.session().attribute("username"); + String currentPassword = request.queryParams("password"); + String newPassword = request.queryParams("new_password"); + String newPasswordRepeat = request.queryParams("new_password_repeat"); + + if (newPassword.equals(newPasswordRepeat)) { + + if (username != null && GameServer.INSTANCE.getUserManager().validateUser(username, currentPassword)) { + + try { + GameServer.INSTANCE.getUserManager().changePassword(username, newPassword); + AlertMessage[] messages = {new AlertMessage("Changed password", AlertType.SUCCESS)}; + request.session().attribute("messages", messages); + } catch (RegistrationException e) { + AlertMessage[] messages = {new AlertMessage(e.getMessage(), AlertType.DANGER)}; + request.session().attribute("messages", messages); + } + + } else { + AlertMessage[] messages = {new AlertMessage("Invalid password", AlertType.DANGER)}; + request.session().attribute("messages", messages); + } + } else { + AlertMessage[] messages = {new AlertMessage("Passwords did not match", AlertType.DANGER)}; + request.session().attribute("messages", messages); + } + + + response.redirect("/account"); + return null; + }); + Spark.after((request, response) -> response.header("Content-Encoding", "gzip")); } 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 7f0d442..6b1888b 100644 --- a/Server/src/main/java/net/simon987/server/user/UserManager.java +++ b/Server/src/main/java/net/simon987/server/user/UserManager.java @@ -76,4 +76,19 @@ public class UserManager { DBObject user = userCollection.findOne(where); return user != null && BCrypt.checkpw(password, (String) user.get("password")); } + + public void changePassword(String username, String newPassword) throws RegistrationException { + + if (newPassword.length() < 8 || newPassword.length() > 96) { + throw new RegistrationException("Password must be 8-96 characters"); + } + + User user = GameServer.INSTANCE.getGameUniverse().getUser(username); + + String salt = BCrypt.gensalt(); + String hashedPassword = BCrypt.hashpw(newPassword, salt); + user.setPassword(hashedPassword); + + userCollection.save(user.mongoSerialise()); //Save new password immediately + } } diff --git a/Server/src/main/resources/static/css/mar.css b/Server/src/main/resources/static/css/mar.css index e3967f4..8adac7a 100644 --- a/Server/src/main/resources/static/css/mar.css +++ b/Server/src/main/resources/static/css/mar.css @@ -80,3 +80,11 @@ flex: 0 0 16.66667%; max-width: 16.66667%; } + +.col-sm-3 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 25%; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; +} \ No newline at end of file diff --git a/Server/src/main/resources/templates/account.vm b/Server/src/main/resources/templates/account.vm index 9bbdbfd..6269d75 100644 --- a/Server/src/main/resources/templates/account.vm +++ b/Server/src/main/resources/templates/account.vm @@ -15,6 +15,7 @@ #if($session.attribute("username")) ## ALREADY LOGGED IN

Logged in as $session.attribute("username")

+ eject Logout
@@ -38,12 +39,12 @@
+ name="new_password_repeat" class="form-control">
- +
@@ -53,9 +54,6 @@
CPU
$user.getCpu()
-
Code
-
$user.getUserCode()
-
Controlled unit

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

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

@@ -63,8 +61,12 @@

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 diff --git a/Server/src/main/resources/templates/home.vm b/Server/src/main/resources/templates/home.vm index 78cd6e9..8f91014 100644 --- a/Server/src/main/resources/templates/home.vm +++ b/Server/src/main/resources/templates/home.vm @@ -43,8 +43,8 @@
Free and open source
-

The project's source code and the game's documentation are available on - GitHub.

+

The project's source code and the game's documentation are + available on GitHub

diff --git a/Server/src/main/resources/templates/play.vm b/Server/src/main/resources/templates/play.vm index 5f23b19..3ebd443 100644 --- a/Server/src/main/resources/templates/play.vm +++ b/Server/src/main/resources/templates/play.vm @@ -114,24 +114,24 @@ -
+
-
-
-