Advertisement
Guest User

Untitled

a guest
Sep 20th, 2017
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 22.71 KB | None | 0 0
  1. package de.fgtech.pomo4ka.AuthMe;
  2.  
  3. import java.util.List;
  4. import java.io.File;
  5. import java.io.FileOutputStream;
  6. import java.io.InputStream;
  7. import java.math.BigInteger;
  8. import java.security.MessageDigest;
  9. import java.util.HashMap;
  10. import java.util.Map;
  11.  
  12. import org.bukkit.ChatColor;
  13. import org.bukkit.command.Command;
  14. import org.bukkit.command.CommandSender;
  15. import org.bukkit.entity.Player;
  16. import org.bukkit.event.Event;
  17. import org.bukkit.event.Event.Priority;
  18. import org.bukkit.inventory.ItemStack;
  19. import org.bukkit.plugin.PluginManager;
  20. import org.bukkit.plugin.java.JavaPlugin;
  21.  
  22. import de.fgtech.pomo4ka.AuthMe.DataController.DataController;
  23. import de.fgtech.pomo4ka.AuthMe.DataController.DataSource.DataSource;
  24. import de.fgtech.pomo4ka.AuthMe.DataController.DataSource.FlatfileData;
  25. import de.fgtech.pomo4ka.AuthMe.DataController.DataSource.MySQLData;
  26. import de.fgtech.pomo4ka.AuthMe.InventoryCache.FlatfileCache;
  27. import de.fgtech.pomo4ka.AuthMe.InventoryCache.InventoryArmour;
  28. import de.fgtech.pomo4ka.AuthMe.Listener.AuthMeBlockListener;
  29. import de.fgtech.pomo4ka.AuthMe.Listener.AuthMeEntityListener;
  30. import de.fgtech.pomo4ka.AuthMe.Listener.AuthMePlayerListener;
  31. import de.fgtech.pomo4ka.AuthMe.LoginTimeout.LoginTimeout;
  32. import de.fgtech.pomo4ka.AuthMe.MessageHandler.MessageHandler;
  33. import de.fgtech.pomo4ka.AuthMe.Parameters.Messages;
  34. import de.fgtech.pomo4ka.AuthMe.Parameters.Settings;
  35. import de.fgtech.pomo4ka.AuthMe.PlayerCache.PlayerCache;
  36. import de.fgtech.pomo4ka.AuthMe.Sessions.SessionHandler;
  37. import java.io.UnsupportedEncodingException;
  38. import java.security.NoSuchAlgorithmException;
  39.  
  40. /**
  41.  * AuthMe for Bukkit
  42.  *
  43.  * @author pomo4ka
  44.  */
  45. public class AuthMe extends JavaPlugin {
  46.  
  47.     private final AuthMePlayerListener playerListener = new AuthMePlayerListener(
  48.             this);
  49.     private final AuthMeBlockListener blockListener = new AuthMeBlockListener(
  50.             this);
  51.     private final AuthMeEntityListener entityListener = new AuthMeEntityListener(
  52.             this);
  53.  
  54.     public Settings settings;
  55.     public Messages messages;
  56.     public PlayerCache playercache;
  57.     public DataController datacontroller;
  58.     public FlatfileCache invcache;
  59.     public SessionHandler sessionhandler;
  60.     public DataSource datas;
  61.  
  62.     @Override
  63.     public void onEnable() {
  64.         // Creating dir, if it doesn't exist
  65.         final File folder = new File(Settings.PLUGIN_FOLDER);
  66.         if (!folder.exists()) {
  67.             folder.mkdirs();
  68.         }
  69.  
  70.         // Loading config
  71.         File configFile = new File(Settings.PLUGIN_FOLDER, "config.yml");
  72.         if (!configFile.exists()) {
  73.             extractDefaultFile("config.yml");
  74.             configFile = new File(Settings.PLUGIN_FOLDER, "config.yml");
  75.         }
  76.         settings = new Settings(configFile);
  77.  
  78.         // Loading messages
  79.         File messagesFile = new File(Settings.PLUGIN_FOLDER, "messages.yml");
  80.         if (!messagesFile.exists())
  81.             messagesFile = new File(Settings.PLUGIN_FOLDER, "messages.yml");
  82.         messages = new Messages(messagesFile);
  83.  
  84.         // Create a new cache for player stuff
  85.         playercache = new PlayerCache();
  86.  
  87.         // Create the cache that's needed for inventory backups
  88.         invcache = new FlatfileCache();
  89.  
  90.         // Create a session handler, that manages player sessions
  91.         int maxTimePeriod = settings.MaximalTimePeriod();
  92.         boolean IPCheck = settings.SessionIPCheckEnabled();
  93.         sessionhandler = new SessionHandler(maxTimePeriod, IPCheck);
  94.  
  95.         // Save the current time to use it later
  96.         long before = System.currentTimeMillis();
  97.  
  98.         // Create the wished DataSource
  99.         if (settings.DataSource().equals("mysql")) {
  100.             MessageHandler.showInfo("Using MySQL as datasource!");
  101.  
  102.             String host = settings.MySQLConnectionHost();
  103.             int port = settings.MySQLConnectionPort();
  104.             String database = settings.MySQLConnectionDatabase();
  105.             String username = settings.MySQLConnectionUsername();
  106.             String password = settings.MySQLConnectionPassword();
  107.             String tableName = settings.MySQLCustomTableName();
  108.             String columnName = settings.MySQLCustomColumnName();
  109.             String columnPassword = settings.MySQLCustomColumnPassword();
  110.             datas = new MySQLData(host, port, database, username, password,
  111.                     tableName, columnName, columnPassword);
  112.         } else {
  113.             MessageHandler.showInfo("Using flatfile as datasource!");
  114.  
  115.             datas = new FlatfileData();
  116.         }
  117.  
  118.         // Setting up the DataController
  119.         boolean caching = settings.CachingEnabled();
  120.         datacontroller = new DataController(datas, caching);
  121.  
  122.         // Outputs the time that was needed for loading the registrations
  123.         float timeDiff = (float) (System.currentTimeMillis() - before);
  124.         timeDiff = timeDiff / 1000;
  125.  
  126.         if (caching) {
  127.             MessageHandler.showInfo("Cache for registrations is enabled!");
  128.             MessageHandler
  129.                     .showInfo(datacontroller.getRegisteredPlayerAmount()
  130.                             + " registered players loaded in " + timeDiff
  131.                             + " seconds!");
  132.         } else {
  133.             MessageHandler.showInfo("Cache for registrations is disabled!");
  134.             MessageHandler.showInfo("There are "
  135.                     + datacontroller.getRegisteredPlayerAmount()
  136.                     + " registered players in database!");
  137.         }
  138.  
  139.         MessageHandler.showInfo("Version " + this.getDescription().getVersion()
  140.                 + " is enabled!");
  141.  
  142.         // Check if the plugin was loaded under runtime or was reloaded
  143.         if (getServer().getOnlinePlayers().length > 0) {
  144.             onAuthMeReload();
  145.         }
  146.  
  147.         // Setting up the listeners
  148.         PluginManager pm = getServer().getPluginManager();
  149.  
  150.         pm.registerEvent(Event.Type.PLAYER_COMMAND_PREPROCESS, playerListener,
  151.                 Priority.Lowest, this);
  152.         pm.registerEvent(Event.Type.PLAYER_CHAT, playerListener,
  153.                 Priority.Normal, this);
  154.         pm.registerEvent(Event.Type.PLAYER_MOVE, playerListener,
  155.                 Priority.Normal, this);
  156.         pm.registerEvent(Event.Type.PLAYER_LOGIN, playerListener,
  157.                 Priority.Normal, this);
  158.         pm.registerEvent(Event.Type.PLAYER_JOIN, playerListener,
  159.                 Priority.Normal, this);
  160.         pm.registerEvent(Event.Type.PLAYER_QUIT, playerListener,
  161.                 Priority.Normal, this);
  162.         pm.registerEvent(Event.Type.PLAYER_KICK, playerListener,
  163.                 Priority.Normal, this);
  164.         pm.registerEvent(Event.Type.PLAYER_PICKUP_ITEM, playerListener,
  165.                 Priority.Normal, this);
  166.         pm.registerEvent(Event.Type.PLAYER_INTERACT, playerListener,
  167.                 Priority.Normal, this);
  168.         pm.registerEvent(Event.Type.BLOCK_PLACE, blockListener,
  169.                 Priority.Normal, this);
  170.         pm.registerEvent(Event.Type.BLOCK_BREAK, blockListener,
  171.                 Priority.Normal, this);
  172.         pm.registerEvent(Event.Type.ENTITY_DAMAGE, entityListener,
  173.                 Priority.Normal, this);
  174.         pm.registerEvent(Event.Type.ENTITY_TARGET, entityListener,
  175.                 Priority.Normal, this);
  176.     }
  177.  
  178.     public void onAuthMeReload() {
  179.         for (Player player : getServer().getOnlinePlayers()) {
  180.             // Is player really registered?
  181.             boolean regged = datacontroller
  182.                     .isPlayerRegistered(player.getName());
  183.  
  184.             // Create PlayerCache
  185.             playercache.createCache(player, regged, false);
  186.             player.sendMessage(messages.getMessage("Alert.PluginReloaded"));
  187.         }
  188.  
  189.         MessageHandler.showInfo("AuthMe restored the player cache!");
  190.     }
  191.  
  192.     @Override
  193.     public void onDisable() {
  194.         MessageHandler.showInfo("Version " + this.getDescription().getVersion()
  195.                 + " is disabled!");
  196.     }
  197.  
  198.     @Override
  199.     public boolean onCommand(CommandSender sender, Command cmd,
  200.             String commandLabel, String[] args) {
  201.  
  202.         if (commandLabel.equalsIgnoreCase("register")) {
  203.             if (!(sender instanceof Player)) {
  204.                 return false;
  205.             }
  206.             Player player = (Player) sender;
  207.  
  208.             if (!settings.RegisterEnabled()) {
  209.                 player.sendMessage("Registrations are currently disabled!");
  210.                 return false;
  211.             }
  212.  
  213.             if (playercache.isPlayerRegistered(player)) {
  214.                 player.sendMessage(messages
  215.                         .getMessage("Error.AlreadyRegistered"));
  216.                 return false;
  217.             }
  218.  
  219.             Map<String, String> customFields = settings
  220.                     .getCustomInformationFields();
  221.             Map<String, String> customInformation = new HashMap<String, String>();
  222.  
  223.             // Do we have custom tables and mysql as datasource?
  224.             if (customFields.size() > 0
  225.                     && settings.DataSource().equals("mysql")) {
  226.  
  227.                 // Check if the player typed the right amount of fields
  228.                 if (args.length != customFields.size() + 1) {
  229.                     String usageCustomFields = "";
  230.                     for (String key : customFields.keySet()) {
  231.                         usageCustomFields = usageCustomFields + "<" + key
  232.                                 + "> ";
  233.                     }
  234.                     player.sendMessage("Usage: /register <password> "
  235.                             + usageCustomFields);
  236.                     return false;
  237.                 }
  238.  
  239.                 // Check the custom fields, if they comply to the RegEx'es and
  240.                 // extract the informations and save them in a hashtable
  241.                 int counter = 1;
  242.                 for (String key : customFields.keySet()) {
  243.                     if (!args[counter].matches(customFields.get(key))) {
  244.                         player.sendMessage(messages.getMessage(
  245.                                 "Command.RegisterExtraInfoCheckFailed", key));
  246.                         return false;
  247.                     }
  248.                     customInformation.put(key, args[counter]);
  249.                     counter++;
  250.                 }
  251.  
  252.             } else {
  253.                 // Check if the player typed the right amount of fields
  254.                 if (args.length != 1) {
  255.                     player.sendMessage("Usage: /register <password>");
  256.                     return false;
  257.                 }
  258.             }
  259.  
  260.             String password = args[0];
  261.  
  262.             String salt = Long.toHexString(Double.doubleToLongBits(Math.random()));
  263.             boolean executed = datacontroller.saveAuth(player.getName(),
  264.                                                        secureCrypt(password,salt),
  265.                                                        customInformation);
  266.  
  267.             if (!executed) {
  268.                 player.sendMessage(messages.getMessage("Error.DatasourceError"));
  269.                 MessageHandler
  270.                         .showError("Failed to save an auth due to an error in the datasource!");
  271.                 return false;
  272.             }
  273.  
  274.             playercache.setPlayerAuthenticated(player, true);
  275.             playercache.setPlayerRegistered(player, true);
  276.  
  277.             player.sendMessage(messages.getMessage("Command.RegisterResponse",
  278.                     password));
  279.             MessageHandler.showInfo("Player " + player.getName()
  280.                     + " is now registered!");
  281.  
  282.             return true;
  283.         }
  284.  
  285.         if (commandLabel.equalsIgnoreCase("login")
  286.                 || commandLabel.equalsIgnoreCase("l")) {
  287.             if (!(sender instanceof Player)) {
  288.                 return false;
  289.             }
  290.             Player player = (Player) sender;
  291.  
  292.             if (!settings.LoginEnabled()) {
  293.                 player.sendMessage("Logins are currently disabled!");
  294.                 return false;
  295.             }
  296.  
  297.             if (args.length != 1) {
  298.                 player.sendMessage("Usage: /login <password>");
  299.                 return false;
  300.             }
  301.  
  302.             String playername = player.getName();
  303.             String password = args[0];
  304.  
  305.             if (!playercache.isPlayerRegistered(player)) {
  306.                 player.sendMessage(messages.getMessage("Error.NotRegistered"));
  307.                 return false;
  308.             }
  309.  
  310.             if (playercache.isPlayerAuthenticated(player)) {
  311.                 player.sendMessage(messages.getMessage("Error.AlreadyLoggedIn"));
  312.                 return false;
  313.             }
  314.  
  315.             final String realPassword = datacontroller.getHash(playername);
  316.  
  317.             if(!comparePassword(password, realPassword)) {
  318.                 if (settings.KickOnWrongPassword()) {
  319.                     player.kickPlayer(messages
  320.                             .getMessage("Error.InvalidPassword"));
  321.                 } else {
  322.                     player.sendMessage(messages
  323.                             .getMessage("Error.InvalidPassword"));
  324.                 }
  325.                 MessageHandler.showInfo("Player " + player.getName()
  326.                         + " tried to login with a wrong password!");
  327.                 return false;
  328.             }
  329.  
  330.             LoginTimeout.removeLoginTimeout(this, player);
  331.             performPlayerLogin(player);
  332.  
  333.             player.sendMessage(messages.getMessage("Command.LoginResponse"));
  334.             MessageHandler.showInfo("Player " + player.getName()
  335.                     + " logged in!");
  336.  
  337.             return true;
  338.         }
  339.  
  340.         if (commandLabel.equalsIgnoreCase("changepassword")) {
  341.             if (!(sender instanceof Player)) {
  342.                 return false;
  343.             }
  344.             Player player = (Player) sender;
  345.  
  346.             if (!settings.ChangePasswordEnabled()) {
  347.                 player.sendMessage("Changing passwords is currently disabled!");
  348.                 return false;
  349.             }
  350.             if (!playercache.isPlayerRegistered(player)) {
  351.                 player.sendMessage(messages.getMessage("Error.NotRegistered"));
  352.                 return false;
  353.             }
  354.             if (!playercache.isPlayerAuthenticated(player)) {
  355.                 player.sendMessage(messages.getMessage("Error.NotLogged"));
  356.                 return false;
  357.             }
  358.             if (args.length != 2) {
  359.                 player.sendMessage("Usage: /changepassword <oldpassword> <newpassword>");
  360.                 return false;
  361.             }
  362.             if(!comparePassword(args[0], datacontroller.getHash(player.getName()))) {
  363.                 player.sendMessage(messages.getMessage("Error.WrongPassword"));
  364.                 return false;
  365.             }
  366.  
  367.             String salt = Long.toHexString(Double.doubleToLongBits(Math.random()));
  368.             boolean executed = datacontroller.updateAuth(player.getName(),secureCrypt(args[1],salt));
  369.  
  370.             if (!executed) {
  371.                 player.sendMessage(messages.getMessage("Error.DatasourceError"));
  372.                 MessageHandler
  373.                         .showError("Failed to update an auth due to an error in the datasource!");
  374.                 return false;
  375.             }
  376.  
  377.             player.sendMessage(messages
  378.                     .getMessage("Command.ChangePasswordResponse"));
  379.             MessageHandler.showInfo("Player " + player.getName()
  380.                     + " changed his password!");
  381.         }
  382.  
  383.         if (commandLabel.equalsIgnoreCase("logout")) {
  384.             if (!(sender instanceof Player)) {
  385.                 return false;
  386.             }
  387.             Player player = (Player) sender;
  388.  
  389.             if (!settings.LogoutEnabled()) {
  390.                 player.sendMessage("Logging out is currently disabled!");
  391.                 return false;
  392.             }
  393.  
  394.             if (!playercache.isPlayerAuthenticated(player)) {
  395.                 player.sendMessage(messages.getMessage("Error.NotLogged"));
  396.                 return false;
  397.             }
  398.  
  399.             playercache.setPlayerAuthenticated(player, false);
  400.  
  401.             player.sendMessage(messages.getMessage("Command.LogoutResponse"));
  402.             MessageHandler.showInfo("Player " + player.getName()
  403.                     + " logged out!");
  404.         }
  405.  
  406.         if (commandLabel.equalsIgnoreCase("unregister")) {
  407.             if (!(sender instanceof Player)) {
  408.                 return false;
  409.             }
  410.             Player player = (Player) sender;
  411.  
  412.             if (!settings.UnregisterEnabled()) {
  413.                 player.sendMessage("Unregistering is currently disabled!");
  414.                 return false;
  415.             }
  416.             if (!playercache.isPlayerRegistered(player)) {
  417.                 player.sendMessage(messages.getMessage("Error.NotRegistered"));
  418.                 return false;
  419.             }
  420.             if (!playercache.isPlayerAuthenticated(player)) {
  421.                 player.sendMessage(messages.getMessage("Error.NotLogged"));
  422.                 return false;
  423.             }
  424.             if (args.length != 1) {
  425.                 player.sendMessage("Usage: /unregister <password>");
  426.                 return false;
  427.             }
  428.             if(!comparePassword(args[0], datacontroller.getHash(player.getName()))) {
  429.                 player.sendMessage(messages.getMessage("Error.WrongPassword"));
  430.                 return false;
  431.             }
  432.  
  433.             boolean executed = datacontroller.removeAuth(player.getName());
  434.  
  435.             if (!executed) {
  436.                 player.sendMessage(messages.getMessage("Error.DatasourceError"));
  437.                 MessageHandler
  438.                         .showError("Failed to remove an auth due to an error in the datasource!");
  439.                 return false;
  440.             }
  441.  
  442.             playercache.recreateCache(player);
  443.  
  444.             player.sendMessage(messages
  445.                     .getMessage("Command.UnregisterResponse"));
  446.             MessageHandler.showInfo("Player " + player.getName()
  447.                     + " is now unregistered!");
  448.         }
  449.  
  450.         if (commandLabel.equalsIgnoreCase("authme")) {
  451.  
  452.             String pre = "";
  453.  
  454.             if (sender instanceof Player) {
  455.                 Player player = (Player) sender;
  456.  
  457.                 if (!player.isOp()) {
  458.                     player.sendMessage("You dont have permission to do this!");
  459.                     return false;
  460.                 }
  461.                 if (!playercache.isPlayerAuthenticated(player)) {
  462.                     player.sendMessage(messages.getMessage("Error.NotLogged"));
  463.                     return false;
  464.                 }
  465.  
  466.                 pre = "/";
  467.             }
  468.  
  469.             if (args.length == 0) {
  470.                 sender.sendMessage("Usage: "
  471.                         + pre
  472.                         + "authme <reloadconfig | reloadcache | toggleregs | deleteauth>");
  473.                 return false;
  474.             }
  475.  
  476.             if (args[0].equals("deleteauth")) {
  477.                 if (args.length != 2) {
  478.                     sender.sendMessage("Usage: " + pre
  479.                             + "authme deleteauth <playername>");
  480.                     return false;
  481.                 }
  482.             }
  483.  
  484.             // /authme reload cache Command
  485.             if (args[0].equals("reloadcache")) {
  486.                 if (!settings.ReloadEnabled()) {
  487.                     sender.sendMessage("Reloading authentications is currently disabled!");
  488.                     return false;
  489.                 }
  490.                 if (!settings.CachingEnabled()) {
  491.                     sender.sendMessage(ChatColor.RED
  492.                             + "Error: There is no need to reload the authentication cache. Caching is disabled in config anyway!");
  493.                     return false;
  494.                 }
  495.  
  496.                 datacontroller = new DataController(datas, true);
  497.  
  498.                 sender.sendMessage(ChatColor.GREEN
  499.                         + "AuthMe has successfully reloaded all authentications!");
  500.  
  501.                 MessageHandler
  502.                         .showInfo("Authentication cache reloaded by command!");
  503.             }
  504.  
  505.             // /authme reload config Command
  506.             if (args[0].equals("reloadconfig")) {
  507.                 File configFile = new File(Settings.PLUGIN_FOLDER, "config.yml");
  508.                 if (!configFile.exists()) {
  509.                     extractDefaultFile("config.yml");
  510.                     configFile = new File(Settings.PLUGIN_FOLDER, "config.yml");
  511.                 }
  512.                 settings = new Settings(configFile);
  513.  
  514.                 sender.sendMessage(ChatColor.GREEN
  515.                         + "AuthMe has successfully reloaded it's config file!");
  516.  
  517.                 MessageHandler.showInfo("Config file reloaded by command!");
  518.             }
  519.  
  520.             // /authme toggle regs Command
  521.             if (args[0].equals("toggleregs")) {
  522.                 String key = "Commands.Users.RegisterEnabled";
  523.                 if (settings.getBoolean(key, true)) {
  524.                     settings.setProperty(key, false);
  525.                     sender.sendMessage(ChatColor.GREEN
  526.                             + "AuthMe has successfully disabled registrations!");
  527.                 } else {
  528.                     settings.setProperty(key, true);
  529.                     sender.sendMessage(ChatColor.GREEN
  530.                             + "AuthMe has successfully enabled registrations!");
  531.                 }
  532.             }
  533.  
  534.             // /authme delete auth Command
  535.             if (args[0].equals("deleteauth")) {
  536.                 if (!settings.ResetEnabled()) {
  537.                     sender.sendMessage("Reseting a authentication is currently disabled!");
  538.                     return false;
  539.                 }
  540.                 if (!datacontroller.isPlayerRegistered(args[1])) {
  541.                     sender.sendMessage(messages
  542.                             .getMessage("Error.PlayerNotRegistered"));
  543.                     return false;
  544.                 }
  545.  
  546.                 boolean executed = datacontroller.removeAuth(args[1]);
  547.  
  548.                 if (!executed) {
  549.                     sender.sendMessage(messages
  550.                             .getMessage("Error.DatasourceError"));
  551.                     MessageHandler
  552.                             .showError("Failed to remove an auth due to an error in the datasource!");
  553.                     return false;
  554.                 }
  555.  
  556.                 // If the player is online, recreate his cache
  557.                 Player delPlayer = getServer().getPlayer(args[1]);
  558.                 if (delPlayer != null) {
  559.                     playercache.recreateCache(delPlayer);
  560.                 }
  561.  
  562.                 sender.sendMessage(ChatColor.GREEN
  563.                         + "This player is now unregistered!");
  564.                 MessageHandler.showInfo("Account of " + args[1]
  565.                         + " got deleted by command!");
  566.             }
  567.  
  568.         }
  569.  
  570.         return false;
  571.     }
  572.  
  573.     public boolean checkAuth(Player player) {
  574.  
  575.         if (playercache.isPlayerAuthenticated(player)) {
  576.             return true;
  577.         }
  578.  
  579.         int alertInterval = settings.alertInterval();
  580.         if (playercache.isPlayerRegistered(player)) {
  581.             if (playercache.isAlertNeeded(player, alertInterval)) {
  582.                 player.sendMessage(messages.getMessage("Alert.Login"));
  583.             }
  584.             return false;
  585.         }
  586.  
  587.         if (settings.ForceRegistration()) {
  588.             if (playercache.isAlertNeeded(player, alertInterval)) {
  589.                 player.sendMessage(messages.getMessage("Alert.Registration"));
  590.             }
  591.             return false;
  592.         } else {
  593.             return true;
  594.         }
  595.     }
  596.  
  597.     // Checks if the player doesn't have to log in to do stuff(Bots?)
  598.     public boolean checkUnrestrictedAccess(Player player) {
  599.         List<Object> players = settings.AllowPlayerUnrestrictedAccess();
  600.         if (!players.isEmpty()) {
  601.             for (Object playernameObj : players) {
  602.                 String playername = (String) playernameObj;
  603.                 if (player.getName().equalsIgnoreCase(playername)
  604.                         || player.getDisplayName().equalsIgnoreCase(playername)) {
  605.                     return true;
  606.                 }
  607.             }
  608.         }
  609.         return false;
  610.     }
  611.  
  612.     public void performPlayerLogin(Player player) {
  613.         playercache.setPlayerAuthenticated(player, true);
  614.  
  615.         if (invcache.doesCacheExist(player.getName())) {
  616.             InventoryArmour invarm = invcache.readCache(player.getName());
  617.  
  618.             ItemStack[] invstackbackup = invarm.getInventory();
  619.             player.getInventory().setContents(invstackbackup);
  620.  
  621.             ItemStack[] armStackBackup = invarm.getArmour();
  622.  
  623.             if (armStackBackup[3] != null) {
  624.                 if (armStackBackup[3].getAmount() != 0) {
  625.                     player.getInventory().setHelmet(armStackBackup[3]);
  626.                 }
  627.             }
  628.             if (armStackBackup[2] != null) {
  629.                 if (armStackBackup[2].getAmount() != 0) {
  630.                     player.getInventory().setChestplate(armStackBackup[2]);
  631.                 }
  632.             }
  633.             if (armStackBackup[1] != null) {
  634.                 if (armStackBackup[1].getAmount() != 0) {
  635.                     player.getInventory().setLeggings(armStackBackup[1]);
  636.                 }
  637.             }
  638.             if (armStackBackup[0] != null) {
  639.                 if (armStackBackup[0].getAmount() != 0) {
  640.                     player.getInventory().setBoots(armStackBackup[0]);
  641.                 }
  642.             }
  643.  
  644.             invcache.removeCache(player.getName());
  645.         }
  646.     }
  647.  
  648.     private boolean comparePassword(String password, String hash) {
  649.         if(hash.contains("$")) {
  650.             String[] data = hash.split("\\$");
  651.             if(data.length > 3 && data[1].equals("SHA")) {
  652.                 return hash.equals(secureCrypt(password,data[2]));
  653.             } else {
  654.                 return false;
  655.             }
  656.         } else {
  657.             return hash.equals(digestToMD5(password));
  658.         }
  659.     }
  660.  
  661.     private String secureCrypt(String password, String salt) {
  662.         return "$SHA$" + salt + "$" + digestToSHA256(digestToSHA256(password) + salt);
  663.     }
  664.  
  665.     private String digestToSHA256(String message) {
  666.         try {
  667.             MessageDigest md = MessageDigest.getInstance("SHA-256");
  668.             md.reset();
  669.             md.update(message.getBytes("UTF-8"));
  670.             byte[] digest = md.digest();
  671.             BigInteger i = new BigInteger(1, digest);
  672.             return String.format("%0" + (digest.length << 1) + "x", i);
  673.         } catch(UnsupportedEncodingException ex) {
  674.         } catch(NoSuchAlgorithmException ex) {
  675.         }
  676.         return "";
  677.     }
  678.  
  679.     public String digestToMD5(String string) {
  680.         try {
  681.             final MessageDigest m = MessageDigest.getInstance("MD5");
  682.             final byte[] bytes = string.getBytes();
  683.             m.update(bytes, 0, bytes.length);
  684.             final BigInteger i = new BigInteger(1, m.digest());
  685.  
  686.             return String.format("%1$032X", i).toLowerCase();
  687.         } catch(final Exception e) {
  688.         }
  689.  
  690.         return "";
  691.     }
  692.  
  693.     public void extractDefaultFile(String name) {
  694.         File actual = new File(Settings.PLUGIN_FOLDER, name);
  695.         if (!actual.exists()) {
  696.  
  697.             InputStream input = this.getClass().getResourceAsStream(
  698.                     "/default/" + name);
  699.             if (input != null) {
  700.                 FileOutputStream output = null;
  701.  
  702.                 try {
  703.                     output = new FileOutputStream(actual);
  704.                     byte[] buf = new byte[8192];
  705.                     int length = 0;
  706.  
  707.                     while ((length = input.read(buf)) > 0) {
  708.                         output.write(buf, 0, length);
  709.                     }
  710.  
  711.                     MessageHandler.showInfo("Default file written: " + name);
  712.                 } catch (Exception e) {
  713.                     e.printStackTrace();
  714.                 } finally {
  715.                     try {
  716.                         if (input != null)
  717.                             input.close();
  718.                     } catch (Exception e) {
  719.                     }
  720.  
  721.                     try {
  722.                         if (output != null)
  723.                             output.close();
  724.                     } catch (Exception e) {
  725.  
  726.                     }
  727.                 }
  728.             }
  729.         }
  730.     }
  731.  
  732. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement