Fix various code issues as detected by Sonar

Mostly minor changes:
- Add deprecated javadoc tag on deprecated members
- Reduce duplication (FlatFile, BackupService, ...)
- Make methods static
- Reduce size of anonymous classes
- Replace name with displayName in PermissionsSystemType (avoids confusing with Enum name())
- Tabs to spaces
- Merge if statements

Code from third-party sources (BCryptService, BinTools, PHPBB) not modified.
This commit is contained in:
ljacqu 2016-11-22 18:19:46 +01:00
parent 8685e50988
commit 7d65d2a7c4
32 changed files with 172 additions and 197 deletions

View File

@ -61,7 +61,7 @@ public class AuthMe extends JavaPlugin {
private static final String LOG_FILENAME = "authme.log"; private static final String LOG_FILENAME = "authme.log";
private static final int CLEANUP_INTERVAL = 5 * TICKS_PER_MINUTE; private static final int CLEANUP_INTERVAL = 5 * TICKS_PER_MINUTE;
// Default version and build number values; // Default version and build number values
private static String pluginVersion = "N/D"; private static String pluginVersion = "N/D";
private static String pluginBuildNumber = "Unknown"; private static String pluginBuildNumber = "Unknown";
@ -132,7 +132,7 @@ public class AuthMe extends JavaPlugin {
@Override @Override
public void onEnable() { public void onEnable() {
// Load the plugin version data from the plugin description file // Load the plugin version data from the plugin description file
loadPluginInfo(); loadPluginInfo(getDescription().getVersion());
// Initialize the plugin // Initialize the plugin
try { try {
@ -175,9 +175,10 @@ public class AuthMe extends JavaPlugin {
/** /**
* Load the version and build number of the plugin from the description file. * Load the version and build number of the plugin from the description file.
*
* @param versionRaw the version as given by the plugin description file
*/ */
private void loadPluginInfo() { private static void loadPluginInfo(String versionRaw) {
String versionRaw = this.getDescription().getVersion();
int index = versionRaw.lastIndexOf("-"); int index = versionRaw.lastIndexOf("-");
if (index != -1) { if (index != -1) {
pluginVersion = versionRaw.substring(0, index); pluginVersion = versionRaw.substring(0, index);
@ -190,10 +191,8 @@ public class AuthMe extends JavaPlugin {
/** /**
* Initialize the plugin and all the services. * Initialize the plugin and all the services.
*
* @throws Exception if the initialization fails
*/ */
private void initialize() throws Exception { private void initialize() {
// Set the Logger instance and log file path // Set the Logger instance and log file path
ConsoleLogger.setLogger(getLogger()); ConsoleLogger.setLogger(getLogger());
ConsoleLogger.setLogFile(new File(getDataFolder(), LOG_FILENAME)); ConsoleLogger.setLogFile(new File(getDataFolder(), LOG_FILENAME));
@ -224,7 +223,7 @@ public class AuthMe extends JavaPlugin {
// TODO: does this still make sense? -sgdc3 // TODO: does this still make sense? -sgdc3
// If the server is empty (fresh start) just set all the players as unlogged // If the server is empty (fresh start) just set all the players as unlogged
if (bukkitService.getOnlinePlayers().size() == 0) { if (bukkitService.getOnlinePlayers().isEmpty()) {
database.purgeLogged(); database.purgeLogged();
} }

View File

@ -19,12 +19,13 @@ import javax.inject.Inject;
/** /**
* Deprecated API of AuthMe. Please use {@link NewAPI} instead. * Deprecated API of AuthMe. Please use {@link NewAPI} instead.
*
* @deprecated Use {@link NewAPI}
*/ */
@Deprecated @Deprecated
public class API { public class API {
public static final String newline = System.getProperty("line.separator"); private static AuthMe instance;
public static AuthMe instance;
private static DataSource dataSource; private static DataSource dataSource;
private static PasswordSecurity passwordSecurity; private static PasswordSecurity passwordSecurity;
private static Management management; private static Management management;
@ -83,28 +84,17 @@ public class API {
} }
public static Location getLastLocation(Player player) { public static Location getLastLocation(Player player) {
try {
PlayerAuth auth = PlayerCache.getInstance().getAuth(player.getName().toLowerCase()); PlayerAuth auth = PlayerCache.getInstance().getAuth(player.getName().toLowerCase());
if (auth != null) { if (auth != null) {
Location loc = new Location(Bukkit.getWorld(auth.getWorld()), auth.getQuitLocX(), auth.getQuitLocY(), auth.getQuitLocZ()); return new Location(Bukkit.getWorld(auth.getWorld()), auth.getQuitLocX(), auth.getQuitLocY(), auth.getQuitLocZ());
return loc; }
} else {
return null; return null;
} }
} catch (NullPointerException ex) { public static void setPlayerInventory(Player player, ItemStack[] content, ItemStack[] armor) {
return null;
}
}
public static void setPlayerInventory(Player player, ItemStack[] content,
ItemStack[] armor) {
try {
player.getInventory().setContents(content); player.getInventory().setContents(content);
player.getInventory().setArmorContents(armor); player.getInventory().setArmorContents(armor);
} catch (NullPointerException ignored) {
}
} }
/** /**

View File

@ -25,8 +25,8 @@ import java.util.List;
*/ */
public class NewAPI { public class NewAPI {
public static NewAPI singleton; private static NewAPI singleton;
public final AuthMe plugin; private final AuthMe plugin;
private final PluginHookService pluginHookService; private final PluginHookService pluginHookService;
private final DataSource dataSource; private final DataSource dataSource;
private final PasswordSecurity passwordSecurity; private final PasswordSecurity passwordSecurity;

View File

@ -87,10 +87,10 @@ public class CommandMapper {
return classes; return classes;
} }
private FoundCommandResult getCommandWithSmallestDifference(CommandDescription base, List<String> parts) { private static FoundCommandResult getCommandWithSmallestDifference(CommandDescription base, List<String> parts) {
// Return the base command with incorrect arg count error if we only have one part // Return the base command with incorrect arg count error if we only have one part
if (parts.size() <= 1) { if (parts.size() <= 1) {
return new FoundCommandResult(base, parts, new ArrayList<String>(), 0.0, INCORRECT_ARGUMENTS); return new FoundCommandResult(base, parts, new ArrayList<>(), 0.0, INCORRECT_ARGUMENTS);
} }
final String childLabel = parts.get(1); final String childLabel = parts.get(1);
@ -115,7 +115,7 @@ public class CommandMapper {
final int partsSize = parts.size(); final int partsSize = parts.size();
List<String> labels = parts.subList(0, Math.min(closestCommand.getLabelCount(), partsSize)); List<String> labels = parts.subList(0, Math.min(closestCommand.getLabelCount(), partsSize));
List<String> arguments = (labels.size() == partsSize) List<String> arguments = (labels.size() == partsSize)
? new ArrayList<String>() ? new ArrayList<>()
: parts.subList(labels.size(), partsSize); : parts.subList(labels.size(), partsSize);
return new FoundCommandResult(closestCommand, labels, arguments, minDifference, status); return new FoundCommandResult(closestCommand, labels, arguments, minDifference, status);
@ -141,7 +141,7 @@ public class CommandMapper {
* *
* @return A command if there was a complete match (including proper argument count), null otherwise * @return A command if there was a complete match (including proper argument count), null otherwise
*/ */
private CommandDescription getSuitableChild(CommandDescription baseCommand, List<String> parts) { private static CommandDescription getSuitableChild(CommandDescription baseCommand, List<String> parts) {
if (CollectionUtils.isEmpty(parts)) { if (CollectionUtils.isEmpty(parts)) {
return null; return null;
} }

View File

@ -54,33 +54,40 @@ public class ChangePasswordAdminCommand implements ExecutableCommand {
} }
// Set the password // Set the password
final String playerNameLowerCase = playerName.toLowerCase(); bukkitService.runTaskOptionallyAsync(() -> changePassword(playerName.toLowerCase(), playerPass, sender));
bukkitService.runTaskOptionallyAsync(new Runnable() {
@Override
public void run() {
PlayerAuth auth = null;
if (playerCache.isAuthenticated(playerNameLowerCase)) {
auth = playerCache.getAuth(playerNameLowerCase);
} else if (dataSource.isAuthAvailable(playerNameLowerCase)) {
auth = dataSource.getAuth(playerNameLowerCase);
} }
/**
* Changes the password of the given player to the given password.
*
* @param nameLowercase the name of the player
* @param password the password to set
* @param sender the sender initiating the password change
*/
private void changePassword(String nameLowercase, String password, CommandSender sender) {
PlayerAuth auth = getAuth(nameLowercase);
if (auth == null) { if (auth == null) {
commandService.send(sender, MessageKey.UNKNOWN_USER); commandService.send(sender, MessageKey.UNKNOWN_USER);
return; return;
} }
HashedPassword hashedPassword = passwordSecurity.computeHash(playerPass, playerNameLowerCase); HashedPassword hashedPassword = passwordSecurity.computeHash(password, nameLowercase);
auth.setPassword(hashedPassword); auth.setPassword(hashedPassword);
if (dataSource.updatePassword(auth)) { if (dataSource.updatePassword(auth)) {
commandService.send(sender, MessageKey.PASSWORD_CHANGED_SUCCESS); commandService.send(sender, MessageKey.PASSWORD_CHANGED_SUCCESS);
ConsoleLogger.info(sender.getName() + " changed password of " + playerNameLowerCase); ConsoleLogger.info(sender.getName() + " changed password of " + nameLowercase);
} else { } else {
commandService.send(sender, MessageKey.ERROR); commandService.send(sender, MessageKey.ERROR);
} }
} }
}); private PlayerAuth getAuth(String nameLowercase) {
if (playerCache.isAuthenticated(nameLowercase)) {
return playerCache.getAuth(nameLowercase);
} else if (dataSource.isAuthAvailable(nameLowercase)) {
return dataSource.getAuth(nameLowercase);
}
return null;
} }
} }

View File

@ -25,7 +25,7 @@ public class LastLoginCommand implements ExecutableCommand {
@Override @Override
public void executeCommand(CommandSender sender, List<String> arguments) { public void executeCommand(CommandSender sender, List<String> arguments) {
// Get the player // Get the player
String playerName = (arguments.size() >= 1) ? arguments.get(0) : sender.getName(); String playerName = arguments.isEmpty() ? sender.getName() : arguments.get(0);
PlayerAuth auth = dataSource.getAuth(playerName); PlayerAuth auth = dataSource.getAuth(playerName);
if (auth == null) { if (auth == null) {

View File

@ -23,7 +23,7 @@ public class ShowEmailCommand extends PlayerCommand {
@Override @Override
public void runCommand(Player player, List<String> arguments) { public void runCommand(Player player, List<String> arguments) {
PlayerAuth auth = playerCache.getAuth(player.getName()); PlayerAuth auth = playerCache.getAuth(player.getName());
if (auth.getEmail() != null && !auth.getEmail().equalsIgnoreCase("your@email.com")) { if (auth.getEmail() != null && !"your@email.com".equalsIgnoreCase(auth.getEmail())) {
commandService.send(player, MessageKey.EMAIL_SHOW, auth.getEmail()); commandService.send(player, MessageKey.EMAIL_SHOW, auth.getEmail());
} else { } else {
commandService.send(player, MessageKey.SHOW_NO_EMAIL); commandService.send(player, MessageKey.SHOW_NO_EMAIL);

View File

@ -189,7 +189,7 @@ public class PlayerAuth {
* @return String * @return String
*/ */
public String serialize() { public String serialize() {
StringBuffer str = new StringBuffer(); StringBuilder str = new StringBuilder();
char d = ';'; char d = ';';
str.append(this.nickname).append(d); str.append(this.nickname).append(d);
str.append(this.realName).append(d); str.append(this.realName).append(d);

View File

@ -9,7 +9,6 @@ import java.io.BufferedReader;
import java.io.BufferedWriter; import java.io.BufferedWriter;
import java.io.Closeable; import java.io.Closeable;
import java.io.File; import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader; import java.io.FileReader;
import java.io.FileWriter; import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
@ -295,19 +294,11 @@ public class FlatFile implements DataSource {
break; break;
} }
} }
} catch (FileNotFoundException ex) {
ConsoleLogger.warning(ex.getMessage());
return false;
} catch (IOException ex) { } catch (IOException ex) {
ConsoleLogger.warning(ex.getMessage()); ConsoleLogger.warning(ex.getMessage());
return false; return false;
} finally { } finally {
if (br != null) { silentClose(br);
try {
br.close();
} catch (IOException ignored) {
}
}
} }
if (newAuth != null) { if (newAuth != null) {
removeAuth(auth.getNickname()); removeAuth(auth.getNickname());
@ -330,19 +321,11 @@ public class FlatFile implements DataSource {
} }
} }
return countIp; return countIp;
} catch (FileNotFoundException ex) {
ConsoleLogger.warning(ex.getMessage());
return new ArrayList<>();
} catch (IOException ex) { } catch (IOException ex) {
ConsoleLogger.warning(ex.getMessage()); ConsoleLogger.warning(ex.getMessage());
return new ArrayList<>(); return new ArrayList<>();
} finally { } finally {
if (br != null) { silentClose(br);
try {
br.close();
} catch (IOException ignored) {
}
}
} }
} }
@ -363,12 +346,7 @@ public class FlatFile implements DataSource {
} catch (IOException ex) { } catch (IOException ex) {
ConsoleLogger.warning(ex.getMessage()); ConsoleLogger.warning(ex.getMessage());
} finally { } finally {
if (br != null) { silentClose(br);
try {
br.close();
} catch (IOException ignored) {
}
}
} }
return 0; return 0;
} }

View File

@ -47,7 +47,7 @@ public class MySQL implements DataSource {
private int phpBbGroup; private int phpBbGroup;
private String wordpressPrefix; private String wordpressPrefix;
public MySQL(Settings settings) throws ClassNotFoundException, SQLException, PoolInitializationException { public MySQL(Settings settings) throws ClassNotFoundException, SQLException {
setParameters(settings); setParameters(settings);
// Set the connection arguments (and check if connection is ok) // Set the connection arguments (and check if connection is ok)
@ -102,7 +102,7 @@ public class MySQL implements DataSource {
} }
} }
private void setConnectionArguments() throws RuntimeException { private void setConnectionArguments() {
ds = new HikariDataSource(); ds = new HikariDataSource();
ds.setPoolName("AuthMeMYSQLPool"); ds.setPoolName("AuthMeMYSQLPool");
@ -134,7 +134,7 @@ public class MySQL implements DataSource {
} }
@Override @Override
public void reload() throws RuntimeException { public void reload() {
if (ds != null) { if (ds != null) {
ds.close(); ds.close();
} }

View File

@ -3,9 +3,6 @@ package fr.xephi.authme.datasource;
import com.google.common.annotations.VisibleForTesting; import com.google.common.annotations.VisibleForTesting;
import fr.xephi.authme.ConsoleLogger; import fr.xephi.authme.ConsoleLogger;
import fr.xephi.authme.data.auth.PlayerAuth; import fr.xephi.authme.data.auth.PlayerAuth;
import fr.xephi.authme.datasource.Columns;
import fr.xephi.authme.datasource.DataSource;
import fr.xephi.authme.datasource.DataSourceType;
import fr.xephi.authme.security.crypts.HashedPassword; import fr.xephi.authme.security.crypts.HashedPassword;
import fr.xephi.authme.settings.Settings; import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.DatabaseSettings; import fr.xephi.authme.settings.properties.DatabaseSettings;
@ -397,7 +394,7 @@ public class SQLite implements DataSource {
} }
} }
private void close(Statement st) { private static void close(Statement st) {
if (st != null) { if (st != null) {
try { try {
st.close(); st.close();
@ -407,7 +404,7 @@ public class SQLite implements DataSource {
} }
} }
private void close(Connection con) { private static void close(Connection con) {
if (con != null) { if (con != null) {
try { try {
con.close(); con.close();
@ -417,7 +414,7 @@ public class SQLite implements DataSource {
} }
} }
private void close(ResultSet rs) { private static void close(ResultSet rs) {
if (rs != null) { if (rs != null) {
try { try {
rs.close(); rs.close();
@ -479,7 +476,7 @@ public class SQLite implements DataSource {
pst.setString(1, user); pst.setString(1, user);
rs = pst.executeQuery(); rs = pst.executeQuery();
if (rs.next()) if (rs.next())
return (rs.getInt(col.IS_LOGGED) == 1); return rs.getInt(col.IS_LOGGED) == 1;
} catch (SQLException ex) { } catch (SQLException ex) {
logSqlException(ex); logSqlException(ex);
} finally { } finally {

View File

@ -43,9 +43,25 @@ public class CrazyLoginConverter implements Converter {
try (BufferedReader users = new BufferedReader(new FileReader(source))) { try (BufferedReader users = new BufferedReader(new FileReader(source))) {
while ((line = users.readLine()) != null) { while ((line = users.readLine()) != null) {
if (line.contains("|")) { if (line.contains("|")) {
migrateAccount(line);
}
}
ConsoleLogger.info("CrazyLogin database has been imported correctly");
} catch (IOException ex) {
ConsoleLogger.warning("Can't open the crazylogin database file! Does it exist?");
ConsoleLogger.logException("Encountered", ex);
}
}
/**
* Moves an account from CrazyLogin to the AuthMe database.
*
* @param line line read from the CrazyLogin file (one account)
*/
private void migrateAccount(String line) {
String[] args = line.split("\\|"); String[] args = line.split("\\|");
if (args.length < 2 || "name".equalsIgnoreCase(args[0])) { if (args.length < 2 || "name".equalsIgnoreCase(args[0])) {
continue; return;
} }
String playerName = args[0]; String playerName = args[0];
String password = args[1]; String password = args[1];
@ -58,12 +74,5 @@ public class CrazyLoginConverter implements Converter {
database.saveAuth(auth); database.saveAuth(auth);
} }
} }
}
ConsoleLogger.info("CrazyLogin database has been imported correctly");
} catch (IOException ex) {
ConsoleLogger.warning("Can't open the crazylogin database file! Does it exist?");
ConsoleLogger.logException("Encountered", ex);
}
}
} }

View File

@ -76,10 +76,8 @@ public class OnShutdownPlayerSaver {
dataSource.updateQuitLoc(auth); dataSource.updateQuitLoc(auth);
} }
if (settings.getProperty(RestrictionSettings.TELEPORT_UNAUTHED_TO_SPAWN) if (settings.getProperty(RestrictionSettings.TELEPORT_UNAUTHED_TO_SPAWN)
&& !settings.getProperty(RestrictionSettings.NO_TELEPORT)) { && !settings.getProperty(RestrictionSettings.NO_TELEPORT) && !limboPlayerStorage.hasData(player)) {
if (!limboPlayerStorage.hasData(player)) {
limboPlayerStorage.saveData(player); limboPlayerStorage.saveData(player);
} }
} }
} }
}

View File

@ -170,12 +170,11 @@ class OnJoinVerifier implements Reloadable {
public void checkPlayerCountry(boolean isAuthAvailable, public void checkPlayerCountry(boolean isAuthAvailable,
String playerIp) throws FailedVerificationException { String playerIp) throws FailedVerificationException {
if ((!isAuthAvailable || settings.getProperty(ProtectionSettings.ENABLE_PROTECTION_REGISTERED)) if ((!isAuthAvailable || settings.getProperty(ProtectionSettings.ENABLE_PROTECTION_REGISTERED))
&& settings.getProperty(ProtectionSettings.ENABLE_PROTECTION)) { && settings.getProperty(ProtectionSettings.ENABLE_PROTECTION)
if (!validationService.isCountryAdmitted(playerIp)) { && !validationService.isCountryAdmitted(playerIp)) {
throw new FailedVerificationException(MessageKey.COUNTRY_BANNED_ERROR); throw new FailedVerificationException(MessageKey.COUNTRY_BANNED_ERROR);
} }
} }
}
/** /**
* Checks if a player with the same name (case-insensitive) is already playing and refuses the * Checks if a player with the same name (case-insensitive) is already playing and refuses the

View File

@ -42,6 +42,7 @@ import org.bukkit.event.player.PlayerShearEntityEvent;
import javax.inject.Inject; import javax.inject.Inject;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
@ -53,7 +54,7 @@ import static fr.xephi.authme.settings.properties.RestrictionSettings.ALLOW_UNAU
*/ */
public class PlayerListener implements Listener { public class PlayerListener implements Listener {
public static final ConcurrentHashMap<String, String> joinMessage = new ConcurrentHashMap<>(); public static final Map<String, String> joinMessage = new ConcurrentHashMap<>();
@Inject @Inject
private Settings settings; private Settings settings;
@ -81,7 +82,7 @@ public class PlayerListener implements Listener {
@EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST) @EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST)
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) { public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) {
String cmd = event.getMessage().split(" ")[0].toLowerCase(); String cmd = event.getMessage().split(" ")[0].toLowerCase();
if (settings.getProperty(HooksSettings.USE_ESSENTIALS_MOTD) && cmd.equals("/motd")) { if (settings.getProperty(HooksSettings.USE_ESSENTIALS_MOTD) && "/motd".equals(cmd)) {
return; return;
} }
if (settings.getProperty(RestrictionSettings.ALLOW_COMMANDS).contains(cmd)) { if (settings.getProperty(RestrictionSettings.ALLOW_COMMANDS).contains(cmd)) {
@ -113,7 +114,7 @@ public class PlayerListener implements Listener {
iter.remove(); iter.remove();
} }
} }
if (recipients.size() == 0) { if (recipients.isEmpty()) {
event.setCancelled(true); event.setCancelled(true);
} }
} }
@ -224,7 +225,7 @@ public class PlayerListener implements Listener {
// Get the auth later as this may cause the single session check to fail // Get the auth later as this may cause the single session check to fail
// Slow stuff // Slow stuff
final PlayerAuth auth = dataSource.getAuth(name); final PlayerAuth auth = dataSource.getAuth(name);
final boolean isAuthAvailable = (auth != null); final boolean isAuthAvailable = auth != null;
onJoinVerifier.checkKickNonRegistered(isAuthAvailable); onJoinVerifier.checkKickNonRegistered(isAuthAvailable);
onJoinVerifier.checkAntibot(player, isAuthAvailable); onJoinVerifier.checkAntibot(player, isAuthAvailable);
onJoinVerifier.checkNameCasing(player, auth); onJoinVerifier.checkNameCasing(player, auth);

View File

@ -12,14 +12,9 @@ import org.apache.logging.log4j.message.Message;
* *
* @author Xephi59 * @author Xephi59
*/ */
@SuppressWarnings("serial")
public class Log4JFilter extends AbstractFilter { public class Log4JFilter extends AbstractFilter {
/** private static final long serialVersionUID = -5594073755007974254L;
* Constructor.
*/
public Log4JFilter() {
}
/** /**
* Validates a Message instance and returns the {@link Result} value * Validates a Message instance and returns the {@link Result} value

View File

@ -31,7 +31,8 @@ public class AuthGroupHandler implements Reloadable {
private String unregisteredGroup; private String unregisteredGroup;
private String registeredGroup; private String registeredGroup;
AuthGroupHandler() { } AuthGroupHandler() {
}
/** /**
* Set the group of a player, by its AuthMe group type. * Set the group of a player, by its AuthMe group type.

View File

@ -78,12 +78,12 @@ public class PermissionsManager implements Reloadable {
if (handler != null) { if (handler != null) {
// Show a success message and return // Show a success message and return
this.handler = handler; this.handler = handler;
ConsoleLogger.info("Hooked into " + type.getName() + "!"); ConsoleLogger.info("Hooked into " + type.getDisplayName() + "!");
return; return;
} }
} catch (Exception ex) { } catch (Exception ex) {
// An error occurred, show a warning message // An error occurred, show a warning message
ConsoleLogger.logException("Error while hooking into " + type.getName(), ex); ConsoleLogger.logException("Error while hooking into " + type.getDisplayName(), ex);
} }
} }
@ -101,7 +101,7 @@ public class PermissionsManager implements Reloadable {
// Make sure the plugin is enabled before hooking // Make sure the plugin is enabled before hooking
if (!plugin.isEnabled()) { if (!plugin.isEnabled()) {
ConsoleLogger.info("Not hooking into " + type.getName() + " because it's disabled!"); ConsoleLogger.info("Not hooking into " + type.getDisplayName() + " because it's disabled!");
return null; return null;
} }
@ -414,7 +414,7 @@ public class PermissionsManager implements Reloadable {
*/ */
public boolean setGroups(Player player, List<String> groupNames) { public boolean setGroups(Player player, List<String> groupNames) {
// If no permissions system is used or if there's no group supplied, return false // If no permissions system is used or if there's no group supplied, return false
if (!isEnabled() || groupNames.size() <= 0) if (!isEnabled() || groupNames.isEmpty())
return false; return false;
// Set the main group // Set the main group

View File

@ -33,21 +33,21 @@ public enum PermissionsSystemType {
/** /**
* The display name of the permissions system. * The display name of the permissions system.
*/ */
public String name; private String displayName;
/** /**
* The name of the permissions system plugin. * The name of the permissions system plugin.
*/ */
public String pluginName; private String pluginName;
/** /**
* Constructor for PermissionsSystemType. * Constructor for PermissionsSystemType.
* *
* @param name Display name of the permissions system. * @param displayName Display name of the permissions system.
* @param pluginName Name of the plugin. * @param pluginName Name of the plugin.
*/ */
PermissionsSystemType(String name, String pluginName) { PermissionsSystemType(String displayName, String pluginName) {
this.name = name; this.displayName = displayName;
this.pluginName = pluginName; this.pluginName = pluginName;
} }
@ -56,8 +56,8 @@ public enum PermissionsSystemType {
* *
* @return Display name. * @return Display name.
*/ */
public String getName() { public String getDisplayName() {
return this.name; return this.displayName;
} }
/** /**
@ -76,7 +76,7 @@ public enum PermissionsSystemType {
*/ */
@Override @Override
public String toString() { public String toString() {
return getName(); return getDisplayName();
} }
/** /**

View File

@ -55,7 +55,7 @@ public class BPermissionsHandler implements PermissionHandler {
List<String> groups = getGroups(player); List<String> groups = getGroups(player);
// Make sure there is any group available, or return null // Make sure there is any group available, or return null
if (groups.size() == 0) if (groups.isEmpty())
return null; return null;
// Return the first group // Return the first group

View File

@ -54,7 +54,7 @@ public class PermissionsBukkitHandler implements PermissionHandler {
List<String> groups = getGroups(player); List<String> groups = getGroups(player);
// Make sure there is any group available, or return null // Make sure there is any group available, or return null
if (groups.size() == 0) if (groups.isEmpty())
return null; return null;
// Return the first group // Return the first group

View File

@ -77,7 +77,7 @@ public class PermissionsExHandler implements PermissionHandler {
PermissionUser user = permissionManager.getUser(player); PermissionUser user = permissionManager.getUser(player);
List<String> groups = user.getParentIdentifiers(null); List<String> groups = user.getParentIdentifiers(null);
if (groups.size() == 0) if (groups.isEmpty())
return null; return null;
return groups.get(0); return groups.get(0);

View File

@ -27,7 +27,8 @@ public class AsyncChangePassword implements AsynchronousProcess {
@Inject @Inject
private PlayerCache playerCache; private PlayerCache playerCache;
AsyncChangePassword() { } AsyncChangePassword() {
}
public void changePassword(final Player player, String oldPassword, String newPassword) { public void changePassword(final Player player, String oldPassword, String newPassword) {

View File

@ -14,6 +14,7 @@ import fr.xephi.authme.service.BungeeService;
import fr.xephi.authme.settings.properties.RegistrationSettings; import fr.xephi.authme.settings.properties.RegistrationSettings;
import fr.xephi.authme.service.BukkitService; import fr.xephi.authme.service.BukkitService;
import fr.xephi.authme.service.TeleportationService; import fr.xephi.authme.service.TeleportationService;
import fr.xephi.authme.util.StringUtils;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.PluginManager;
@ -90,17 +91,14 @@ public class ProcessSyncPlayerLogin implements SynchronousProcess {
teleportationService.teleportOnLogin(player, auth, limbo); teleportationService.teleportOnLogin(player, auth, limbo);
// We can now display the join message (if delayed) // We can now display the join message (if delayed)
String jm = PlayerListener.joinMessage.get(name); String joinMessage = PlayerListener.joinMessage.remove(name);
if (jm != null) { if (!StringUtils.isEmpty(joinMessage)) {
if (!jm.isEmpty()) {
for (Player p : bukkitService.getOnlinePlayers()) { for (Player p : bukkitService.getOnlinePlayers()) {
if (p.isOnline()) { if (p.isOnline()) {
p.sendMessage(jm); p.sendMessage(joinMessage);
} }
} }
} }
PlayerListener.joinMessage.remove(name);
}
if (service.getProperty(RegistrationSettings.APPLY_BLIND_EFFECT)) { if (service.getProperty(RegistrationSettings.APPLY_BLIND_EFFECT)) {
player.removePotionEffect(PotionEffectType.BLINDNESS); player.removePotionEffect(PotionEffectType.BLINDNESS);

View File

@ -21,8 +21,8 @@ public class ProcessSyncEmailRegister implements SynchronousProcess {
@Inject @Inject
private LimboPlayerTaskManager limboPlayerTaskManager; private LimboPlayerTaskManager limboPlayerTaskManager;
ProcessSyncEmailRegister() { } ProcessSyncEmailRegister() {
}
public void processEmailRegister(Player player) { public void processEmailRegister(Player player) {
final String name = player.getName().toLowerCase(); final String name = player.getName().toLowerCase();

View File

@ -1,5 +1,10 @@
package fr.xephi.authme.security.crypts; package fr.xephi.authme.security.crypts;
/**
* Plaintext password storage.
*
* @deprecated Using this is no longer supported. AuthMe will migrate to SHA256 on startup.
*/
@Deprecated @Deprecated
public class PLAINTEXT extends UnsaltedMethod { public class PLAINTEXT extends UnsaltedMethod {

View File

@ -18,14 +18,14 @@ public class XAUTH extends HexSaltedMethod {
@Override @Override
public String computeHash(String password, String salt, String name) { public String computeHash(String password, String salt, String name) {
String hash = getWhirlpool(salt + password).toLowerCase(); String hash = getWhirlpool(salt + password).toLowerCase();
int saltPos = (password.length() >= hash.length() ? hash.length() - 1 : password.length()); int saltPos = password.length() >= hash.length() ? hash.length() - 1 : password.length();
return hash.substring(0, saltPos) + salt + hash.substring(saltPos); return hash.substring(0, saltPos) + salt + hash.substring(saltPos);
} }
@Override @Override
public boolean comparePassword(String password, HashedPassword hashedPassword, String playerName) { public boolean comparePassword(String password, HashedPassword hashedPassword, String playerName) {
String hash = hashedPassword.getHash(); String hash = hashedPassword.getHash();
int saltPos = (password.length() >= hash.length() ? hash.length() - 1 : password.length()); int saltPos = password.length() >= hash.length() ? hash.length() - 1 : password.length();
if (saltPos + 12 > hash.length()) { if (saltPos + 12 > hash.length()) {
return false; return false;
} }

View File

@ -104,36 +104,22 @@ public class BackupService {
dirBackup.mkdir(); dirBackup.mkdir();
} }
String backupWindowsPath = settings.getProperty(BackupSettings.MYSQL_WINDOWS_PATH); String backupWindowsPath = settings.getProperty(BackupSettings.MYSQL_WINDOWS_PATH);
if (checkWindows(backupWindowsPath)) { boolean isUsingWindows = checkWindows(backupWindowsPath);
String executeCmd = backupWindowsPath + "\\bin\\mysqldump.exe -u " + dbUserName + " -p" + dbPassword + " " + dbName + " --tables " + tblname + " -r " + path + ".sql"; String backupCommand = isUsingWindows
Process runtimeProcess; ? backupWindowsPath + "\\bin\\mysqldump.exe" + buildMysqlDumpArguments()
: "mysqldump" + buildMysqlDumpArguments();
try { try {
runtimeProcess = Runtime.getRuntime().exec(executeCmd); Process runtimeProcess = Runtime.getRuntime().exec(backupCommand);
int processComplete = runtimeProcess.waitFor(); int processComplete = runtimeProcess.waitFor();
if (processComplete == 0) { if (processComplete == 0) {
ConsoleLogger.info("Backup created successfully."); ConsoleLogger.info("Backup created successfully. (Using Windows = " + isUsingWindows + ")");
return true; return true;
} else { } else {
ConsoleLogger.warning("Could not create the backup! (Windows)"); ConsoleLogger.warning("Could not create the backup! (Using Windows = " + isUsingWindows + ")");
} }
} catch (IOException | InterruptedException e) { } catch (IOException | InterruptedException e) {
ConsoleLogger.logException("Error during Windows backup:", e); ConsoleLogger.logException("Error during backup (using Windows = " + isUsingWindows + "):", e);
}
} else {
String executeCmd = "mysqldump -u " + dbUserName + " -p" + dbPassword + " " + dbName + " --tables " + tblname + " -r " + path + ".sql";
Process runtimeProcess;
try {
runtimeProcess = Runtime.getRuntime().exec(executeCmd);
int processComplete = runtimeProcess.waitFor();
if (processComplete == 0) {
ConsoleLogger.info("Backup created successfully.");
return true;
} else {
ConsoleLogger.warning("Could not create the backup!");
}
} catch (IOException | InterruptedException e) {
ConsoleLogger.logException("Error during backup:", e);
}
} }
return false; return false;
} }
@ -173,6 +159,16 @@ public class BackupService {
return false; return false;
} }
/**
* Builds the command line arguments to pass along when running the {@code mysqldump} command.
*
* @return the mysqldump command line arguments
*/
private String buildMysqlDumpArguments() {
return " -u " + dbUserName + " -p" + dbPassword + " " + dbName
+ " --tables " + tblname + " -r " + path + ".sql";
}
private static void copy(String src, String dst) throws IOException { private static void copy(String src, String dst) throws IOException {
InputStream in = new FileInputStream(src); InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dst); OutputStream out = new FileOutputStream(dst);

View File

@ -40,7 +40,8 @@ public class ValidationService implements Reloadable {
private Pattern passwordRegex; private Pattern passwordRegex;
private Set<String> unrestrictedNames; private Set<String> unrestrictedNames;
ValidationService() { } ValidationService() {
}
@PostConstruct @PostConstruct
@Override @Override

View File

@ -48,10 +48,10 @@ public class SpawnLoader implements Reloadable {
@Inject @Inject
SpawnLoader(@DataFolder File pluginFolder, Settings settings, PluginHookService pluginHookService, SpawnLoader(@DataFolder File pluginFolder, Settings settings, PluginHookService pluginHookService,
DataSource dataSource) { DataSource dataSource) {
File spawnFile = new File(pluginFolder, "spawn.yml");
// TODO ljacqu 20160312: Check if resource could be copied and handle the case if not // TODO ljacqu 20160312: Check if resource could be copied and handle the case if not
File spawnFile = new File(pluginFolder, "spawn.yml");
FileUtils.copyFileFromResource(spawnFile, "spawn.yml"); FileUtils.copyFileFromResource(spawnFile, "spawn.yml");
this.authMeConfigurationFile = new File(pluginFolder, "spawn.yml"); this.authMeConfigurationFile = spawnFile;
this.settings = settings; this.settings = settings;
this.pluginHookService = pluginHookService; this.pluginHookService = pluginHookService;
reload(); reload();

View File

@ -23,15 +23,15 @@ public class PermissionsSystemTypeTest {
List<String> pluginNames = new ArrayList<>(PermissionsSystemType.values().length); List<String> pluginNames = new ArrayList<>(PermissionsSystemType.values().length);
for (PermissionsSystemType system : PermissionsSystemType.values()) { for (PermissionsSystemType system : PermissionsSystemType.values()) {
assertThat("Name for enum entry '" + system + "' is not null", assertThat("Display name for enum entry '" + system + "' is not null",
system.getName(), not(nullValue())); system.getDisplayName(), not(nullValue()));
assertThat("Plugin name for enum entry '" + system + "' is not null", assertThat("Plugin name for enum entry '" + system + "' is not null",
system.getPluginName(), not(nullValue())); system.getPluginName(), not(nullValue()));
assertThat("Only one enum entry has name '" + system.getName() + "'", assertThat("Only one enum entry has display name '" + system.getDisplayName() + "'",
names, not(hasItem(system.getName()))); names, not(hasItem(system.getDisplayName())));
assertThat("Only one enum entry has plugin name '" + system.getPluginName() + "'", assertThat("Only one enum entry has plugin name '" + system.getPluginName() + "'",
pluginNames, not(hasItem(system.getPluginName()))); pluginNames, not(hasItem(system.getPluginName())));
names.add(system.getName()); names.add(system.getDisplayName());
pluginNames.add(system.getPluginName()); pluginNames.add(system.getPluginName());
} }
} }