mirror of
https://github.com/AtlasMediaGroup/TotalFreedomMod.git
synced 2025-06-29 11:46:40 +00:00
Stage 2 of IP -> UUID migration: changing the admin list to use UUIDs
This commit is contained in:
@ -2,11 +2,8 @@ package me.totalfreedom.totalfreedommod.admin;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
|
||||
import me.totalfreedom.totalfreedommod.LogViewer.LogsRegistrationMode;
|
||||
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
|
||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||
@ -18,10 +15,8 @@ import org.bukkit.entity.Player;
|
||||
|
||||
public class Admin
|
||||
{
|
||||
|
||||
|
||||
private final List<String> ips = new ArrayList<>();
|
||||
private String name;
|
||||
private UUID uuid;
|
||||
private boolean active = true;
|
||||
private Rank rank = Rank.ADMIN;
|
||||
private Date lastLogin = new Date();
|
||||
@ -32,7 +27,7 @@ public class Admin
|
||||
|
||||
public Admin(Player player)
|
||||
{
|
||||
this.name = player.getName();
|
||||
uuid = player.getUniqueId();
|
||||
this.ips.add(FUtil.getIp(player));
|
||||
}
|
||||
|
||||
@ -40,7 +35,7 @@ public class Admin
|
||||
{
|
||||
try
|
||||
{
|
||||
this.name = resultSet.getString("username");
|
||||
this.uuid = UUID.fromString(resultSet.getString("uuid"));
|
||||
this.active = resultSet.getBoolean("active");
|
||||
this.rank = Rank.findRank(resultSet.getString("rank"));
|
||||
this.ips.clear();
|
||||
@ -62,7 +57,7 @@ public class Admin
|
||||
{
|
||||
final StringBuilder output = new StringBuilder();
|
||||
|
||||
output.append("Admin: ").append(name).append("\n")
|
||||
output.append("Admin: ").append(getName()).append("\n")
|
||||
.append("- IPs: ").append(StringUtils.join(ips, ", ")).append("\n")
|
||||
.append("- Last Login: ").append(FUtil.dateToString(lastLogin)).append("\n")
|
||||
.append("- Rank: ").append(rank.getName()).append("\n")
|
||||
@ -78,7 +73,7 @@ public class Admin
|
||||
{
|
||||
Map<String, Object> map = new HashMap<String, Object>()
|
||||
{{
|
||||
put("username", name);
|
||||
put("uuid", uuid.toString());
|
||||
put("active", active);
|
||||
put("rank", rank.toString());
|
||||
put("ips", FUtil.listToString(ips));
|
||||
@ -120,20 +115,20 @@ public class Admin
|
||||
|
||||
public boolean isValid()
|
||||
{
|
||||
return name != null
|
||||
return uuid != null
|
||||
&& rank != null
|
||||
&& !ips.isEmpty()
|
||||
&& lastLogin != null;
|
||||
}
|
||||
|
||||
public String getName()
|
||||
public UUID getUuid()
|
||||
{
|
||||
return name;
|
||||
return uuid;
|
||||
}
|
||||
|
||||
public void setName(String name)
|
||||
public String getName()
|
||||
{
|
||||
this.name = name;
|
||||
return Bukkit.getOfflinePlayer(uuid).getName();
|
||||
}
|
||||
|
||||
public boolean isActive()
|
||||
|
@ -4,11 +4,7 @@ import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Sets;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import me.totalfreedom.totalfreedommod.FreedomService;
|
||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||
@ -26,6 +22,7 @@ public class AdminList extends FreedomService
|
||||
private final Set<Admin> allAdmins = Sets.newHashSet(); // Includes disabled admins
|
||||
// Only active admins below
|
||||
private final Set<Admin> activeAdmins = Sets.newHashSet();
|
||||
private final Map<UUID, Admin> uuidTable = Maps.newHashMap();
|
||||
private final Map<String, Admin> nameTable = Maps.newHashMap();
|
||||
private final Map<String, Admin> ipTable = Maps.newHashMap();
|
||||
|
||||
@ -66,7 +63,7 @@ public class AdminList extends FreedomService
|
||||
}
|
||||
|
||||
updateTables();
|
||||
FLog.info("Loaded " + allAdmins.size() + " admins (" + nameTable.size() + " active, " + ipTable.size() + " IPs)");
|
||||
FLog.info("Loaded " + allAdmins.size() + " admins (" + uuidTable.size() + " active, " + ipTable.size() + " IPs)");
|
||||
}
|
||||
|
||||
public void messageAllAdmins(String message)
|
||||
@ -154,40 +151,20 @@ public class AdminList extends FreedomService
|
||||
|
||||
public Admin getAdmin(Player player)
|
||||
{
|
||||
// Find admin
|
||||
String ip = FUtil.getIp(player);
|
||||
Admin admin = getEntryByName(player.getName());
|
||||
final String ip = FUtil.getIp(player);
|
||||
final Admin entry = getEntryByUuid(player.getUniqueId());
|
||||
|
||||
// Admin by name
|
||||
if (admin != null)
|
||||
if (entry != null && !entry.getIps().contains(ip))
|
||||
{
|
||||
// Check if we're in online mode,
|
||||
// Or the players IP is in the admin entry
|
||||
if (Bukkit.getOnlineMode() || admin.getIps().contains(ip))
|
||||
{
|
||||
if (!admin.getIps().contains(ip))
|
||||
{
|
||||
// Add the new IP if we have to
|
||||
admin.addIp(ip);
|
||||
save(admin);
|
||||
updateTables();
|
||||
}
|
||||
return admin;
|
||||
}
|
||||
entry.addIp(ip);
|
||||
}
|
||||
|
||||
// Admin by ip
|
||||
admin = getEntryByIp(ip);
|
||||
if (admin != null)
|
||||
{
|
||||
// Set the new username
|
||||
String oldName = admin.getName();
|
||||
admin.setName(player.getName());
|
||||
plugin.sql.updateAdminName(oldName, admin.getName());
|
||||
updateTables();
|
||||
}
|
||||
return entry;
|
||||
}
|
||||
|
||||
return null;
|
||||
public Admin getEntryByUuid(UUID uuid)
|
||||
{
|
||||
return uuidTable.get(uuid);
|
||||
}
|
||||
|
||||
public Admin getEntryByName(String name)
|
||||
@ -200,25 +177,6 @@ public class AdminList extends FreedomService
|
||||
return ipTable.get(ip);
|
||||
}
|
||||
|
||||
public Admin getEntryByIpFuzzy(String needleIp)
|
||||
{
|
||||
final Admin directAdmin = getEntryByIp(needleIp);
|
||||
if (directAdmin != null)
|
||||
{
|
||||
return directAdmin;
|
||||
}
|
||||
|
||||
for (String ip : ipTable.keySet())
|
||||
{
|
||||
if (FUtil.fuzzyIpMatch(needleIp, ip, 3))
|
||||
{
|
||||
return ipTable.get(ip);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public void updateLastLogin(Player player)
|
||||
{
|
||||
final Admin admin = getAdmin(player);
|
||||
@ -228,13 +186,12 @@ public class AdminList extends FreedomService
|
||||
}
|
||||
|
||||
admin.setLastLogin(new Date());
|
||||
admin.setName(player.getName());
|
||||
save(admin);
|
||||
}
|
||||
|
||||
public boolean isAdminImpostor(Player player)
|
||||
{
|
||||
return getEntryByName(player.getName()) != null && !isAdmin(player) && !isVerifiedAdmin(player);
|
||||
return getEntryByUuid(player.getUniqueId()) != null && !isAdmin(player) && !isVerifiedAdmin(player);
|
||||
}
|
||||
|
||||
public boolean isVerifiedAdmin(Player player)
|
||||
@ -297,6 +254,7 @@ public class AdminList extends FreedomService
|
||||
public void updateTables()
|
||||
{
|
||||
activeAdmins.clear();
|
||||
uuidTable.clear();
|
||||
nameTable.clear();
|
||||
ipTable.clear();
|
||||
|
||||
@ -308,13 +266,13 @@ public class AdminList extends FreedomService
|
||||
}
|
||||
|
||||
activeAdmins.add(admin);
|
||||
uuidTable.put(admin.getUuid(), admin);
|
||||
nameTable.put(admin.getName().toLowerCase(), admin);
|
||||
|
||||
for (String ip : admin.getIps())
|
||||
{
|
||||
ipTable.put(ip, admin);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -332,11 +290,10 @@ public class AdminList extends FreedomService
|
||||
{
|
||||
try
|
||||
{
|
||||
ResultSet currentSave = plugin.sql.getAdminByName(admin.getName());
|
||||
ResultSet currentSave = plugin.sql.getAdminByUuid(admin.getUuid());
|
||||
for (Map.Entry<String, Object> entry : admin.toSQLStorable().entrySet())
|
||||
{
|
||||
Object storedValue = plugin.sql.getValue(currentSave, entry.getKey(), entry.getValue());
|
||||
if (storedValue != null && !storedValue.equals(entry.getValue()) || storedValue == null && entry.getValue() != null || entry.getValue() == null)
|
||||
Object storedValue = plugin.sql.getValue(currentSave, entry.getKey(), entry.getValue()); if (storedValue != null && !storedValue.equals(entry.getValue()) || storedValue == null && entry.getValue() != null || entry.getValue() == null)
|
||||
{
|
||||
plugin.sql.setAdminValue(admin, entry.getKey(), entry.getValue());
|
||||
}
|
||||
|
Reference in New Issue
Block a user