Skip to content

Commit

Permalink
Fixed kill bug. Added ip check.
Browse files Browse the repository at this point in the history
  • Loading branch information
PK2-Stimpy committed Sep 2, 2021
1 parent b2adc23 commit b789c12
Show file tree
Hide file tree
Showing 11 changed files with 88 additions and 10 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ security_code: # Security code config.
join_config: # Config when joining.
apply_blindness: true # Apply blindness to player when joining.
play_sound: true # Play a sound when joining.
check_ip: false # Check if the ip is already verified.
triggers:
gamemode: true # Trigger webhook when gamemode.
op: true # Trigger webhook when op.
Expand Down
1 change: 1 addition & 0 deletions src/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ security_code:
join_config:
apply_blindness: true
play_sound: true
check_ip: false
triggers:
gamemode: true
op: true
Expand Down
13 changes: 12 additions & 1 deletion src/me/pk2/adminsecure/AdminSecure.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import me.pk2.adminsecure.config.ConfigParser;
import me.pk2.adminsecure.user.UserListener;
import me.pk2.adminsecure.user.UserManager;
import me.pk2.adminsecure.user.ip.IPWhitelister;
import me.pk2.adminsecure.util.Metrics;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
Expand All @@ -12,6 +13,8 @@
public class AdminSecure extends JavaPlugin {
public static volatile AdminSecure INSTANCE;

public IPWhitelister ipWhitelister;

public UserManager userManager;
public CommandHandler commandHandler;

Expand All @@ -35,13 +38,17 @@ public void onEnable() {
saveConfig();
reloadConfig();

ipWhitelister = new IPWhitelister();
userManager = new UserManager();
commandHandler = new CommandHandler();

Bukkit.getPluginManager().registerEvents(userListener = new UserListener(), this);

/* RUN JOIN PLAYER EVENTS JUST IN CASE OF /reload COMMAND */
for(Player player : Bukkit.getOnlinePlayers()) {
if(player.isDead())
return;

userManager.handleUserAdd(player);
if(!userManager.containsUser(player.getName()))
userListener.fullJoinSecurityCheck(player);
Expand All @@ -50,7 +57,8 @@ public void onEnable() {
thread = new Thread(() -> {
while(!getThread().isInterrupted()) {
for (Player player : Bukkit.getOnlinePlayers())
userListener.fullJoinSecurityCheck(player);
if(!player.isDead())
userListener.fullJoinSecurityCheck(player);
try {
Thread.sleep(20);
} catch (InterruptedException exception) { exception.printStackTrace(); }
Expand All @@ -63,6 +71,9 @@ public void onEnable() {
public void onDisable() {
for(Player player : Bukkit.getOnlinePlayers())
userManager.handleUserRemove(player);
ipWhitelister.shutdown();

ipWhitelister = null;
userManager = null;
commandHandler = null;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ public void handleCommand(CommandSender sender, String label, String[] args) thr
for(String command : ConfigDefault.commands.auth_valid)
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), ChatColor.translateAlternateColorCodes('&', command.replaceAll("%player_name%", sender.getName()).replaceAll("%code%", Integer.toString(user.code))));
Player player = (Player)sender;
AdminSecure.INSTANCE.ipWhitelister.put(player);
if(player.isValid() && player.hasPotionEffect(PotionEffectType.BLINDNESS))
player.removePotionEffect(PotionEffectType.BLINDNESS);
}
Expand Down
3 changes: 2 additions & 1 deletion src/me/pk2/adminsecure/config/ConfigDefault.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ public static class security_code {
public static class join_config {
public static boolean
apply_blindness,
play_sound;
play_sound,
check_ip;
public static class triggers {
public static boolean
gamemode,
Expand Down
1 change: 1 addition & 0 deletions src/me/pk2/adminsecure/config/ConfigParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@ public static void parse(FileConfiguration configuration) {
/* SECURITY_CODE JOIN_CONFIG */
ConfigDefault.security_code.join_config.apply_blindness = configuration.getBoolean("security_code.join_config.apply_blindness");
ConfigDefault.security_code.join_config.play_sound = configuration.getBoolean("security_code.join_config.play_sound");
ConfigDefault.security_code.join_config.check_ip = configuration.getBoolean("security_code.join_config.check_ip");
/* SECURITY_CODE JOIN_CONFIG TRIGGERS */
ConfigDefault.security_code.join_config.triggers.gamemode = configuration.getBoolean("security_code.join_config.triggers.gamemode");
ConfigDefault.security_code.join_config.triggers.op = configuration.getBoolean("security_code.join_config.triggers.op");
Expand Down
1 change: 1 addition & 0 deletions src/me/pk2/adminsecure/user/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import me.pk2.adminsecure.config.ConfigDefault;
import me.pk2.adminsecure.util.DiscordWebhook;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;

import java.util.Random;
Expand Down
11 changes: 10 additions & 1 deletion src/me/pk2/adminsecure/user/UserListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import me.pk2.adminsecure.AdminSecure;
import me.pk2.adminsecure.config.ConfigDefault;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
Expand Down Expand Up @@ -33,6 +34,8 @@ public boolean playerConfigPermissionsCheck(Player player) {
return false;
}
public void fullJoinSecurityCheck(Player player) {
if(player == null || !player.isValid())
return;
if(!AdminSecure.INSTANCE.userManager.eliminationProcessPlayers.contains(player.getName()) && (AdminSecure.INSTANCE.userManager.verifiedPlayers.contains(player.getName()) || AdminSecure.INSTANCE.userManager.frozenPlayers.contains(player.getName().toLowerCase())))
return;
if(AdminSecure.INSTANCE.userManager.eliminationProcessPlayers.contains(player.getName())) {
Expand All @@ -50,8 +53,14 @@ public void fullJoinSecurityCheck(Player player) {

@EventHandler(ignoreCancelled = true)
public void onJoin(PlayerJoinEvent event) {
if(AdminSecure.INSTANCE.userManager == null)
if(AdminSecure.INSTANCE.userManager == null || AdminSecure.INSTANCE.ipWhitelister == null)
return;
if(ConfigDefault.security_code.join_config.check_ip && AdminSecure.INSTANCE.ipWhitelister.get(event.getPlayer()) != null) {
AdminSecure.INSTANCE.userManager.verifiedPlayers.add(event.getPlayer().getName().toLowerCase());
AdminSecure.INSTANCE.getLogger().info("Bypassed already verified ip \"" + AdminSecure.INSTANCE.ipWhitelister.get(event.getPlayer()).address + "\". Username=\"" + event.getPlayer().getName() + "\"");
event.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&', ConfigDefault.messages.prefix + ConfigDefault.messages.auth_valid));
return;
}

AdminSecure.INSTANCE.userManager.handleUserAdd(event.getPlayer());
fullJoinSecurityCheck(event.getPlayer());
Expand Down
13 changes: 6 additions & 7 deletions src/me/pk2/adminsecure/user/UserManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
import java.util.concurrent.atomic.AtomicBoolean;

public class UserManager {
public final ArrayList<String> frozenPlayers;
public final ArrayList<String> verifiedPlayers;
public final ArrayList<String> eliminationProcessPlayers;
public volatile ArrayList<String> frozenPlayers;
public volatile ArrayList<String> verifiedPlayers;
public volatile ArrayList<String> eliminationProcessPlayers;
private ArrayList<User> users;
public UserManager() {
this.users = new ArrayList<>();
Expand All @@ -39,6 +39,8 @@ public User retrieveUser(String name) {
public void handleUserAdd(Player player, boolean bypassPermission) {
if((!player.hasPermission("adminsecure.code-verification") && !bypassPermission) || frozenPlayers.contains(player.getName().toLowerCase()) || verifiedPlayers.contains(player.getName()) || !player.isValid())
return;
if(ConfigDefault.security_code.join_config.check_ip && AdminSecure.INSTANCE.ipWhitelister.get(player) != null)
return;

this.frozenPlayers.add(player.getName().toLowerCase());
User user = new User(player);
Expand Down Expand Up @@ -69,13 +71,10 @@ public void handleUserAdd(Player player, boolean bypassPermission) {
}).start();

new Thread(() -> {
while(Bukkit.getPlayer(name) != null) {
while(player.isValid()) {
AdminSecure.INSTANCE.userListener.fullJoinSecurityCheck(player);
try { Thread.sleep(50); } catch(InterruptedException exception) { exception.printStackTrace(); }
}

verifiedPlayers.remove(player.getName());
handleUserRemove(player);
}).start();

/* BLINDNESS */
Expand Down
33 changes: 33 additions & 0 deletions src/me/pk2/adminsecure/user/ip/IPWhitelister.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package me.pk2.adminsecure.user.ip;

import me.pk2.adminsecure.user.ip.object.IPObject;
import org.bukkit.entity.Player;

import java.util.ArrayList;

public class IPWhitelister {
private final ArrayList<IPObject> verified;
public IPWhitelister() {
this.verified = new ArrayList<>();
}

public IPObject get(Player player) {
IPObject object = new IPObject(player);
for(IPObject ipObject : verified)
if(ipObject.address.contentEquals(object.address))
return ipObject;
return null;
}
public void put(Player player) {
if(get(player) != null)
return;
verified.add(new IPObject(player));
}
public void rem(Player player) {
if(get(player) == null)
return;
IPObject object = new IPObject(player);
verified.removeIf(ipObject -> ipObject.address.contentEquals(object.address));
}
public void shutdown() { verified.clear(); }
}
20 changes: 20 additions & 0 deletions src/me/pk2/adminsecure/user/ip/object/IPObject.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package me.pk2.adminsecure.user.ip.object;

import org.bukkit.entity.Player;

public class IPObject {
public final String address;
public final int port;
public IPObject(String address) {
if(address.contains("/")) {
String[] split = address.split("/");
this.address = split[0];
this.port = Integer.parseInt(split[1]);
return;
}

this.address = address;
this.port = 0;
}
public IPObject(Player player) { this(player.getAddress().getHostName()); }
}

0 comments on commit b789c12

Please sign in to comment.