Advertisement
Guest User

Untitled

a guest
Oct 4th, 2018
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.43 KB | None | 0 0
  1. package net.md_5.secure;
  2.  
  3. import java.io.File;
  4. import java.net.InetSocketAddress;
  5. import java.security.InvalidKeyException;
  6. import java.security.NoSuchAlgorithmException;
  7. import java.util.Arrays;
  8. import java.util.Calendar;
  9. import java.util.Date;
  10. import java.util.GregorianCalendar;
  11. import java.util.Map;
  12. import java.util.logging.Level;
  13. import java.util.logging.Logger;
  14. import javax.crypto.Mac;
  15. import javax.crypto.spec.SecretKeySpec;
  16. import org.bukkit.ChatColor;
  17. import org.bukkit.Location;
  18. import org.bukkit.Material;
  19. import org.bukkit.Server;
  20. import org.bukkit.command.Command;
  21. import org.bukkit.command.CommandSender;
  22. import org.bukkit.configuration.file.FileConfiguration;
  23. import org.bukkit.configuration.file.FileConfigurationOptions;
  24. import org.bukkit.entity.Item;
  25. import org.bukkit.entity.Player;
  26. import org.bukkit.event.Cancellable;
  27. import org.bukkit.event.EventHandler;
  28. import org.bukkit.event.EventPriority;
  29. import org.bukkit.event.Listener;
  30. import org.bukkit.event.inventory.InventoryClickEvent;
  31. import org.bukkit.event.player.AsyncPlayerChatEvent;
  32. import org.bukkit.event.player.PlayerCommandPreprocessEvent;
  33. import org.bukkit.event.player.PlayerDropItemEvent;
  34. import org.bukkit.event.player.PlayerInteractEvent;
  35. import org.bukkit.event.player.PlayerJoinEvent;
  36. import org.bukkit.event.player.PlayerMoveEvent;
  37. import org.bukkit.inventory.ItemStack;
  38. import org.bukkit.inventory.meta.ItemMeta;
  39. import org.bukkit.metadata.FixedMetadataValue;
  40. import org.bukkit.metadata.Metadatable;
  41. import org.bukkit.plugin.PluginManager;
  42. import org.bukkit.plugin.java.JavaPlugin;
  43. import org.bukkit.scheduler.BukkitScheduler;
  44.  
  45. public class MineSecure
  46. extends JavaPlugin
  47. implements Listener
  48. {
  49. public a a;
  50. public String b;
  51. private String p;
  52. public String c;
  53. public String d;
  54. public String e;
  55. public String f;
  56. private String q;
  57. public String g;
  58. public String h;
  59. public String i;
  60. public String j;
  61. public String k;
  62. public String l;
  63. public String m;
  64. public String n;
  65. public String o;
  66. private final Map r = new b(this);
  67.  
  68. public void onEnable()
  69. {
  70. loadConfig0();getConfig().addDefault("mysql.user", "minecraft");
  71. getConfig().addDefault("mysql.password", "qwerty");
  72. getConfig().addDefault("mysql.host", "localhost");
  73. getConfig().addDefault("mysql.port", "3306");
  74. getConfig().addDefault("mysql.database", "minecraft");
  75. getConfig().addDefault("storage", "sqlite");
  76. getConfig().addDefault("message.auth", "&cYou need to enter your 2fa code with /2fa <code>");
  77. getConfig().addDefault("message.force", "&cThe server admin has indicated that 2fa is required for you. Please run the /2fa command to enable it.");
  78. getConfig().addDefault("message.not_required", "&cYou do not need 2fa auth at this time");
  79. getConfig().addDefault("message.invalid", "&cInvalid code, please try again!");
  80. getConfig().addDefault("message.success", "&aSuccess! Thanks for keeping your account secure");
  81. getConfig().addDefault("message.register_complete", "&a2fa activated and required for all logins.");
  82. getConfig().addDefault("message.remembered", "&aRemembered your IP address, logging you in automatically.");
  83. getConfig().addDefault("message.duplicate", "&6You already have two factor auth enabled, use /2fa remove to remove it");
  84. 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>");
  85. getConfig().addDefault("message.hotbar", "&cPlease run this command with at least one free slot in your hotbar");
  86. getConfig().addDefault("message.map", "2fa Code Map");
  87. getConfig().addDefault("message.remove_usage", "&cError, usage: /2fa remove <player>");
  88. getConfig().addDefault("message.remove_no_permission", "You do not have permission to manipulate other users");
  89. getConfig().addDefault("message.remove_success", "&aRemoved 2fa entry for player {0}");
  90. getConfig().addDefault("message.remove_not_found", "&cCannot find any 2fa entry for player {0}");
  91. getConfig().addDefault("message.logout", "&6Logged out");
  92. getConfig().addDefault("code.url", "otpauth://totp/{1}@spigotmc.org?secret={0}&issuer=SpigotMC");
  93. getConfig().addDefault("code.window", Integer.valueOf(2));
  94. getConfig().addDefault("session.time", Integer.valueOf(360));
  95.  
  96. getConfig().options().copyDefaults(true);
  97. saveConfig();
  98.  
  99. this.b = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.auth"));
  100. this.p = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.force"));
  101. this.c = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.not_required"));
  102. this.d = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.invalid"));
  103. this.e = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.success"));
  104. this.f = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.register_complete"));
  105. this.q = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.remembered"));
  106. this.g = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.duplicate"));
  107. this.h = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.help"));
  108. this.i = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.hotbar"));
  109. this.j = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.map"));
  110. this.k = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.remove_usage"));
  111. this.l = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.remove_no_permission"));
  112. this.m = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.remove_success"));
  113. this.n = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.remove_not_found"));
  114. this.o = ChatColor.translateAlternateColorCodes('&', getConfig().getString("message.logout"));
  115. try
  116. {
  117. switch (getConfig().getString("storage"))
  118. {
  119. case "mysql":
  120. 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"));
  121. break;
  122. case "sqlite":
  123. this.a = new f("jdbc:sqlite:" + new File(getDataFolder(), "storage.sqlite").getPath());
  124. }
  125. }
  126. catch (Exception localException)
  127. {
  128. getLogger().log(Level.SEVERE, "Error initializing storage engine", localException);
  129. getServer().getPluginManager().disablePlugin(this);
  130. return;
  131. }
  132. getServer().getPluginManager().registerEvents(this, this);
  133. }
  134.  
  135. public boolean onCommand(CommandSender paramCommandSender, Command paramCommand, String paramString, String[] paramArrayOfString)
  136. {
  137. if (a(paramCommand = paramArrayOfString.length == 0 ? "root" : paramArrayOfString[0]))
  138. {
  139. paramCommand = "auth";
  140. paramArrayOfString = new String[] { "", paramArrayOfString[0] };
  141. }
  142. if ((paramString = (k)this.r.get(paramCommand.toLowerCase())) == null)
  143. {
  144. paramCommandSender.sendMessage(ChatColor.RED + "Unknown subcommand " + paramCommand);
  145. return true;
  146. }
  147. paramCommand = paramArrayOfString.length == 0 ? paramArrayOfString : (String[])Arrays.copyOfRange(paramArrayOfString, 1, paramArrayOfString.length);
  148. if ((paramArrayOfString = paramString).a) {
  149. getServer().getScheduler().runTaskAsynchronously(this, new c(this, paramString, paramCommandSender, paramCommand));
  150. } else {
  151. paramString.a(this, paramCommandSender, paramCommand);
  152. }
  153. return true;
  154. }
  155.  
  156. @EventHandler
  157. public void playerJoin(PlayerJoinEvent paramPlayerJoinEvent)
  158. {
  159. Player localPlayer = paramPlayerJoinEvent.getPlayer();
  160. a(localPlayer);
  161. if (!localPlayer.hasPermission("minesecure.2fa")) {
  162. return;
  163. }
  164. String str;
  165. if ((str = this.a.a(paramPlayerJoinEvent.getPlayer().getUniqueId())) != null)
  166. {
  167. if ((paramPlayerJoinEvent = this.a.c(paramPlayerJoinEvent.getPlayer().getUniqueId(), N.a(localPlayer.getAddress().getAddress()))) != null)
  168. {
  169. GregorianCalendar localGregorianCalendar;
  170. (localGregorianCalendar = new GregorianCalendar()).add(12, -getConfig().getInt("session.time"));
  171. if (paramPlayerJoinEvent.after(localGregorianCalendar.getTime()))
  172. {
  173. localPlayer.sendMessage(this.q);
  174. return;
  175. }
  176. }
  177. localPlayer.setMetadata("MINESECURE_REQUIRED", new FixedMetadataValue(this, str));
  178. localPlayer.sendMessage(this.b);
  179. return;
  180. }
  181. if (localPlayer.hasPermission("minesecure.required"))
  182. {
  183. localPlayer.setMetadata("MINESECURE_FORCED", new FixedMetadataValue(this, str));
  184. localPlayer.sendMessage(this.p);
  185. }
  186. }
  187.  
  188. @EventHandler(priority=EventPriority.LOWEST, ignoreCancelled=true)
  189. public void playerMove(PlayerMoveEvent paramPlayerMoveEvent)
  190. {
  191. Location localLocation1 = paramPlayerMoveEvent.getFrom();
  192. Location localLocation2 = paramPlayerMoveEvent.getTo();
  193. if ((localLocation1.getBlockX() != localLocation2.getBlockX()) || (localLocation1.getBlockY() != localLocation2.getBlockY()) || (localLocation1.getBlockZ() != localLocation2.getBlockZ()))
  194. {
  195. a(paramPlayerMoveEvent.getPlayer(), paramPlayerMoveEvent);
  196. if (paramPlayerMoveEvent.isCancelled())
  197. {
  198. localLocation2.setX(localLocation1.getBlockX());
  199. localLocation2.setY(localLocation1.getBlockY());
  200. localLocation2.setZ(localLocation1.getBlockZ());
  201. paramPlayerMoveEvent.setCancelled(false);
  202. }
  203. }
  204. }
  205.  
  206. @EventHandler(priority=EventPriority.LOWEST, ignoreCancelled=true)
  207. public void playerChat(AsyncPlayerChatEvent paramAsyncPlayerChatEvent)
  208. {
  209. a(paramAsyncPlayerChatEvent.getPlayer(), paramAsyncPlayerChatEvent);
  210. }
  211.  
  212. @EventHandler(priority=EventPriority.LOWEST, ignoreCancelled=true)
  213. public void playerDrop(PlayerDropItemEvent paramPlayerDropItemEvent)
  214. {
  215. a(paramPlayerDropItemEvent.getPlayer(), paramPlayerDropItemEvent);
  216. if ((a(paramPlayerDropItemEvent.getItemDrop().getItemStack())) && (!paramPlayerDropItemEvent.isCancelled())) {
  217. paramPlayerDropItemEvent.getItemDrop().setItemStack(new ItemStack(Material.AIR));
  218. }
  219. }
  220.  
  221. @EventHandler(priority=EventPriority.LOWEST, ignoreCancelled=true)
  222. public void playerInteract(PlayerInteractEvent paramPlayerInteractEvent)
  223. {
  224. a(paramPlayerInteractEvent.getPlayer(), paramPlayerInteractEvent);
  225. }
  226.  
  227. @EventHandler(priority=EventPriority.LOWEST, ignoreCancelled=true)
  228. public void playerClick(InventoryClickEvent paramInventoryClickEvent)
  229. {
  230. if ((paramInventoryClickEvent.getWhoClicked() instanceof Player)) {
  231. a((Player)paramInventoryClickEvent.getWhoClicked(), paramInventoryClickEvent);
  232. }
  233. }
  234.  
  235. @EventHandler(priority=EventPriority.LOWEST, ignoreCancelled=true)
  236. public void playerCommand(PlayerCommandPreprocessEvent paramPlayerCommandPreprocessEvent)
  237. {
  238. String[] arrayOfString = paramPlayerCommandPreprocessEvent.getMessage().split(" ");
  239. if (getCommand(arrayOfString[0].substring(1)) != null) {
  240. if ((arrayOfString.length == 1) || ((arrayOfString.length == 2) && (a(arrayOfString[1])))) {
  241. return;
  242. }
  243. }
  244. a(paramPlayerCommandPreprocessEvent.getPlayer(), paramPlayerCommandPreprocessEvent);
  245. }
  246.  
  247. private static boolean a(String paramString)
  248. {
  249. int i1 = (paramString = paramString.toCharArray()).length;
  250. for (int i2 = 0; i2 < i1; i2++)
  251. {
  252. int i3;
  253. if (!Character.isDigit(i3 = paramString[i2])) {
  254. return false;
  255. }
  256. }
  257. return true;
  258. }
  259.  
  260. private void a(Player paramPlayer, Cancellable paramCancellable)
  261. {
  262. if (paramPlayer.hasMetadata("MINESECURE_REQUIRED"))
  263. {
  264. paramPlayer.sendMessage(this.b);
  265. paramCancellable.setCancelled(true);
  266. }
  267. if (paramPlayer.hasMetadata("MINESECURE_FORCED"))
  268. {
  269. paramPlayer.sendMessage(this.p);
  270. paramCancellable.setCancelled(true);
  271. }
  272. }
  273.  
  274. public final void a(Metadatable paramMetadatable)
  275. {
  276. paramMetadatable.removeMetadata("MINESECURE_FORCED", this);
  277. paramMetadatable.removeMetadata("MINESECURE_REQUIRED", this);
  278. }
  279.  
  280. public final boolean a(ItemStack paramItemStack)
  281. {
  282. return (paramItemStack != null) && (paramItemStack.hasItemMeta()) && (paramItemStack.getItemMeta().hasDisplayName()) && (paramItemStack.getItemMeta().getDisplayName().equals(this.j));
  283. }
  284.  
  285. public static int a(byte[] paramArrayOfByte, long paramLong)
  286. {
  287. try
  288. {
  289. Mac localMac;
  290. (localMac = Mac.getInstance((paramArrayOfByte = new SecretKeySpec(paramArrayOfByte, "HmacSHA1")).getAlgorithm())).init(paramArrayOfByte);
  291.  
  292. paramLong = (paramArrayOfByte = localMac.doFinal(A.a(paramLong)))[19] & 0xF;
  293.  
  294. long l2 = 0L;
  295. for (long l1 = 0; l1 < 4; l1++) {
  296. l2 = (l2 = l2 << 8) | paramArrayOfByte[(paramLong + l1)] & 0xFF;
  297. }
  298. return (int)(l2 = (l2 = l2 & 0x7FFFFFFF) % 1000000L);
  299. }
  300. catch (NoSuchAlgorithmException|InvalidKeyException localNoSuchAlgorithmException)
  301. {
  302. A.a(paramLong = (Throwable)A.a(paramArrayOfByte = paramArrayOfByte = localNoSuchAlgorithmException), Error.class);A.a(paramLong, RuntimeException.class);throw new RuntimeException(paramArrayOfByte);
  303. }
  304. }
  305. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement