Security changes: placement verification, banning, unfinished admins

This commit is contained in:
Anuken
2018-02-25 22:32:12 -05:00
parent 9985a19e6a
commit 9f5f6ae382
33 changed files with 1038 additions and 520 deletions

View File

@@ -38,7 +38,12 @@ public class ServerControl extends Module {
private ShuffleMode mode;
public ServerControl(){
Settings.defaults("shufflemode", "normal");
Settings.defaultList(
"shufflemode", "normal",
"bans", "",
"admins", ""
);
mode = ShuffleMode.valueOf(Settings.getString("shufflemode"));
Effects.setScreenShakeProvider((a, b) -> {});
@@ -184,6 +189,21 @@ public class ServerControl extends Module {
}
});
handler.register("players", "Display player info.", arg -> {
if(state.is(State.menu)){
info("&lyServer is closed.");
}else{
if(playerGroup.size() > 0) {
info("&lyPlayers: {0}", playerGroup.size());
for (Player p : playerGroup.all()) {
print(" &y{0} / Connection {1} / IP: {2}", p.name, p.clientid, Net.getConnection(p.clientid).address);
}
}else{
info("&lyNo players connected.");
}
}
});
handler.register("say", "<message...>", "Send a message to all players.", arg -> {
if(!state.is(State.playing)) {
err("Not hosting. Host a game first.");
@@ -237,11 +257,6 @@ public class ServerControl extends Module {
return;
}
if(playerGroup.size() == 0){
err("But this server is empty. A barren wasteland.");
return;
}
Player target = null;
for(Player player : playerGroup.all()){
@@ -259,6 +274,130 @@ public class ServerControl extends Module {
}
});
handler.register("ban", "<username>", "Ban a person by name.", arg -> {
if(!state.is(State.playing)) {
err("Can't ban people by name with no players.");
return;
}
Player target = null;
for(Player player : playerGroup.all()){
if(player.name.equalsIgnoreCase(arg[0])){
target = player;
break;
}
}
if(target != null){
String ip = Net.getConnection(player.clientid).address;
netServer.admins.banPlayer(ip);
Net.kickConnection(target.clientid, KickReason.banned);
info("Banned player by IP: {0}", ip);
}else{
info("Nobody with that name could be found.");
}
});
handler.register("bans", "List all banned IPs.", arg -> {
Array<String> bans = netServer.admins.getBanned();
if(bans.size == 0){
Log.info("No banned players have been found.");
}else{
Log.info("&lyBanned players:");
for(String string : bans){
Log.info(" &luy {0} / Last known name: '{1}'", string, netServer.admins.getLastName(string));
}
}
});
handler.register("banip", "<ip>", "Ban a person by IP.", arg -> {
if(netServer.admins.banPlayer(arg[0])) {
info("Banned player by IP: {0}.", arg[0]);
for(Player player : playerGroup.all()){
if(Net.getConnection(player.clientid).address.equals(arg[0])){
Net.kickConnection(player.clientid, KickReason.banned);
break;
}
}
}else{
err("That IP is already banned!");
}
});
handler.register("unbanip", "<ip>", "Unban a person by IP.", arg -> {
if(netServer.admins.unbanPlayer(arg[0])) {
info("Unbanned player by IP: {0}.", arg[0]);
}else{
err("That IP is not banned!");
}
});
//assadsad
handler.register("admin", "<username>", "Make a user admin", arg -> {
if(!state.is(State.playing)) {
err("Open the server first.");
return;
}
Player target = null;
for(Player player : playerGroup.all()){
if(player.name.equalsIgnoreCase(arg[0])){
target = player;
break;
}
}
if(target != null){
String ip = Net.getConnection(player.clientid).address;
netServer.admins.adminPlayer(ip);
info("Admin-ed player by IP: {0} / {1}", ip, arg[0]);
}else{
info("Nobody with that name could be found.");
}
});
handler.register("unadmin", "<username>", "Removes admin status from a player", arg -> {
if(!state.is(State.playing)) {
err("Open the server first.");
return;
}
Player target = null;
for(Player player : playerGroup.all()){
if(player.name.equalsIgnoreCase(arg[0])){
target = player;
break;
}
}
if(target != null){
String ip = Net.getConnection(player.clientid).address;
netServer.admins.unAdminPlayer(ip);
info("Un-admin-ed player by IP: {0} / {1}", ip, arg[0]);
}else{
info("Nobody with that name could be found.");
}
});
handler.register("admins", "List all banned IPs.", arg -> {
Array<String> admins = netServer.admins.getAdmins();
if(admins.size == 0){
Log.info("No admins have been found.");
}else{
Log.info("&lyAdmins:");
for(String string : admins){
Log.info(" &luy {0} / Name: '{1}'", string, netServer.admins.getLastName(string));
}
}
});
handler.register("runwave", "Trigger the next wave.", arg -> {
if(!state.is(State.playing)) {
err("Not hosting. Host a game first.");