Added support for bukkit plugins to retrieve player IPs, domains, and run bungeecord commands

This commit is contained in:
LAX1DUDE 2022-06-26 01:44:34 -07:00
parent 07b6e8a771
commit 05e929cf06
9 changed files with 70 additions and 38 deletions

View file

@ -26,14 +26,6 @@ public interface ConfigurationAdapter {
Collection<String> getBlacklistURLs(); Collection<String> getBlacklistURLs();
boolean getBlacklistOfflineDownload();
boolean getBlacklistReplits();
boolean getBlacklistOriginless();
boolean getSimpleWhitelistEnabled();
Collection<String> getBlacklistSimpleWhitelist(); Collection<String> getBlacklistSimpleWhitelist();
AuthServiceInfo getAuthSettings(); AuthServiceInfo getAuthSettings();

View file

@ -27,6 +27,11 @@ public class Configuration {
private int playerLimit; private int playerLimit;
private String name; private String name;
private boolean showBanType; private boolean showBanType;
private boolean blacklistOfflineDownload;
private boolean blacklistReplits;
private boolean blacklistOriginless;
private boolean simpleWhitelistEnabled;
private boolean acceptBukkitConsoleCommandPacket;
public Configuration() { public Configuration() {
this.timeout = 30000; this.timeout = 30000;
@ -53,6 +58,11 @@ public class Configuration {
this.playerLimit = adapter.getInt("player_limit", this.playerLimit); this.playerLimit = adapter.getInt("player_limit", this.playerLimit);
this.name = adapter.getString("server_name", EaglercraftBungee.name + " Server"); this.name = adapter.getString("server_name", EaglercraftBungee.name + " Server");
this.showBanType = adapter.getBoolean("display_ban_type_on_kick", false); this.showBanType = adapter.getBoolean("display_ban_type_on_kick", false);
this.blacklistOfflineDownload = adapter.getBoolean("origin_blacklist_block_offline_download", false);
this.blacklistReplits = adapter.getBoolean("origin_blacklist_block_replit_clients", false);
this.blacklistOriginless = adapter.getBoolean("origin_blacklist_block_missing_origin_header", false);
this.simpleWhitelistEnabled = adapter.getBoolean("origin_blacklist_use_simple_whitelist", false);
this.acceptBukkitConsoleCommandPacket = adapter.getBoolean("accept_bukkit_console_command_packets", false);
Preconditions.checkArgument(this.listeners != null && !this.listeners.isEmpty(), (Object) "No listeners defined."); Preconditions.checkArgument(this.listeners != null && !this.listeners.isEmpty(), (Object) "No listeners defined.");
final Map<String, ServerInfo> newServers = adapter.getServers(); final Map<String, ServerInfo> newServers = adapter.getServers();
Preconditions.checkArgument(newServers != null && !newServers.isEmpty(), (Object) "No servers defined"); Preconditions.checkArgument(newServers != null && !newServers.isEmpty(), (Object) "No servers defined");
@ -109,4 +119,24 @@ public class Configuration {
return this.showBanType; return this.showBanType;
} }
public boolean shouldBlacklistOfflineDownload() {
return blacklistOfflineDownload;
}
public boolean shouldBlacklistReplits() {
return blacklistReplits;
}
public boolean shouldBlacklistOriginless() {
return blacklistOriginless;
}
public boolean isSimpleWhitelistEnabled() {
return simpleWhitelistEnabled;
}
public boolean shouldAcceptBukkitConsoleCommandPacket() {
return acceptBukkitConsoleCommandPacket;
}
} }

View file

@ -17,7 +17,6 @@ import net.md_5.bungee.api.config.MOTDCacheConfiguration;
import java.util.Collection; import java.util.Collection;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.util.Iterator;
import net.md_5.bungee.Util; import net.md_5.bungee.Util;
import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.config.ServerInfo;
import java.util.logging.Level; import java.util.logging.Level;
@ -305,26 +304,6 @@ public class YamlConfig implements ConfigurationAdapter {
return c; return c;
} }
@Override
public boolean getBlacklistOfflineDownload() {
return this.getBoolean("origin_blacklist_block_offline_download", false);
}
@Override
public boolean getBlacklistReplits() {
return this.getBoolean("origin_blacklist_block_replit_clients", false);
}
@Override
public boolean getBlacklistOriginless() {
return this.getBoolean("origin_blacklist_block_missing_origin_header", false);
}
@Override
public boolean getSimpleWhitelistEnabled() {
return this.getBoolean("origin_blacklist_use_simple_whitelist", false);
}
@Override @Override
public Collection<String> getBlacklistSimpleWhitelist() { public Collection<String> getBlacklistSimpleWhitelist() {
Collection<String> c = this.get("origin_blacklist_simple_whitelist", null); Collection<String> c = this.get("origin_blacklist_simple_whitelist", null);

View file

@ -5,6 +5,8 @@
package net.md_5.bungee.connection; package net.md_5.bungee.connection;
import java.beans.ConstructorProperties; import java.beans.ConstructorProperties;
import java.net.InetAddress;
import net.md_5.bungee.api.event.ServerKickEvent; import net.md_5.bungee.api.event.ServerKickEvent;
import java.util.Objects; import java.util.Objects;
import net.md_5.bungee.protocol.packet.PacketFFKick; import net.md_5.bungee.protocol.packet.PacketFFKick;
@ -27,6 +29,7 @@ import net.md_5.bungee.api.score.Objective;
import net.md_5.bungee.protocol.packet.PacketCEScoreboardObjective; import net.md_5.bungee.protocol.packet.PacketCEScoreboardObjective;
import net.md_5.bungee.protocol.packet.PacketC9PlayerListItem; import net.md_5.bungee.protocol.packet.PacketC9PlayerListItem;
import net.md_5.bungee.protocol.packet.Packet0KeepAlive; import net.md_5.bungee.protocol.packet.Packet0KeepAlive;
import net.md_5.bungee.BungeeCord;
import net.md_5.bungee.EntityMap; import net.md_5.bungee.EntityMap;
import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.netty.ChannelWrapper; import net.md_5.bungee.netty.ChannelWrapper;
@ -201,9 +204,15 @@ public class DownstreamBridge extends PacketHandler {
} }
if (subChannel.equals("IP")) { if (subChannel.equals("IP")) {
out.writeUTF("IP"); out.writeUTF("IP");
Object ob = this.con.getAttachment().get("remoteAddr");
if(ob != null && (ob instanceof InetAddress)) {
out.writeUTF(((InetAddress)ob).getHostAddress());
out.writeInt(this.con.getAddress().getPort());
}else {
out.writeUTF(this.con.getAddress().getHostString()); out.writeUTF(this.con.getAddress().getHostString());
out.writeInt(this.con.getAddress().getPort()); out.writeInt(this.con.getAddress().getPort());
} }
}
if (subChannel.equals("PlayerCount")) { if (subChannel.equals("PlayerCount")) {
final String target = in.readUTF(); final String target = in.readUTF();
out.writeUTF("PlayerCount"); out.writeUTF("PlayerCount");
@ -246,6 +255,26 @@ public class DownstreamBridge extends PacketHandler {
out.writeUTF("GetServer"); out.writeUTF("GetServer");
out.writeUTF(this.server.getInfo().getName()); out.writeUTF(this.server.getInfo().getName());
} }
if (subChannel.equals("EAG|GetDomain")) {
out.writeUTF("EAG|GetDomain");
Object ob = this.con.getAttachment().get("origin");
if(ob != null && (ob instanceof String)) {
out.writeBoolean(true);
out.writeUTF((String)ob);
}else {
out.writeBoolean(false);
out.writeUTF("");
}
}
if (subChannel.equals("EAG|ConsoleCommand")) {
if(BungeeCord.getInstance().config.shouldAcceptBukkitConsoleCommandPacket()) {
String cmd = in.readUTF();
bungee.getLogger().info("Connection [" + this.con.getName() + "] <-> [" + this.server.getInfo().getName() + "] executed bungee console command: " + cmd);
bungee.getPluginManager().dispatchCommand(bungee.getConsole(), cmd);
}else {
bungee.getLogger().info("Connection [" + this.con.getName() + "] <-> [" + this.server.getInfo().getName() + "] tried executing a bungee console command but \"accept_bukkit_console_command_packets\" is set to false in config.yml");
}
}
if (out != null) { if (out != null) {
final byte[] b = out.toByteArray(); final byte[] b = out.toByteArray();
if (b.length != 0) { if (b.length != 0) {

View file

@ -20,6 +20,7 @@ import java.util.regex.PatternSyntaxException;
import net.md_5.bungee.BungeeCord; import net.md_5.bungee.BungeeCord;
import net.md_5.bungee.api.config.ConfigurationAdapter; import net.md_5.bungee.api.config.ConfigurationAdapter;
import net.md_5.bungee.config.Configuration;
public class DomainBlacklist { public class DomainBlacklist {
@ -108,12 +109,13 @@ public class DomainBlacklist {
regexLocalBlacklist.clear(); regexLocalBlacklist.clear();
regexBlacklistReplit.clear(); regexBlacklistReplit.clear();
simpleWhitelist.clear(); simpleWhitelist.clear();
ConfigurationAdapter cfg = bg.getConfigurationAdapter(); ConfigurationAdapter cfg2 = bg.getConfigurationAdapter();
blacklistSubscriptions = cfg.getBlacklistURLs(); Configuration cfg = bg.config;
blockOfflineDownload = cfg.getBlacklistOfflineDownload(); blacklistSubscriptions = cfg2.getBlacklistURLs();
blockAllReplits = cfg.getBlacklistReplits(); blockOfflineDownload = cfg.shouldBlacklistOfflineDownload();
simpleWhitelistMode = cfg.getSimpleWhitelistEnabled(); blockAllReplits = cfg.shouldBlacklistReplits();
simpleWhitelist.addAll(cfg.getBlacklistSimpleWhitelist()); simpleWhitelistMode = cfg.isSimpleWhitelistEnabled();
simpleWhitelist.addAll(cfg2.getBlacklistSimpleWhitelist());
lastLocalUpdate = 0l; lastLocalUpdate = 0l;
lastUpdate = System.currentTimeMillis() - updateRate - 1000l; lastUpdate = System.currentTimeMillis() - updateRate - 1000l;
update(); update();

View file

@ -58,7 +58,7 @@ public class WebSocketListener extends WebSocketServer {
this.info = info; this.info = info;
this.bungeeProxy = sock; this.bungeeProxy = sock;
this.bungeeCord = bungeeCord; this.bungeeCord = bungeeCord;
this.blockOriginless = bungeeCord.getConfigurationAdapter().getBlacklistOriginless(); this.blockOriginless = ((BungeeCord)bungeeCord).config.shouldBlacklistOriginless();
this.ratelimitIP = info.getRateLimitIP(); this.ratelimitIP = info.getRateLimitIP();
this.ratelimitLogin = info.getRateLimitLogin(); this.ratelimitLogin = info.getRateLimitLogin();
this.ratelimitMOTD = info.getRateLimitMOTD(); this.ratelimitMOTD = info.getRateLimitMOTD();