Skip to content
This repository was archived by the owner on Oct 23, 2025. It is now read-only.

Commit 0e8c8a0

Browse files
committed
Refactor commands + add more commands
1 parent 122a5ea commit 0e8c8a0

17 files changed

Lines changed: 227 additions & 84 deletions

src/main/java/me/vlod/pinto/PintoServer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ public void sendHeartbeat() {
420420

421421
int onlineClients = 0;
422422
for (NetworkHandler client : this.clients) {
423-
if (client.loggedIn && NetHandlerUtils
423+
if (client.userName != null && NetHandlerUtils
424424
.getToOthersStatus(client.databaseEntry.status) != UserStatus.OFFLINE) {
425425
onlineClients++;
426426
}

src/main/java/me/vlod/pinto/Utils.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ public static String[] splitBySpace(String str) {
160160
/**
161161
* Gets a salted MD5 hash from the specified string
162162
*
163-
* @param salt the salt to use
163+
* @param salt the salt to use (can be empty)
164164
* @param content the string to hash
165165
* @return the MD5 hash or empty on error
166166
*/
@@ -174,6 +174,24 @@ public static String getMD5HashFromStr(String salt, String content) {
174174
}
175175
}
176176

177+
178+
/**
179+
* Gets a salted SHA256 hash from the specified string
180+
*
181+
* @param salt the salt to use (can be empty)
182+
* @param content the string to hash
183+
* @return the SHA256 hash or empty on error
184+
*/
185+
public static String getSHA256HashFromStr(String salt, String content) {
186+
try {
187+
MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
188+
messageDigest.update((salt + content).getBytes());
189+
return (new BigInteger(1, messageDigest.digest())).toString(16);
190+
} catch (Exception ex) {
191+
return "";
192+
}
193+
}
194+
177195
/**
178196
* Splits the specified string into chunks<br>
179197
* From <a href="https://stackoverflow.com/a/3760193">https://stackoverflow.com/a/3760193</a>

src/main/java/me/vlod/pinto/consolehandler/ConsoleHandler.java

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,18 @@
88
import me.vlod.pinto.PintoServer;
99
import me.vlod.pinto.Tuple;
1010
import me.vlod.pinto.Utils;
11-
import me.vlod.pinto.consolehandler.commands.BanCMD;
12-
import me.vlod.pinto.consolehandler.commands.BanIPCMD;
13-
import me.vlod.pinto.consolehandler.commands.GetIPCMD;
14-
import me.vlod.pinto.consolehandler.commands.KickCMD;
15-
import me.vlod.pinto.consolehandler.commands.KickIPCMD;
16-
import me.vlod.pinto.consolehandler.commands.NotificationCMD;
17-
import me.vlod.pinto.consolehandler.commands.ReloadCMD;
18-
import me.vlod.pinto.consolehandler.commands.StopCMD;
19-
import me.vlod.pinto.consolehandler.commands.UnbanCMD;
20-
import me.vlod.pinto.consolehandler.commands.UnbanIPCMD;
11+
import me.vlod.pinto.consolehandler.commands.Ban;
12+
import me.vlod.pinto.consolehandler.commands.BanIP;
13+
import me.vlod.pinto.consolehandler.commands.ChangePassword;
14+
import me.vlod.pinto.consolehandler.commands.GetIP;
15+
import me.vlod.pinto.consolehandler.commands.Kick;
16+
import me.vlod.pinto.consolehandler.commands.KickIP;
17+
import me.vlod.pinto.consolehandler.commands.ListUsers;
18+
import me.vlod.pinto.consolehandler.commands.Notification;
19+
import me.vlod.pinto.consolehandler.commands.Reload;
20+
import me.vlod.pinto.consolehandler.commands.Stop;
21+
import me.vlod.pinto.consolehandler.commands.Unban;
22+
import me.vlod.pinto.consolehandler.commands.UnbanIP;
2123

2224
public class ConsoleHandler {
2325
protected PintoServer server;
@@ -28,16 +30,18 @@ public class ConsoleHandler {
2830
public ConsoleHandler(PintoServer server, ConsoleCaller caller) {
2931
this.server = server;
3032
this.caller = caller;
31-
this.commands.add(new BanCMD());
32-
this.commands.add(new BanIPCMD());
33-
this.commands.add(new GetIPCMD());
34-
this.commands.add(new KickCMD());
35-
this.commands.add(new KickIPCMD());
36-
this.commands.add(new ReloadCMD());
37-
this.commands.add(new UnbanCMD());
38-
this.commands.add(new UnbanIPCMD());
39-
this.commands.add(new StopCMD());
40-
this.commands.add(new NotificationCMD());
33+
this.commands.add(new Ban());
34+
this.commands.add(new BanIP());
35+
this.commands.add(new GetIP());
36+
this.commands.add(new Kick());
37+
this.commands.add(new KickIP());
38+
this.commands.add(new Reload());
39+
this.commands.add(new Unban());
40+
this.commands.add(new UnbanIP());
41+
this.commands.add(new Stop());
42+
this.commands.add(new ListUsers());
43+
this.commands.add(new Notification());
44+
this.commands.add(new ChangePassword());
4145
}
4246

4347
public void handleInput(String input) {

src/main/java/me/vlod/pinto/consolehandler/commands/BanCMD.java renamed to src/main/java/me/vlod/pinto/consolehandler/commands/Ban.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import me.vlod.pinto.consolehandler.ConsoleCaller;
55
import me.vlod.pinto.consolehandler.ConsoleCommand;
66

7-
public class BanCMD implements ConsoleCommand {
7+
public class Ban implements ConsoleCommand {
88
@Override
99
public String getName() {
1010
return "ban";

src/main/java/me/vlod/pinto/consolehandler/commands/BanIPCMD.java renamed to src/main/java/me/vlod/pinto/consolehandler/commands/BanIP.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
import me.vlod.pinto.consolehandler.ConsoleCaller;
55
import me.vlod.pinto.consolehandler.ConsoleCommand;
66

7-
public class BanIPCMD implements ConsoleCommand {
7+
public class BanIP implements ConsoleCommand {
88
@Override
99
public String getName() {
10-
return "banip";
10+
return "ban-ip";
1111
}
1212

1313
@Override
@@ -17,7 +17,7 @@ public String getDescription() {
1717

1818
@Override
1919
public String getUsage() {
20-
return "banip <ip> <reason>";
20+
return "ban-ip <ip> <reason>";
2121
}
2222

2323
@Override
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package me.vlod.pinto.consolehandler.commands;
2+
3+
import me.vlod.pinto.PintoServer;
4+
import me.vlod.pinto.UserDatabaseEntry;
5+
import me.vlod.pinto.Utils;
6+
import me.vlod.pinto.consolehandler.ConsoleCaller;
7+
import me.vlod.pinto.consolehandler.ConsoleCommand;
8+
import me.vlod.pinto.networking.NetworkHandler;
9+
10+
public class ChangePassword implements ConsoleCommand {
11+
@Override
12+
public String getName() {
13+
return "change-password";
14+
}
15+
16+
@Override
17+
public String getDescription() {
18+
return "Changes a user's password, they will be kicked";
19+
}
20+
21+
@Override
22+
public String getUsage() {
23+
return "change-password <user> <new password>";
24+
}
25+
26+
@Override
27+
public int getMinArgsCount() {
28+
return 2;
29+
}
30+
31+
@Override
32+
public int getMaxArgsCount() {
33+
return 2;
34+
}
35+
36+
@Override
37+
public void execute(PintoServer server, ConsoleCaller caller, String[] args) throws Exception {
38+
String user = args[0];
39+
String password = args[1];
40+
41+
if (!UserDatabaseEntry.isRegistered(server, user)) {
42+
PintoServer.logger.error("The account %s is not registered", user);
43+
return;
44+
}
45+
46+
UserDatabaseEntry userDatabaseEntry = new UserDatabaseEntry(server, user);
47+
userDatabaseEntry.load();
48+
userDatabaseEntry.passwordHash = Utils.getSHA256HashFromStr("", password);
49+
userDatabaseEntry.save();
50+
PintoServer.logger.info("Successfully changed %s's password", user);
51+
52+
NetworkHandler netHandler = server.getHandlerByName(user);
53+
if (netHandler != null) {
54+
netHandler.kick("Your password has been modified!");
55+
}
56+
}
57+
}

src/main/java/me/vlod/pinto/consolehandler/commands/GetIPCMD.java renamed to src/main/java/me/vlod/pinto/consolehandler/commands/GetIP.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
import me.vlod.pinto.consolehandler.ConsoleCommand;
66
import me.vlod.pinto.networking.NetworkHandler;
77

8-
public class GetIPCMD implements ConsoleCommand {
8+
public class GetIP implements ConsoleCommand {
99
@Override
1010
public String getName() {
11-
return "getip";
11+
return "get-ip";
1212
}
1313

1414
@Override
@@ -18,7 +18,7 @@ public String getDescription() {
1818

1919
@Override
2020
public String getUsage() {
21-
return "getip <user>";
21+
return "get-ip <user>";
2222
}
2323

2424
@Override

src/main/java/me/vlod/pinto/consolehandler/commands/KickCMD.java renamed to src/main/java/me/vlod/pinto/consolehandler/commands/Kick.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import me.vlod.pinto.consolehandler.ConsoleCommand;
66
import me.vlod.pinto.networking.NetworkHandler;
77

8-
public class KickCMD implements ConsoleCommand {
8+
public class Kick implements ConsoleCommand {
99
@Override
1010
public String getName() {
1111
return "kick";

src/main/java/me/vlod/pinto/consolehandler/commands/KickIPCMD.java renamed to src/main/java/me/vlod/pinto/consolehandler/commands/KickIP.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
import me.vlod.pinto.consolehandler.ConsoleCommand;
66
import me.vlod.pinto.networking.NetworkHandler;
77

8-
public class KickIPCMD implements ConsoleCommand {
8+
public class KickIP implements ConsoleCommand {
99
@Override
1010
public String getName() {
11-
return "kickip";
11+
return "kick-ip";
1212
}
1313

1414
@Override
@@ -18,7 +18,7 @@ public String getDescription() {
1818

1919
@Override
2020
public String getUsage() {
21-
return "kickip <user> <reason>";
21+
return "kick-ip <user> <reason>";
2222
}
2323

2424
@Override
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package me.vlod.pinto.consolehandler.commands;
2+
3+
import me.vlod.pinto.PintoServer;
4+
import me.vlod.pinto.configuration.MainConfig;
5+
import me.vlod.pinto.consolehandler.ConsoleCaller;
6+
import me.vlod.pinto.consolehandler.ConsoleCommand;
7+
import me.vlod.pinto.networking.NetworkHandler;
8+
9+
public class ListUsers implements ConsoleCommand {
10+
@Override
11+
public String getName() {
12+
return "list-users";
13+
}
14+
15+
@Override
16+
public String getDescription() {
17+
return "Lists all connected users";
18+
}
19+
20+
@Override
21+
public String getUsage() {
22+
return "list-users";
23+
}
24+
25+
@Override
26+
public int getMinArgsCount() {
27+
return 0;
28+
}
29+
30+
@Override
31+
public int getMaxArgsCount() {
32+
return 0;
33+
}
34+
35+
@Override
36+
public void execute(PintoServer server, ConsoleCaller caller, String[] args) throws Exception {
37+
PintoServer.logger.info("There are %d clients out of the max of %d connected%s",
38+
server.clients.size(), MainConfig.instance.maxUsers, server.clients.size() > 0 ? ":" : "");
39+
40+
for (NetworkHandler client : server.clients.toArray(new NetworkHandler[0])) {
41+
PintoServer.logger.info("- %s (%s)", client.networkAddress,
42+
client.userName != null ? client.userName : "** UNAUTHENTICATED **");
43+
}
44+
}
45+
}

0 commit comments

Comments
 (0)