Add UI to punishments page

This commit is contained in:
Telesphoreo 2022-04-12 17:39:16 -05:00
parent 52a4264192
commit a229e8f470
3 changed files with 95 additions and 34 deletions

View file

@ -35,6 +35,7 @@ public class HTTPDModule extends PlexModule
@Override @Override
public void load() public void load()
{ {
//moduleConfig = new ModuleConfig(this, this.getClass().getClassLoader().getResource("settings.yml").getFile());
moduleConfig = new ModuleConfig(this, "settings.yml"); moduleConfig = new ModuleConfig(this, "settings.yml");
} }

View file

@ -11,6 +11,9 @@ import dev.plex.request.GetMapping;
import dev.plex.util.PlexLog; import dev.plex.util.PlexLog;
import dev.plex.util.adapter.LocalDateTimeSerializer; import dev.plex.util.adapter.LocalDateTimeSerializer;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
@ -29,46 +32,87 @@ public class PunishmentsEndpoint extends AbstractServlet
} }
if (request.getPathInfo() == null) if (request.getPathInfo() == null)
{ {
return "Please specify the UUID of the player you would like to check.\nExample: /api/punishments/<uuid>"; /*StringBuilder contentBuilder = new StringBuilder();
PlexLog.log(this.getClass().getClassLoader().getResource("punishments.html").getPath());
try
{
BufferedReader in = new BufferedReader(new FileReader(this.getClass().getClassLoader().getResource("punishments.html").getFile().replace("!", "")));
String str;
while ((str = in.readLine()) != null)
{
contentBuilder.append(str);
}
in.close();
}
catch (IOException ignored)
{
}
return contentBuilder.toString();*/
return """
<!DOCTYPE html>
<body>
<div style="text-align: center;">
<h2 style="font-family:Helvetica">Enter the UUID or username of the player you want to check</h2>
<input id="test" type="text" autofocus>
<button type="button" onclick="redirect()">Submit</button>
<script>
function redirect() {
var url = document.getElementById('test').value
window.location = "punishments/" + url
}
</script>
</div>
</body>
</html>""";
} }
UUID pathUUID;
String pathPlexPlayer;
PlexPlayer punishedPlayer;
try try
{ {
UUID uuid = UUID.fromString(request.getPathInfo().replace("/", "")); pathUUID = UUID.fromString(request.getPathInfo().replace("/", ""));
final PlexPlayer punishedPlayer = DataUtils.getPlayer(uuid); punishedPlayer = DataUtils.getPlayer(pathUUID);
final PlexPlayer player = DataUtils.getPlayerByIP(ipAddress);
if (punishedPlayer.getPunishments().isEmpty())
{
return "This player has been a good boy. They have no punishments! Or they've never been on the server before. Take your pick.";
}
if (player == null)
{
// If the player is null, give it to them without the IPs
return new GsonBuilder().registerTypeAdapter(LocalDateTime.class, new LocalDateTimeSerializer()).setPrettyPrinting().create().toJson(punishedPlayer.getPunishments().stream().peek(punishment -> punishment.setIp("")).toList());
}
if (Plex.get().getSystem().equalsIgnoreCase("ranks"))
{
PlexLog.debug("Plex-HTTPD using ranks check");
if (!player.getRankFromString().isAtLeast(Rank.ADMIN))
{
// Don't return IPs either if the person is not an Admin or above.
return new GsonBuilder().registerTypeAdapter(LocalDateTime.class, new LocalDateTimeSerializer()).setPrettyPrinting().create().toJson(punishedPlayer.getPunishments().stream().peek(punishment -> punishment.setIp("")).toList());
}
}
else if (Plex.get().getSystem().equalsIgnoreCase("permissions"))
{
PlexLog.debug("Plex-HTTPD using permissions check");
final OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(player.getUuid());
if (!HTTPDModule.getPermissions().playerHas(null, offlinePlayer, "plex.httpd.punishments.access"))
{
// If the person doesn't have permission, don't return IPs
return new GsonBuilder().registerTypeAdapter(LocalDateTime.class, new LocalDateTimeSerializer()).setPrettyPrinting().create().toJson(punishedPlayer.getPunishments().stream().peek(punishment -> punishment.setIp("")).toList());
}
}
return new GsonBuilder().registerTypeAdapter(LocalDateTime.class, new LocalDateTimeSerializer()).setPrettyPrinting().create().toJson(punishedPlayer.getPunishments().stream().toList());
} }
catch (java.lang.IllegalArgumentException ignored) catch (java.lang.IllegalArgumentException ignored)
{ {
return "Invalid UUID"; pathPlexPlayer = request.getPathInfo().replace("/", "");
punishedPlayer = DataUtils.getPlayer(pathPlexPlayer);
} }
final PlexPlayer player = DataUtils.getPlayerByIP(ipAddress);
if (punishedPlayer == null)
{
return "This player has never joined the server before.";
}
if (punishedPlayer.getPunishments().isEmpty())
{
return "This player has been a good boy. They have no punishments!";
}
if (player == null)
{
// If the player is null, give it to them without the IPs
return new GsonBuilder().registerTypeAdapter(LocalDateTime.class, new LocalDateTimeSerializer()).setPrettyPrinting().create().toJson(punishedPlayer.getPunishments().stream().peek(punishment -> punishment.setIp("")).toList());
}
if (Plex.get().getSystem().equalsIgnoreCase("ranks"))
{
PlexLog.debug("Plex-HTTPD using ranks check");
if (!player.getRankFromString().isAtLeast(Rank.ADMIN))
{
// Don't return IPs either if the person is not an Admin or above.
return new GsonBuilder().registerTypeAdapter(LocalDateTime.class, new LocalDateTimeSerializer()).setPrettyPrinting().create().toJson(punishedPlayer.getPunishments().stream().peek(punishment -> punishment.setIp("")).toList());
}
}
else if (Plex.get().getSystem().equalsIgnoreCase("permissions"))
{
PlexLog.debug("Plex-HTTPD using permissions check");
final OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(player.getUuid());
if (!HTTPDModule.getPermissions().playerHas(null, offlinePlayer, "plex.httpd.punishments.access"))
{
// If the person doesn't have permission, don't return IPs
return new GsonBuilder().registerTypeAdapter(LocalDateTime.class, new LocalDateTimeSerializer()).setPrettyPrinting().create().toJson(punishedPlayer.getPunishments().stream().peek(punishment -> punishment.setIp("")).toList());
}
}
return new GsonBuilder().registerTypeAdapter(LocalDateTime.class, new LocalDateTimeSerializer()).setPrettyPrinting().create().toJson(punishedPlayer.getPunishments().stream().toList());
} }
} }

View file

@ -0,0 +1,16 @@
<!DOCTYPE html>
<body>
<div style="text-align: center;">
<h2 style="font-family:Helvetica">Enter the UUID or username of the player you want to check</h2>
<input id="test" type="text" autofocus>
<button type="button" onclick="redirect()">Submit</button>
<script>
function redirect() {
var url = document.getElementById('test').value
window.location = "punishments/" + url
}
</script>
</div>
</body>
</html>