From 02a88f53da92f93a5ffa9f952e8d06e84bd7b6f9 Mon Sep 17 00:00:00 2001 From: pauljako Date: Sat, 7 Jun 2025 14:54:38 +0200 Subject: [PATCH] feat(Access): added access list --- .../cosmeticserver/CosmeticServer.java | 20 +++++++++++++++++++ .../cosmeticserver/CosmeticSocket.java | 16 ++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/pauljako/cosmeticserver/CosmeticServer.java b/src/main/java/de/pauljako/cosmeticserver/CosmeticServer.java index 5084355..aa027e7 100644 --- a/src/main/java/de/pauljako/cosmeticserver/CosmeticServer.java +++ b/src/main/java/de/pauljako/cosmeticserver/CosmeticServer.java @@ -3,12 +3,14 @@ package de.pauljako.cosmeticserver; import de.craftsblock.craftsnet.addon.Addon; import java.io.File; +import java.io.IOException; public class CosmeticServer extends Addon { private static CosmeticServer instance; public File cosmeticFile; + public File accessFile; private Thread thread; public static CosmeticServer instance() { @@ -25,6 +27,24 @@ public class CosmeticServer extends Addon { cosmeticFile = new File(getDataFolder(), "cosmetics.json"); + if (!cosmeticFile.exists()) { + try { + cosmeticFile.createNewFile(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + accessFile = new File(getDataFolder(), "access.json"); + + if (!accessFile.exists()) { + try { + accessFile.createNewFile(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + routeRegistry().share("/v1/cosmetic/assets", assets); CosmeticSocket socket = new CosmeticSocket(); diff --git a/src/main/java/de/pauljako/cosmeticserver/CosmeticSocket.java b/src/main/java/de/pauljako/cosmeticserver/CosmeticSocket.java index e98eed4..e439e36 100644 --- a/src/main/java/de/pauljako/cosmeticserver/CosmeticSocket.java +++ b/src/main/java/de/pauljako/cosmeticserver/CosmeticSocket.java @@ -15,6 +15,7 @@ import de.craftsblock.craftsnet.api.websocket.annotations.Socket; import de.craftsblock.craftsnet.events.sockets.ClientDisconnectEvent; import java.io.IOException; +import java.util.Collection; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; @@ -79,7 +80,9 @@ public class CosmeticSocket implements SocketHandler, ListenerAdapter { UUID uuid = UUID.fromString(data.getString("uuid")); ConcurrentHashMap cosmetics = new ConcurrentHashMap<>(); - data.get("cosmetics").getAsJsonObject().entrySet().forEach(entry -> cosmetics.put(entry.getKey(), entry.getValue())); + data.get("cosmetics").getAsJsonObject().entrySet().forEach(entry -> { + if (isAllowedToHaveCosmetic(entry.getKey(), entry.getValue().toString(), uuid.toString())) cosmetics.put(entry.getKey(), entry.getValue()); + }); ClientMapping mapping = new ClientMapping(uuid, cosmetics); exchange.broadcast(JsonParser.parse("{}").set("uuid", uuid.toString()).set("cosmetics", bakeData(cosmetics)).toString()); @@ -147,6 +150,17 @@ public class CosmeticSocket implements SocketHandler, ListenerAdapter { return object.getObject(); } + private boolean isAllowedToHaveCosmetic(String type, String value, String uuid) { + Json access = JsonParser.parse(CosmeticServer.instance().accessFile); + + String path = type.replace(".", "\\.") + "." + value.replace(".", "\\."); + if (!access.contains(type.replace(".", "\\.")) || !access.contains(path)) return true; + + Collection allowedUUIDs = access.getStringList(path); + + return allowedUUIDs.contains(uuid.toUpperCase()); + } + @EventHandler public void handleDisconnect(ClientDisconnectEvent event) { WebSocketClient client = event.getExchange().client();