Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package net.md_5.secure;
- import java.io.File;
- import java.net.InetSocketAddress;
- import java.security.InvalidKeyException;
- import java.security.NoSuchAlgorithmException;
- import java.util.Arrays;
- import java.util.Calendar;
- import java.util.Date;
- import java.util.GregorianCalendar;
- import java.util.Map;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- import javax.crypto.Mac;
- import javax.crypto.spec.SecretKeySpec;
- import org.bukkit.ChatColor;
- import org.bukkit.Location;
- import org.bukkit.Material;
- import org.bukkit.Server;
- import org.bukkit.command.Command;
- import org.bukkit.command.CommandSender;
- import org.bukkit.configuration.file.FileConfiguration;
- import org.bukkit.configuration.file.FileConfigurationOptions;
- import org.bukkit.entity.Item;
- import org.bukkit.entity.Player;
- import org.bukkit.event.Cancellable;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.EventPriority;
- import org.bukkit.event.Listener;
- import org.bukkit.event.inventory.InventoryClickEvent;
- import org.bukkit.event.player.AsyncPlayerChatEvent;
- import org.bukkit.event.player.PlayerCommandPreprocessEvent;
- import org.bukkit.event.player.PlayerDropItemEvent;
- import org.bukkit.event.player.PlayerInteractEvent;
- import org.bukkit.event.player.PlayerJoinEvent;
- import org.bukkit.event.player.PlayerMoveEvent;
- import org.bukkit.inventory.ItemStack;
- import org.bukkit.inventory.meta.ItemMeta;
- import org.bukkit.metadata.FixedMetadataValue;
- import org.bukkit.metadata.Metadatable;
- import org.bukkit.plugin.PluginManager;
- import org.bukkit.plugin.java.JavaPlugin;
- import org.bukkit.scheduler.BukkitScheduler;
- public class MineSecure
- extends JavaPlugin
- implements Listener
- {
- public a a;
- public String b;
- private String p;
- public String c;
- public String d;
- public String e;
- public String f;
- private String q;
- public String g;
- public String h;
- public String i;
- public String j;
- public String k;
- public String l;
- public String m;
- public String n;
- public String o;
- private final Map r = new b(this);
- public void onEnable()
- {
- loadConfig0();getConfig().addDefault("mysql.user", "minecraft");
- getConfig().addDefault("mysql.password", "qwerty");
- getConfig().addDefault("mysql.host", "localhost");
- getConfig().addDefault("mysql.port", "3306");
- getConfig().addDefault("mysql.database", "minecraft");
- getConfig().addDefault("storage", "sqlite");
- getConfig().addDefault("message.auth", "&cYou need to enter your 2fa code with /2fa <code>");
- getConfig().addDefault("message.force", "&cThe server admin has indicated that 2fa is required for you. Please run the /2fa command to enable it.");
- getConfig().addDefault("message.not_required", "&cYou do not need 2fa auth at this time");
- getConfig().addDefault("message.invalid", "&cInvalid code, please try again!");
- getConfig().addDefault("message.success", "&aSuccess! Thanks for keeping your account secure");
- getConfig().addDefault("message.register_complete", "&a2fa activated and required for all logins.");
- getConfig().addDefault("message.remembered", "&aRemembered your IP address, logging you in automatically.");
- getConfig().addDefault("message.duplicate", "&6You already have two factor auth enabled, use /2fa remove to remove it");
- getConfig().addDefault("message.help", "&6We have sent you a map with your secret info. Enter it into your authenticator application and then run /2fa <code>");
- getConfig().addDefault("message.hotbar", "&cPlease run this command with at least one free slot in your hotbar");
- getConfig().addDefault("message.map", "2fa Code Map");
- getConfig().addDefault("message.remove_usage", "&cError, usage: /2fa remove <player>");
- getConfig().addDefault("message.remove_no_permission", "You do not have permission to manipulate other users");
- getConfig().addDefault("message.remove_success", "&aRemoved 2fa entry for player {0}");
- getConfig().addDefault("message.remove_not_found", "&cCannot find any 2fa entry for player {0}");
- getConfig().addDefault("message.logout", "&6Logged out");
- getConfig().addDefault("code.url", "otpauth://totp/{1}@spigotmc.org?secret={0}&issuer=SpigotMC");
- getConfig().addDefault("code.window", Integer.valueOf(2));
- getConfig().addDefault("session.time", Integer.valueOf(360));
- getConfig().options().copyDefaults(true);
- saveConfig();
- this.b = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.auth"));
- this.p = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.force"));
- this.c = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.not_required"));
- this.d = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.invalid"));
- this.e = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.success"));
- this.f = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.register_complete"));
- this.q = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.remembered"));
- this.g = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.duplicate"));
- this.h = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.help"));
- this.i = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.hotbar"));
- this.j = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.map"));
- this.k = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.remove_usage"));
- this.l = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.remove_no_permission"));
- this.m = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.remove_success"));
- this.n = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.remove_not_found"));
- this.o = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.logout"));
- try
- {
- switch (getConfig().getString("storage"))
- {
- case "mysql":
- this.a = new d("jdbc:mysql://" + getConfig().getString("mysql.host") + ":" + getConfig().getString("mysql.port") + "/" + getConfig().getString("mysql.database"), getConfig().getString("mysql.user"), getConfig().getString("mysql.password"));
- break;
- case "sqlite":
- this.a = new f("jdbc:sqlite:" + new File(getDataFolder(), "storage.sqlite").getPath());
- }
- }
- catch (Exception localException)
- {
- getLogger().log(Level.SEVERE, "Error initializing storage engine", localException);
- getServer().getPluginManager().disablePlugin(this);
- return;
- }
- getServer().getPluginManager().registerEvents(this, this);
- }
- public boolean onCommand(CommandSender paramCommandSender, Command paramCommand, String paramString, String[] paramArrayOfString)
- {
- if (a(paramCommand = paramArrayOfString.length == 0 ? "root" : paramArrayOfString[0]))
- {
- paramCommand = "auth";
- paramArrayOfString = new String[] { "", paramArrayOfString[0] };
- }
- if ((paramString = (k)this.r.get(paramCommand.toLowerCase())) == null)
- {
- paramCommandSender.sendMessage(ChatColor.RED + "Unknown subcommand " + paramCommand);
- return true;
- }
- paramCommand = paramArrayOfString.length == 0 ? paramArrayOfString : (String[])Arrays.copyOfRange(paramArrayOfString, 1, paramArrayOfString.length);
- if ((paramArrayOfString = paramString).a) {
- getServer().getScheduler().runTaskAsynchronously(this, new c(this, paramString, paramCommandSender, paramCommand));
- } else {
- paramString.a(this, paramCommandSender, paramCommand);
- }
- return true;
- }
- @EventHandler
- public void playerJoin(PlayerJoinEvent paramPlayerJoinEvent)
- {
- Player localPlayer = paramPlayerJoinEvent.getPlayer();
- a(localPlayer);
- if (!localPlayer.hasPermission("minesecure.2fa")) {
- return;
- }
- String str;
- if ((str = this.a.a(paramPlayerJoinEvent.getPlayer().getUniqueId())) != null)
- {
- if ((paramPlayerJoinEvent = this.a.c(paramPlayerJoinEvent.getPlayer().getUniqueId(), N.a(localPlayer.getAddress().getAddress()))) != null)
- {
- GregorianCalendar localGregorianCalendar;
- (localGregorianCalendar = new GregorianCalendar()).add(12, -getConfig().getInt("session.time"));
- if (paramPlayerJoinEvent.after(localGregorianCalendar.getTime()))
- {
- localPlayer.sendMessage(this.q);
- return;
- }
- }
- localPlayer.setMetadata("MINESECURE_REQUIRED", new FixedMetadataValue(this, str));
- localPlayer.sendMessage(this.b);
- return;
- }
- if (localPlayer.hasPermission("minesecure.required"))
- {
- localPlayer.setMetadata("MINESECURE_FORCED", new FixedMetadataValue(this, str));
- localPlayer.sendMessage(this.p);
- }
- }
- @EventHandler(priority=EventPriority.LOWEST, ignoreCancelled=true)
- public void playerMove(PlayerMoveEvent paramPlayerMoveEvent)
- {
- Location localLocation1 = paramPlayerMoveEvent.getFrom();
- Location localLocation2 = paramPlayerMoveEvent.getTo();
- if ((localLocation1.getBlockX() != localLocation2.getBlockX()) || (localLocation1.getBlockY() != localLocation2.getBlockY()) || (localLocation1.getBlockZ() != localLocation2.getBlockZ()))
- {
- a(paramPlayerMoveEvent.getPlayer(), paramPlayerMoveEvent);
- if (paramPlayerMoveEvent.isCancelled())
- {
- localLocation2.setX(localLocation1.getBlockX());
- localLocation2.setY(localLocation1.getBlockY());
- localLocation2.setZ(localLocation1.getBlockZ());
- paramPlayerMoveEvent.setCancelled(false);
- }
- }
- }
- @EventHandler(priority=EventPriority.LOWEST, ignoreCancelled=true)
- public void playerChat(AsyncPlayerChatEvent paramAsyncPlayerChatEvent)
- {
- a(paramAsyncPlayerChatEvent.getPlayer(), paramAsyncPlayerChatEvent);
- }
- @EventHandler(priority=EventPriority.LOWEST, ignoreCancelled=true)
- public void playerDrop(PlayerDropItemEvent paramPlayerDropItemEvent)
- {
- a(paramPlayerDropItemEvent.getPlayer(), paramPlayerDropItemEvent);
- if ((a(paramPlayerDropItemEvent.getItemDrop().getItemStack())) && (!paramPlayerDropItemEvent.isCancelled())) {
- paramPlayerDropItemEvent.getItemDrop().setItemStack(new ItemStack(Material.AIR));
- }
- }
- @EventHandler(priority=EventPriority.LOWEST, ignoreCancelled=true)
- public void playerInteract(PlayerInteractEvent paramPlayerInteractEvent)
- {
- a(paramPlayerInteractEvent.getPlayer(), paramPlayerInteractEvent);
- }
- @EventHandler(priority=EventPriority.LOWEST, ignoreCancelled=true)
- public void playerClick(InventoryClickEvent paramInventoryClickEvent)
- {
- if ((paramInventoryClickEvent.getWhoClicked() instanceof Player)) {
- a((Player)paramInventoryClickEvent.getWhoClicked(), paramInventoryClickEvent);
- }
- }
- @EventHandler(priority=EventPriority.LOWEST, ignoreCancelled=true)
- public void playerCommand(PlayerCommandPreprocessEvent paramPlayerCommandPreprocessEvent)
- {
- String[] arrayOfString = paramPlayerCommandPreprocessEvent.getMessage().split(" ");
- if (getCommand(arrayOfString[0].substring(1)) != null) {
- if ((arrayOfString.length == 1) || ((arrayOfString.length == 2) && (a(arrayOfString[1])))) {
- return;
- }
- }
- a(paramPlayerCommandPreprocessEvent.getPlayer(), paramPlayerCommandPreprocessEvent);
- }
- private static boolean a(String paramString)
- {
- int i1 = (paramString = paramString.toCharArray()).length;
- for (int i2 = 0; i2 < i1; i2++)
- {
- int i3;
- if (!Character.isDigit(i3 = paramString[i2])) {
- return false;
- }
- }
- return true;
- }
- private void a(Player paramPlayer, Cancellable paramCancellable)
- {
- if (paramPlayer.hasMetadata("MINESECURE_REQUIRED"))
- {
- paramPlayer.sendMessage(this.b);
- paramCancellable.setCancelled(true);
- }
- if (paramPlayer.hasMetadata("MINESECURE_FORCED"))
- {
- paramPlayer.sendMessage(this.p);
- paramCancellable.setCancelled(true);
- }
- }
- public final void a(Metadatable paramMetadatable)
- {
- paramMetadatable.removeMetadata("MINESECURE_FORCED", this);
- paramMetadatable.removeMetadata("MINESECURE_REQUIRED", this);
- }
- public final boolean a(ItemStack paramItemStack)
- {
- return (paramItemStack != null) && (paramItemStack.hasItemMeta()) && (paramItemStack.getItemMeta().hasDisplayName()) && (paramItemStack.getItemMeta().getDisplayName().equals(this.j));
- }
- public static int a(byte[] paramArrayOfByte, long paramLong)
- {
- try
- {
- Mac localMac;
- (localMac = Mac.getInstance((paramArrayOfByte = new SecretKeySpec(paramArrayOfByte, "HmacSHA1")).getAlgorithm())).init(paramArrayOfByte);
- paramLong = (paramArrayOfByte = localMac.doFinal(A.a(paramLong)))[19] & 0xF;
- long l2 = 0L;
- for (long l1 = 0; l1 < 4; l1++) {
- l2 = (l2 = l2 << 8) | paramArrayOfByte[(paramLong + l1)] & 0xFF;
- }
- return (int)(l2 = (l2 = l2 & 0x7FFFFFFF) % 1000000L);
- }
- catch (NoSuchAlgorithmException|InvalidKeyException localNoSuchAlgorithmException)
- {
- A.a(paramLong = (Throwable)A.a(paramArrayOfByte = paramArrayOfByte = localNoSuchAlgorithmException), Error.class);A.a(paramLong, RuntimeException.class);throw new RuntimeException(paramArrayOfByte);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement