Skip to content

Commit

Permalink
Expand on the API for restricted servers
Browse files Browse the repository at this point in the history
  • Loading branch information
ME1312 committed Jan 10, 2019
1 parent 16480af commit 6218b87
Show file tree
Hide file tree
Showing 17 changed files with 395 additions and 62 deletions.
Expand Up @@ -6,7 +6,7 @@
import java.lang.reflect.Field;

/**
* Executable String Handler Class
* Executable Handler Class
*/
public class Executable {
private Executable() {}
Expand Down
Expand Up @@ -4,6 +4,7 @@
import net.ME1312.SubServers.Bungee.Library.NamedContainer;
import net.ME1312.SubServers.Bungee.Network.ClientHandler;
import net.md_5.bungee.api.config.ServerInfo;
import net.md_5.bungee.api.connection.ProxiedPlayer;

import java.util.Collection;
import java.util.List;
Expand Down Expand Up @@ -98,6 +99,57 @@ public interface Server extends ServerInfo, ClientHandler, ExtraDataHandler {
*/
void setRestricted(boolean value);

/**
* Get a copy of the current whitelist
*
* @return Player Whitelist
*/
Collection<UUID> getWhitelist();

/**
* See if a player is whitelisted
*
* @param player Player to check
* @return Whitelisted Status
*/
boolean isWhitelisted(ProxiedPlayer player);

/**
* See if a player is whitelisted
*
* @param player Player to check
* @return Whitelisted Status
*/
boolean isWhitelisted(UUID player);

/**
* Add a player to the whitelist (for use with restricted servers)
*
* @param player Player to add
*/
void whitelist(ProxiedPlayer player);

/**
* Add a player to the whitelist (for use with restricted servers)
*
* @param player Player to add
*/
void whitelist(UUID player);

/**
* Remove a player to the whitelist
*
* @param player Player to remove
*/
void unwhitelist(ProxiedPlayer player);

/**
* Remove a player to the whitelist
*
* @param player Player to remove
*/
void unwhitelist(UUID player);

/**
* Get the Signature of this Object
*
Expand Down
Expand Up @@ -9,11 +9,13 @@
import net.ME1312.SubServers.Bungee.Library.NamedContainer;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.SubServers.Bungee.Network.Packet.PacketOutExUpdateWhitelist;
import net.ME1312.SubServers.Bungee.Network.Packet.PacketOutRunEvent;
import net.ME1312.SubServers.Bungee.Network.SubDataServer;
import net.ME1312.SubServers.Bungee.SubAPI;
import net.ME1312.SubServers.Bungee.SubPlugin;
import net.md_5.bungee.BungeeServerInfo;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.connection.ProxiedPlayer;

import java.lang.reflect.Field;
Expand All @@ -25,11 +27,12 @@
*/
public class ServerContainer extends BungeeServerInfo implements Server {
private YAMLSection extra = new YAMLSection();
private final String signature;
private Client client = null;
private List<String> groups = new ArrayList<String>();
private String nick = null;
private List<String> groups = new ArrayList<String>();
private List<UUID> whitelist = new ArrayList<UUID>();
private boolean hidden;
private final String signature;

public ServerContainer(String name, InetSocketAddress address, String motd, boolean hidden, boolean restricted) throws InvalidServerException {
super(name, address, motd, restricted);
Expand Down Expand Up @@ -153,6 +156,56 @@ public void setRestricted(boolean value) {
}
}

@Override
public Collection<UUID> getWhitelist() {
return new ArrayList<UUID>(whitelist);
}

/**
* See if a player can access this server
*
* @param player Player
* @return Whitelisted Status
*/
@Override
public boolean canAccess(CommandSender player) {
return (player instanceof ProxiedPlayer && whitelist.contains(((ProxiedPlayer) player).getUniqueId())) || super.canAccess(player);
}

@Override
public boolean isWhitelisted(ProxiedPlayer player) {
return isWhitelisted(player.getUniqueId());
}

@Override
public boolean isWhitelisted(UUID player) {
return whitelist.contains(player);
}

@Override
public void whitelist(ProxiedPlayer player) {
whitelist(player.getUniqueId());
}

@Override
public void whitelist(UUID player) {
if (Util.isNull(player)) throw new NullPointerException();
whitelist.add(player);
for (Proxy proxy : SubAPI.getInstance().getProxies().values()) if (proxy.getSubData() != null) proxy.getSubData().sendPacket(new PacketOutExUpdateWhitelist(getName(), true, player));
}

@Override
public void unwhitelist(ProxiedPlayer player) {
unwhitelist(player.getUniqueId());
}

@Override
public void unwhitelist(UUID player) {
if (Util.isNull(player)) throw new NullPointerException();
whitelist.remove(player);
for (Proxy proxy : SubAPI.getInstance().getProxies().values()) if (proxy.getSubData() != null) proxy.getSubData().sendPacket(new PacketOutExUpdateWhitelist(getName(), false, player));
}

@Override
public final String getSignature() {
return signature;
Expand Down Expand Up @@ -196,6 +249,7 @@ public String toString() {
info.set("group", getGroups());
info.set("address", getAddress().getAddress().getHostAddress() + ':' + getAddress().getPort());
info.set("motd", getMotd());
info.set("whitelist", whitelist);
info.set("restricted", isRestricted());
info.set("hidden", isHidden());
if (getSubData() != null) info.set("subdata", getSubData().getAddress().toString());
Expand Down
Expand Up @@ -9,48 +9,50 @@
import java.net.URLClassLoader;

/**
* Load JNA Library
* JNA Library Loader Class
*/
public class JNA {
private JNA() {}
private static ClassLoader JNA = null;
private static final String JNA_VERSION = "5.2.0";
private static final String JNA_DOWNLOAD = "https://oss.sonatype.org/service/local/repositories/releases/content/net/java/dev/jna/$1/" + JNA_VERSION + "/$1-" + JNA_VERSION + ".jar";

/**
* Get/Load JNA Library
*
* @return JNA ClassLoader
*/
@SuppressWarnings("deprecation")
public static ClassLoader get() {
if (JNA == null) {
boolean announced = false;
UniversalFile library = new UniversalFile(SubAPI.getInstance().getInternals().dir, "SubServers:Cache:Libraries");
library.mkdirs();
UniversalFile jna = new UniversalFile(library, "jna-" + JNA_VERSION + ".jar");
jna.getParentFile().mkdirs();
if (!jna.exists()) {
jna.getParentFile().mkdirs();
if (!jna.exists()) {
System.out.println(">> Downloading JNA Library v" + JNA_VERSION);
try (FileOutputStream fin = new FileOutputStream(jna)) {
Resources.copy(new URL(JNA_DOWNLOAD.replace("$1", "jna")), fin);
} catch (Throwable e) {
jna.delete();
e.printStackTrace();
}
announced = true;
announced = true;
System.out.println(">> Downloading JNA Library v" + JNA_VERSION);
try (FileOutputStream fin = new FileOutputStream(jna)) {
Resources.copy(new URL(JNA_DOWNLOAD.replace("$1", "jna")), fin);
} catch (Throwable e) {
jna.delete();
e.printStackTrace();
}
}
UniversalFile platform = new UniversalFile(library, "jna-platform-" + JNA_VERSION + ".jar");
platform.getParentFile().mkdirs();
if (!platform.exists()) {
platform.getParentFile().mkdirs();
if (!platform.exists()) {
if (!announced) System.out.println(">> Downloading JNA Library v" + JNA_VERSION);
try (FileOutputStream fin = new FileOutputStream(platform)) {
Resources.copy(new URL(JNA_DOWNLOAD.replace("$1", "jna-platform")), fin);
} catch (Throwable e) {
platform.delete();
e.printStackTrace();
}
if (!announced) System.out.println(">> Downloading JNA Library v" + JNA_VERSION);
announced = true;
try (FileOutputStream fin = new FileOutputStream(platform)) {
Resources.copy(new URL(JNA_DOWNLOAD.replace("$1", "jna-platform")), fin);
} catch (Throwable e) {
platform.delete();
e.printStackTrace();
}
}
if (jna.exists()) {
System.out.println(">> Loading JNA Library");
if (announced) System.out.println(">> Loading JNA Library");
try {
JNA = new URLClassLoader(new URL[]{jna.toURI().toURL(), platform.toURI().toURL()});
} catch (Throwable e) {
Expand Down
@@ -0,0 +1,44 @@
package net.ME1312.SubServers.Bungee.Network.Packet;

import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.PacketOut;

import java.util.UUID;

/**
* Update External Whitelist Packet
*/
public class PacketOutExUpdateWhitelist implements PacketOut {
private String name;
private boolean mode;
private UUID value;

/**
* New PacketOutExUpdateWhitelist
*
* @param name Server Name
* @param mode Update Mode (true for add, false for remove)
* @param value Whitelist Value
*/
public PacketOutExUpdateWhitelist(String name, boolean mode, UUID value) {
if (Util.isNull(name, mode, value)) throw new NullPointerException();
this.name = name;
this.mode = mode;
this.value = value;
}

@Override
public YAMLSection generate() {
YAMLSection data = new YAMLSection();
data.set("server", name);
data.set("mode", mode);
data.set("value", value);
return data;
}
@Override
public Version getVersion() {
return new Version("2.13.2c");
}
}
@@ -1,7 +1,6 @@
package net.ME1312.SubServers.Bungee.Network;

import com.dosse.upnp.UPnP;
import com.google.gson.Gson;
import net.ME1312.SubServers.Bungee.Event.SubNetworkConnectEvent;
import net.ME1312.SubServers.Bungee.Event.SubNetworkDisconnectEvent;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
Expand All @@ -12,14 +11,11 @@
import net.ME1312.SubServers.Bungee.Network.Encryption.AES;
import net.ME1312.SubServers.Bungee.Network.Packet.*;
import net.ME1312.SubServers.Bungee.SubPlugin;
import org.msgpack.core.MessagePack;
import org.msgpack.value.Value;
import org.msgpack.value.ValueFactory;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.net.*;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
Expand Down Expand Up @@ -130,6 +126,7 @@ public YAMLSection decrypt(String key, Value data) {
registerPacket(PacketExDeleteServer.class, "SubServers", "ExDeleteServer");
registerPacket(PacketExRemoveServer.class, "SubServers", "ExRemoveServer");
registerPacket(PacketExUpdateServer.class, "SubServers", "ExUpdateServer");
registerPacket(PacketOutExUpdateWhitelist.class, "SubServers", "ExUpdateWhitelist");
registerPacket(PacketLinkExHost.class, "SubServers", "LinkExHost");
registerPacket(PacketLinkProxy.class, "SubServers", "LinkProxy");
registerPacket(PacketLinkServer.class, "SubServers", "LinkServer");
Expand Down
Expand Up @@ -4,6 +4,7 @@
import net.ME1312.SubServers.Client.Bukkit.Library.NamedContainer;
import net.ME1312.SubServers.Client.Bukkit.Network.Packet.PacketDownloadServerInfo;
import net.ME1312.SubServers.Client.Bukkit.SubAPI;
import org.bukkit.OfflinePlayer;

import java.net.InetSocketAddress;
import java.util.*;
Expand Down Expand Up @@ -123,6 +124,35 @@ public boolean isRestricted() {
return raw.getBoolean("restricted");
}

/**
* Get a copy of the current whitelist
*
* @return Player Whitelist
*/
public Collection<UUID> getWhitelist() {
return raw.getUUIDList("whitelist");
}

/**
* See if a player is whitelisted
*
* @param player Player to check
* @return Whitelisted Status
*/
public boolean isWhitelisted(OfflinePlayer player) {
return isWhitelisted(player.getUniqueId());
}

/**
* See if a player is whitelisted
*
* @param player Player to check
* @return Whitelisted Status
*/
public boolean isWhitelisted(UUID player) {
return getWhitelist().contains(player);
}

/**
* Get the Signature of this Object
*
Expand Down

0 comments on commit 6218b87

Please sign in to comment.