Update 3.1.1

//Changes 3.1.1://
* Do /login correctly in the correct thread
* Add a way to force some commands after /login
* Try a fix for bungeecord , let's see ...
* Fix Logout command ( pos + inventory )
* Fix PHPBB support + random salt
* Add a bypass antibot perm : authme.bypassantibot
* Translation file will automatically update now
* Some other fixes
This commit is contained in:
Xephi
2013-12-12 05:34:44 +01:00
parent 10b4eaeca7
commit bc8d11ebd6
63 changed files with 1424 additions and 501 deletions
@@ -25,12 +25,14 @@ import org.bukkit.plugin.java.JavaPlugin;
import fr.xephi.authme.AuthMe;
import fr.xephi.authme.ConsoleLogger;
import fr.xephi.authme.Utils;
import fr.xephi.authme.api.API;
import fr.xephi.authme.cache.auth.PlayerAuth;
import fr.xephi.authme.cache.auth.PlayerCache;
import fr.xephi.authme.converter.FlatToSql;
import fr.xephi.authme.converter.FlatToSqlite;
import fr.xephi.authme.converter.RakamakConverter;
import fr.xephi.authme.converter.xAuthToFlat;
import fr.xephi.authme.converter.newxAuthToFlat;
import fr.xephi.authme.converter.oldxAuthToFlat;
import fr.xephi.authme.datasource.DataSource;
import fr.xephi.authme.security.PasswordSecurity;
import fr.xephi.authme.settings.Messages;
@@ -66,6 +68,8 @@ public class AdminCommand implements CommandExecutor {
sender.sendMessage("/authme spawn - Teleport you to the AuthMe SpawnPoint");
sender.sendMessage("/authme chgemail <playername> <email> - Change player email");
sender.sendMessage("/authme getemail <playername> - Get player email");
sender.sendMessage("/authme purgelastpos <playername> - Purge last position for a player");
sender.sendMessage("/authme switchantibot on/off - Enable/Disable antibot method");
return true;
}
@@ -100,7 +104,16 @@ public class AdminCommand implements CommandExecutor {
try {
long days = Long.parseLong(args[1]) * 86400000;
long until = new Date().getTime() - days;
sender.sendMessage("Deleted " + database.purgeDatabase(until) + " user accounts");
List<String> purged = database.autoPurgeDatabase(until);
sender.sendMessage("Deleted " + purged.size() + " user accounts");
if (Settings.purgeEssentialsFile && plugin.ess != null)
plugin.purgeEssentials(purged);
if (Settings.purgePlayerDat)
plugin.purgeDat(purged);
if (Settings.purgeLimitedCreative)
plugin.purgeLimitedCreative(purged);
if (Settings.purgeAntiXray)
plugin.purgeAntiXray(purged);
return true;
} catch (NumberFormatException e) {
sender.sendMessage("Usage: /authme purge <DAYS>");
@@ -256,24 +269,27 @@ public class AdminCommand implements CommandExecutor {
}
try {
String name = args[1].toLowerCase();
String hash = PasswordSecurity.getHash(Settings.getPasswordHash, args[2], name);
if (database.isAuthAvailable(name)) {
sender.sendMessage(m._("user_regged"));
return true;
}
PlayerAuth auth = new PlayerAuth(name, hash, "198.18.0.1", 0);
auth.setSalt(PasswordSecurity.userSalt.get(name));
String hash = PasswordSecurity.getHash(Settings.getPasswordHash, args[2], name);
PlayerAuth auth = new PlayerAuth(name, hash, "198.18.0.1", 0L, "your@email.com", API.getPlayerRealName(name));
if (PasswordSecurity.userSalt.containsKey(name) && PasswordSecurity.userSalt.get(name) != null)
auth.setSalt(PasswordSecurity.userSalt.get(name));
else
auth.setSalt("");
if (!database.saveAuth(auth)) {
sender.sendMessage(m._("error"));
return true;
}
database.updateSalt(auth);
sender.sendMessage(m._("registered"));
ConsoleLogger.info(args[1] + " registered");
} catch (NoSuchAlgorithmException ex) {
ConsoleLogger.showError(ex.getMessage());
sender.sendMessage(m._("error"));
}
return true;
} else if (args[0].equalsIgnoreCase("convertflattosql")) {
try {
FlatToSql.FlatToSqlConverter();
@@ -294,13 +310,22 @@ public class AdminCommand implements CommandExecutor {
} catch (NullPointerException ex) {
System.out.println(ex.getMessage());
}
return true;
} else if (args[0].equalsIgnoreCase("xauthimport")) {
xAuthToFlat converter = new xAuthToFlat(plugin, database);
if (converter.convert(sender)) {
sender.sendMessage("[AuthMe] Successfull convert from xAuth database");
} else {
sender.sendMessage("[AuthMe] Error while trying to convert from xAuth database");
}
try {
Class.forName("com.cypherx.xauth.xAuth");
oldxAuthToFlat converter = new oldxAuthToFlat(plugin, database, sender);
converter.run();
} catch (ClassNotFoundException e) {
try {
Class.forName("de.luricos.bukkit.xAuth.xAuth");
newxAuthToFlat converter = new newxAuthToFlat(plugin, database, sender);
converter.run();
} catch (ClassNotFoundException ce) {
sender.sendMessage("[AuthMe] No version of xAuth found or xAuth isn't enable! ");
}
}
return true;
} else if (args[0].equalsIgnoreCase("getemail")) {
if (args.length != 2) {
sender.sendMessage("Usage: /authme getemail playername");
@@ -343,6 +368,7 @@ public class AdminCommand implements CommandExecutor {
} catch (NullPointerException ex) {
ConsoleLogger.showError(ex.getMessage());
}
return true;
} else if (args[0].equalsIgnoreCase("setspawn")) {
try {
if (sender instanceof Player) {
@@ -355,6 +381,7 @@ public class AdminCommand implements CommandExecutor {
} catch (NullPointerException ex) {
ConsoleLogger.showError(ex.getMessage());
}
return true;
} else if (args[0].equalsIgnoreCase("purgebannedplayers")) {
List<String> bannedPlayers = new ArrayList<String>();
for (OfflinePlayer off : plugin.getServer().getBannedPlayers()) {
@@ -371,6 +398,15 @@ public class AdminCommand implements CommandExecutor {
}
});
}
if (Settings.purgeEssentialsFile && plugin.ess != null)
plugin.purgeEssentials(bannedPlayers);
if (Settings.purgePlayerDat)
plugin.purgeDat(bannedPlayers);
if (Settings.purgeLimitedCreative)
plugin.purgeLimitedCreative(bannedPlayers);
if (Settings.purgeAntiXray)
plugin.purgeAntiXray(bannedPlayers);
return true;
} else if (args[0].equalsIgnoreCase("spawn")) {
try {
if (sender instanceof Player) {
@@ -383,6 +419,7 @@ public class AdminCommand implements CommandExecutor {
} catch (NullPointerException ex) {
ConsoleLogger.showError(ex.getMessage());
}
return true;
} else if (args[0].equalsIgnoreCase("changepassword") || args[0].equalsIgnoreCase("cp")) {
if (args.length != 3) {
sender.sendMessage("Usage: /authme changepassword playername newpassword");
@@ -413,6 +450,7 @@ public class AdminCommand implements CommandExecutor {
ConsoleLogger.showError(ex.getMessage());
sender.sendMessage(m._("error"));
}
return true;
} else if (args[0].equalsIgnoreCase("unregister") || args[0].equalsIgnoreCase("unreg") || args[0].equalsIgnoreCase("del") ) {
if (args.length != 2) {
sender.sendMessage("Usage: /authme unregister playername");
@@ -426,6 +464,49 @@ public class AdminCommand implements CommandExecutor {
PlayerCache.getInstance().removePlayer(name);
sender.sendMessage("unregistered");
ConsoleLogger.info(args[1] + " unregistered");
return true;
} else if (args[0].equalsIgnoreCase("purgelastpos")){
if (args.length != 2) {
sender.sendMessage("Usage: /authme purgelastpos playername");
return true;
}
try {
String name = args[1].toLowerCase();
PlayerAuth auth = database.getAuth(name);
if (auth == null) {
sender.sendMessage("The player " + name + " is not registered ");
return true;
}
auth.setQuitLocX(0);
auth.setQuitLocY(0);
auth.setQuitLocZ(0);
auth.setWorld("world");
database.updateQuitLoc(auth);
sender.sendMessage(name + " 's last pos location is now reset");
} catch (Exception e) {
ConsoleLogger.showError("An error occured while trying to reset location or player do not exist, please see below: ");
ConsoleLogger.showError(e.getMessage());
if (sender instanceof Player)
sender.sendMessage("An error occured while trying to reset location or player do not exist, please see logs");
}
return true;
} else if (args[0].equalsIgnoreCase("switchantibot")) {
if (args.length != 2) {
sender.sendMessage("Usage : /authme switchantibot on/off");
return true;
}
if (args[1].equalsIgnoreCase("on")) {
plugin.switchAntiBotMod(true);
sender.sendMessage("[AuthMe] AntiBotMod enabled");
return true;
}
if (args[1].equalsIgnoreCase("off")) {
plugin.switchAntiBotMod(false);
sender.sendMessage("[AuthMe] AntiBotMod disabled");
return true;
}
sender.sendMessage("Usage : /authme switchantibot on/off");
return true;
} else {
sender.sendMessage("Usage: /authme reload|register playername password|changepassword playername password|unregister playername");
}
@@ -59,7 +59,10 @@ public class ChangePasswordCommand implements CommandExecutor {
if (PasswordSecurity.comparePasswordWithHash(args[0], PlayerCache.getInstance().getAuth(name).getHash(), name)) {
PlayerAuth auth = PlayerCache.getInstance().getAuth(name);
auth.setHash(hashnew);
auth.setSalt(PasswordSecurity.userSalt.get(name));
if (PasswordSecurity.userSalt.containsKey(name) && PasswordSecurity.userSalt.get(name) != null)
auth.setSalt(PasswordSecurity.userSalt.get(name));
else
auth.setSalt("");
if (!database.updatePassword(auth)) {
player.sendMessage(m._("error"));
return true;
@@ -35,7 +35,7 @@ public class LoginCommand implements CommandExecutor {
player.sendMessage(m._("no_perm"));
return true;
}
plugin.management.performLogin(player, args[0], false);
plugin.management.performLogin(player, args[0], false, false);
return true;
}
}
@@ -65,18 +65,14 @@ public class LogoutCommand implements CommandExecutor {
PlayerAuth auth = PlayerCache.getInstance().getAuth(name);
auth.setIp("198.18.0.1");
database.updateSession(auth);
auth.setQuitLocX(player.getLocation().getBlockX());
auth.setQuitLocY(player.getLocation().getBlockY());
auth.setQuitLocZ(player.getLocation().getBlockZ());
auth.setWorld(player.getWorld().getName());
database.updateQuitLoc(auth);
PlayerCache.getInstance().removePlayer(name);
LimboCache.getInstance().addLimboPlayer(player , utils.removeAll(player));
LimboCache.getInstance().addLimboPlayer(player);
if(Settings.protectInventoryBeforeLogInEnabled) {
player.getInventory().setArmorContents(new ItemStack[4]);
player.getInventory().setContents(new ItemStack[36]);
// create cache file for handling lost of inventories on unlogged in status
DataFileCache playerData = new DataFileCache(player.getInventory().getContents(),player.getInventory().getArmorContents());
playerBackup.createCache(name, playerData, LimboCache.getInstance().getLimboPlayer(name).getGroup(),LimboCache.getInstance().getLimboPlayer(name).getOperator(),LimboCache.getInstance().getLimboPlayer(name).isFlying());
}
if (Settings.isTeleportToSpawnEnabled) {
Location spawnLoc = player.getWorld().getSpawnLocation();
if (plugin.essentialsSpawn != null) {
@@ -94,6 +90,17 @@ public class LogoutCommand implements CommandExecutor {
}
}
if (LimboCache.getInstance().hasLimboPlayer(name))
LimboCache.getInstance().deleteLimboPlayer(name);
LimboCache.getInstance().addLimboPlayer(player , utils.removeAll(player));
LimboCache.getInstance().addLimboPlayer(player);
if(Settings.protectInventoryBeforeLogInEnabled) {
player.getInventory().clear();
// create cache file for handling lost of inventories on unlogged in status
DataFileCache playerData = new DataFileCache(LimboCache.getInstance().getLimboPlayer(name).getInventory(),LimboCache.getInstance().getLimboPlayer(name).getArmour());
playerBackup.createCache(name, playerData, LimboCache.getInstance().getLimboPlayer(name).getGroup(),LimboCache.getInstance().getLimboPlayer(name).getOperator(),LimboCache.getInstance().getLimboPlayer(name).isFlying());
}
int delay = Settings.getRegistrationTimeout * 20;
int interval = Settings.getWarnMessageInterval;
BukkitScheduler sched = sender.getServer().getScheduler();
@@ -18,7 +18,7 @@ import fr.xephi.authme.settings.Messages;
public class PasspartuCommand implements CommandExecutor {
private Utils utils = new Utils();
public AuthMe plugin;
private Messages m;
private Messages m = Messages.getInstance();
public PasspartuCommand(AuthMe plugin) {
this.plugin = plugin;
@@ -39,7 +39,7 @@ public class PasspartuCommand implements CommandExecutor {
if ((sender instanceof Player) && args.length == 1) {
if(utils.readToken(args[0])) {
//bypass login!
plugin.management.performLogin((Player) sender, "dontneed", true);
plugin.management.performLogin((Player) sender, "dontneed", true, false);
return true;
}
sender.sendMessage("Time is expired or Token is Wrong!");
@@ -126,7 +126,7 @@ public class RegisterCommand implements CommandExecutor {
if (PasswordSecurity.userSalt.containsKey(name)) {
try {
final String hashnew = PasswordSecurity.getHash(Settings.getPasswordHash, thePass, name);
final PlayerAuth fAuth = new PlayerAuth(name, hashnew, PasswordSecurity.userSalt.get(name), ip, new Date().getTime(), (int) player.getLocation().getX() , (int) player.getLocation().getY(), (int) player.getLocation().getZ(), player.getLocation().getWorld().getName(), email);
final PlayerAuth fAuth = new PlayerAuth(name, hashnew, PasswordSecurity.userSalt.get(name), ip, new Date().getTime(), (int) player.getLocation().getX() , (int) player.getLocation().getY(), (int) player.getLocation().getZ(), player.getLocation().getWorld().getName(), email, player.getName());
database.saveAuth(fAuth);
database.updateEmail(fAuth);
database.updateSession(fAuth);
@@ -137,7 +137,7 @@ public class RegisterCommand implements CommandExecutor {
} else {
try {
final String hashnew = PasswordSecurity.getHash(Settings.getPasswordHash, thePass, name);
final PlayerAuth fAuth = new PlayerAuth(name, hashnew, ip, new Date().getTime(), (int) player.getLocation().getX() , (int) player.getLocation().getY(), (int) player.getLocation().getZ(), player.getLocation().getWorld().getName(), email);
final PlayerAuth fAuth = new PlayerAuth(name, hashnew, ip, new Date().getTime(), (int) player.getLocation().getX() , (int) player.getLocation().getY(), (int) player.getLocation().getZ(), player.getLocation().getWorld().getName(), email, player.getName());
database.saveAuth(fAuth);
database.updateEmail(fAuth);
database.updateSession(fAuth);
@@ -216,9 +216,9 @@ public class RegisterCommand implements CommandExecutor {
hash = PasswordSecurity.getHash(Settings.getPasswordHash, args[0], name);
if (Settings.getMySQLColumnSalt.isEmpty())
{
auth = new PlayerAuth(name, hash, ip, new Date().getTime());
auth = new PlayerAuth(name, hash, ip, new Date().getTime(), "your@email.com", player.getName());
} else {
auth = new PlayerAuth(name, hash, PasswordSecurity.userSalt.get(name), ip, new Date().getTime());
auth = new PlayerAuth(name, hash, PasswordSecurity.userSalt.get(name), ip, new Date().getTime(), player.getName());
}
if (!database.saveAuth(auth)) {
player.sendMessage(m._("error"));