mirror of
https://github.com/EssentialsX/Essentials.git
synced 2024-10-31 15:59:40 +01:00
Fix economy usernames being unsanitized in some places (#4484)
Co-authored-by: MD <1917406+mdcfe@users.noreply.github.com> This PR fixes various issues with NPC accounts: - Fixes some NPC account names not being sanitised - Fixes wrong keys being used when manually generating a NPC account file - Adds some debug logging to `UserMap` name lookups
This commit is contained in:
parent
e4c179f5ed
commit
4bee15956a
@ -69,7 +69,7 @@ public abstract class UserData extends PlayerExtension implements IConf {
|
||||
if (config.getUsername() != null) {
|
||||
ess.getUserMap().removeUser(config.getUsername());
|
||||
if (isNPC()) {
|
||||
final String uuid = UUID.nameUUIDFromBytes(("NPC:" + config.getUsername()).getBytes(Charsets.UTF_8)).toString();
|
||||
final String uuid = UUID.nameUUIDFromBytes(("NPC:" + StringUtil.safeString(config.getUsername())).getBytes(Charsets.UTF_8)).toString();
|
||||
ess.getUserMap().removeUserUUID(uuid);
|
||||
}
|
||||
}
|
||||
|
@ -92,13 +92,21 @@ public class UserMap extends CacheLoader<String, User> implements IConf {
|
||||
}
|
||||
|
||||
public User getUser(final String name) {
|
||||
final String sanitizedName = StringUtil.safeString(name);
|
||||
try {
|
||||
final String sanitizedName = StringUtil.safeString(name);
|
||||
if (ess.getSettings().isDebug()) {
|
||||
ess.getLogger().warning("Looking up username " + name + " (" + sanitizedName + ") ...");
|
||||
}
|
||||
|
||||
if (names.containsKey(sanitizedName)) {
|
||||
final UUID uuid = names.get(sanitizedName);
|
||||
return getUser(uuid);
|
||||
}
|
||||
|
||||
if (ess.getSettings().isDebug()) {
|
||||
ess.getLogger().warning(name + "(" + sanitizedName + ") has no known usermap entry");
|
||||
}
|
||||
|
||||
final File userFile = getUserFileFromString(sanitizedName);
|
||||
if (userFile.exists()) {
|
||||
ess.getLogger().info("Importing user " + name + " to usermap.");
|
||||
@ -108,6 +116,9 @@ public class UserMap extends CacheLoader<String, User> implements IConf {
|
||||
}
|
||||
return null;
|
||||
} catch (final UncheckedExecutionException ex) {
|
||||
if (ess.getSettings().isDebug()) {
|
||||
ess.getLogger().log(Level.WARNING, ex, () -> String.format("Exception while getting user for %s (%s)", name, sanitizedName));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@ -120,6 +131,9 @@ public class UserMap extends CacheLoader<String, User> implements IConf {
|
||||
return legacyCacheGet(uuid);
|
||||
}
|
||||
} catch (final ExecutionException | UncheckedExecutionException ex) {
|
||||
if (ess.getSettings().isDebug()) {
|
||||
ess.getLogger().log(Level.WARNING, ex, () -> "Exception while getting user for " + uuid);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -52,7 +52,7 @@ public class Economy {
|
||||
}
|
||||
}
|
||||
final UUID npcUUID = UUID.nameUUIDFromBytes(("NPC:" + name).getBytes(Charsets.UTF_8));
|
||||
final File npcFile = new File(folder, npcUUID.toString() + ".yml");
|
||||
final File npcFile = new File(folder, npcUUID + ".yml");
|
||||
if (npcFile.exists()) {
|
||||
LOGGER.log(Level.SEVERE, MessageFormat.format(WARN_NPC_RECREATE_1, name, npcUUID.toString()), new RuntimeException());
|
||||
LOGGER.log(Level.SEVERE, WARN_NPC_RECREATE_2);
|
||||
@ -60,7 +60,7 @@ public class Economy {
|
||||
final EssentialsUserConfiguration npcConfig = new EssentialsUserConfiguration(name, npcUUID, npcFile);
|
||||
npcConfig.load();
|
||||
npcConfig.setProperty("npc", true);
|
||||
npcConfig.setProperty("lastAccountName", name);
|
||||
npcConfig.setProperty("last-account-name", name);
|
||||
npcConfig.setProperty("money", ess.getSettings().getStartingBalance());
|
||||
npcConfig.blockingSave();
|
||||
ess.getUserMap().trackUUID(npcUUID, name, false);
|
||||
@ -96,7 +96,7 @@ public class Economy {
|
||||
}
|
||||
|
||||
if (user == null) {
|
||||
user = getUserByUUID(UUID.nameUUIDFromBytes(("NPC:" + name).getBytes(Charsets.UTF_8)));
|
||||
user = getUserByUUID(UUID.nameUUIDFromBytes(("NPC:" + StringUtil.safeString(name)).getBytes(Charsets.UTF_8)));
|
||||
}
|
||||
|
||||
return user;
|
||||
|
@ -46,7 +46,7 @@ public class EssentialsUserConfiguration extends EssentialsConfiguration {
|
||||
LOGGER.log(Level.WARNING, "Failed to migrate user: " + username, ex);
|
||||
}
|
||||
|
||||
setProperty("lastAccountName", username);
|
||||
setProperty("last-account-name", username);
|
||||
}
|
||||
|
||||
private File getAltFile() {
|
||||
|
@ -5,6 +5,7 @@ import com.earth2me.essentials.api.NoLoanPermittedException;
|
||||
import com.earth2me.essentials.api.UserDoesNotExistException;
|
||||
import com.earth2me.essentials.config.EssentialsUserConfiguration;
|
||||
import com.earth2me.essentials.utils.NumberUtil;
|
||||
import com.earth2me.essentials.utils.StringUtil;
|
||||
import com.google.common.base.Charsets;
|
||||
import net.ess3.api.MaxMoneyException;
|
||||
import net.milkbowl.vault.economy.Economy;
|
||||
@ -80,7 +81,7 @@ public class VaultEconomyProvider implements Economy {
|
||||
return true;
|
||||
}
|
||||
// We may not have the player name in the usermap, let's double check an NPC account with this name doesn't exist.
|
||||
return com.earth2me.essentials.api.Economy.playerExists(UUID.nameUUIDFromBytes(("NPC:" + playerName).getBytes(Charsets.UTF_8)));
|
||||
return com.earth2me.essentials.api.Economy.playerExists(UUID.nameUUIDFromBytes(("NPC:" + StringUtil.safeString(playerName)).getBytes(Charsets.UTF_8)));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -306,7 +307,7 @@ public class VaultEconomyProvider implements Economy {
|
||||
final EssentialsUserConfiguration npcConfig = new EssentialsUserConfiguration(player.getName(), player.getUniqueId(), npcFile);
|
||||
npcConfig.load();
|
||||
npcConfig.setProperty("npc", true);
|
||||
npcConfig.setProperty("lastAccountName", player.getName());
|
||||
npcConfig.setProperty("last-account-name", player.getName());
|
||||
npcConfig.setProperty("money", ess.getSettings().getStartingBalance());
|
||||
npcConfig.blockingSave();
|
||||
ess.getUserMap().trackUUID(player.getUniqueId(), player.getName(), false);
|
||||
|
Loading…
Reference in New Issue
Block a user