Added missing server UUID to operator and ban status transactions

Affects issues:
- #1827
This commit is contained in:
Risto Lahtela 2021-04-17 08:24:42 +03:00
parent 62b387da53
commit 1c946e7490
6 changed files with 32 additions and 15 deletions

View File

@ -109,14 +109,15 @@ public class PlayerOnlineListener implements Listener {
try {
PlayerLoginEvent.Result result = event.getResult();
UUID playerUUID = event.getPlayer().getUniqueId();
ServerUUID serverUUID = serverInfo.getServerUUID();
boolean operator = event.getPlayer().isOp();
boolean banned = result == PlayerLoginEvent.Result.KICK_BANNED;
String joinAddress = event.getHostname();
if (!joinAddress.isEmpty()) {
joinAddresses.put(playerUUID, joinAddress.substring(0, joinAddress.lastIndexOf(':')));
}
dbSystem.getDatabase().executeTransaction(new BanStatusTransaction(playerUUID, () -> banned));
dbSystem.getDatabase().executeTransaction(new OperatorStatusTransaction(playerUUID, operator));
dbSystem.getDatabase().executeTransaction(new BanStatusTransaction(playerUUID, serverUUID, () -> banned));
dbSystem.getDatabase().executeTransaction(new OperatorStatusTransaction(playerUUID, serverUUID, operator));
} catch (Exception e) {
errorLogger.error(e, ErrorContext.builder().related(event, event.getResult()).build());
}
@ -230,13 +231,14 @@ public class PlayerOnlineListener implements Listener {
Player player = event.getPlayer();
String playerName = player.getName();
UUID playerUUID = player.getUniqueId();
ServerUUID serverUUID = serverInfo.getServerUUID();
BukkitAFKListener.afkTracker.loggedOut(playerUUID, time);
joinAddresses.remove(playerUUID);
nicknameCache.removeDisplayName(playerUUID);
dbSystem.getDatabase().executeTransaction(new BanStatusTransaction(playerUUID, player::isBanned));
dbSystem.getDatabase().executeTransaction(new BanStatusTransaction(playerUUID, serverUUID, player::isBanned));
sessionCache.endSession(playerUUID, time)
.ifPresent(endedSession -> dbSystem.getDatabase().executeTransaction(new SessionEndTransaction(endedSession)));

View File

@ -16,6 +16,7 @@
*/
package com.djrapitops.plan.storage.database.transactions.events;
import com.djrapitops.plan.identification.ServerUUID;
import com.djrapitops.plan.storage.database.sql.building.Update;
import com.djrapitops.plan.storage.database.sql.tables.UserInfoTable;
import com.djrapitops.plan.storage.database.transactions.ExecStatement;
@ -35,10 +36,12 @@ import java.util.function.BooleanSupplier;
public class BanStatusTransaction extends Transaction {
private final UUID playerUUID;
private final ServerUUID serverUUID;
private final BooleanSupplier banStatus;
public BanStatusTransaction(UUID playerUUID, BooleanSupplier banStatus) {
public BanStatusTransaction(UUID playerUUID, ServerUUID serverUUID, BooleanSupplier banStatus) {
this.playerUUID = playerUUID;
this.serverUUID = serverUUID;
this.banStatus = banStatus;
}
@ -50,6 +53,7 @@ public class BanStatusTransaction extends Transaction {
private Executable updateBanStatus() {
String sql = Update.values(UserInfoTable.TABLE_NAME, UserInfoTable.BANNED)
.where(UserInfoTable.USER_UUID + "=?")
.and(UserInfoTable.SERVER_UUID + "=?")
.toString();
return new ExecStatement(sql) {
@ -57,6 +61,7 @@ public class BanStatusTransaction extends Transaction {
public void prepare(PreparedStatement statement) throws SQLException {
statement.setBoolean(1, banStatus.getAsBoolean());
statement.setString(2, playerUUID.toString());
statement.setString(3, serverUUID.toString());
}
};
}

View File

@ -16,6 +16,7 @@
*/
package com.djrapitops.plan.storage.database.transactions.events;
import com.djrapitops.plan.identification.ServerUUID;
import com.djrapitops.plan.storage.database.sql.building.Update;
import com.djrapitops.plan.storage.database.sql.tables.UserInfoTable;
import com.djrapitops.plan.storage.database.transactions.ExecStatement;
@ -34,10 +35,12 @@ import java.util.UUID;
public class OperatorStatusTransaction extends ThrowawayTransaction {
private final UUID playerUUID;
private final ServerUUID serverUUID;
private final boolean operatorStatus;
public OperatorStatusTransaction(UUID playerUUID, boolean operatorStatus) {
public OperatorStatusTransaction(UUID playerUUID, ServerUUID serverUUID, boolean operatorStatus) {
this.playerUUID = playerUUID;
this.serverUUID = serverUUID;
this.operatorStatus = operatorStatus;
}
@ -49,6 +52,7 @@ public class OperatorStatusTransaction extends ThrowawayTransaction {
private Executable updateOperatorStatus() {
String sql = Update.values(UserInfoTable.TABLE_NAME, UserInfoTable.OP)
.where(UserInfoTable.USER_UUID + "=?")
.and(UserInfoTable.SERVER_UUID + "=?")
.toString();
return new ExecStatement(sql) {
@ -56,6 +60,7 @@ public class OperatorStatusTransaction extends ThrowawayTransaction {
public void prepare(PreparedStatement statement) throws SQLException {
statement.setBoolean(1, operatorStatus);
statement.setString(2, playerUUID.toString());
statement.setString(3, serverUUID.toString());
}
};
}

View File

@ -97,7 +97,7 @@ public interface UserInfoQueriesTest extends DatabaseTestPreparer {
db().executeTransaction(new PlayerServerRegisterTransaction(playerUUID, () -> TestConstants.REGISTER_TIME,
TestConstants.PLAYER_ONE_NAME, serverUUID(), TestConstants.GET_PLAYER_HOSTNAME));
db().executeTransaction(new BanStatusTransaction(playerUUID, () -> true));
db().executeTransaction(new BanStatusTransaction(playerUUID, serverUUID(), () -> true));
Set<UserInfo> userInfo = db().query(UserInfoQueries.fetchUserInformationOfUser(playerUUID));
Set<UserInfo> expected = Collections.singleton(new UserInfo(playerUUID, serverUUID(), TestConstants.REGISTER_TIME, false, TestConstants.GET_PLAYER_HOSTNAME.get(), true));
@ -110,7 +110,7 @@ public interface UserInfoQueriesTest extends DatabaseTestPreparer {
db().executeTransaction(new PlayerServerRegisterTransaction(playerUUID, () -> TestConstants.REGISTER_TIME,
TestConstants.PLAYER_ONE_NAME, serverUUID(), TestConstants.GET_PLAYER_HOSTNAME));
db().executeTransaction(new OperatorStatusTransaction(playerUUID, true));
db().executeTransaction(new OperatorStatusTransaction(playerUUID, serverUUID(), true));
Set<UserInfo> userInfo = db().query(UserInfoQueries.fetchUserInformationOfUser(playerUUID));
Set<UserInfo> expected = Collections.singleton(new UserInfo(playerUUID, serverUUID(), TestConstants.REGISTER_TIME, true, TestConstants.GET_PLAYER_HOSTNAME.get(), false));

View File

@ -103,9 +103,13 @@ public class PlayerOnlineListener implements Listener {
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerLogin(PlayerLoginEvent event) {
try {
UUID playerUUID = event.getPlayer().getUniqueId();
boolean operator = event.getPlayer().isOp();
dbSystem.getDatabase().executeTransaction(new OperatorStatusTransaction(playerUUID, operator));
Player player = event.getPlayer();
UUID playerUUID = player.getUniqueId();
ServerUUID serverUUID = serverInfo.getServerUUID();
boolean operator = player.isOp();
dbSystem.getDatabase().executeTransaction(new BanStatusTransaction(playerUUID, serverUUID, player::isBanned));
dbSystem.getDatabase().executeTransaction(new OperatorStatusTransaction(playerUUID, serverUUID, operator));
} catch (Exception e) {
errorLogger.error(e, ErrorContext.builder().related(event).build());
}
@ -215,13 +219,14 @@ public class PlayerOnlineListener implements Listener {
Player player = event.getPlayer();
String playerName = player.getName();
UUID playerUUID = player.getUniqueId();
ServerUUID serverUUID = serverInfo.getServerUUID();
if (playerUUID == null) return; // Can be null when player is not signed in to xbox live
NukkitAFKListener.afkTracker.loggedOut(playerUUID, time);
nicknameCache.removeDisplayName(playerUUID);
dbSystem.getDatabase().executeTransaction(new BanStatusTransaction(playerUUID, player::isBanned));
dbSystem.getDatabase().executeTransaction(new BanStatusTransaction(playerUUID, serverUUID, player::isBanned));
sessionCache.endSession(playerUUID, time)
.ifPresent(endedSession -> dbSystem.getDatabase().executeTransaction(new SessionEndTransaction(endedSession)));

View File

@ -113,8 +113,8 @@ public class PlayerOnlineListener {
private void actOnLoginEvent(ClientConnectionEvent.Login event) {
GameProfile profile = event.getProfile();
UUID playerUUID = profile.getUniqueId();
boolean banned = isBanned(profile);
dbSystem.getDatabase().executeTransaction(new BanStatusTransaction(playerUUID, () -> banned));
ServerUUID serverUUID = serverInfo.getServerUUID();
dbSystem.getDatabase().executeTransaction(new BanStatusTransaction(playerUUID, serverUUID, () -> isBanned(profile)));
}
@Listener(order = Order.POST)
@ -218,13 +218,13 @@ public class PlayerOnlineListener {
Player player = event.getTargetEntity();
String playerName = player.getName();
UUID playerUUID = player.getUniqueId();
ServerUUID serverUUID = serverInfo.getServerUUID();
SpongeAFKListener.afkTracker.loggedOut(playerUUID, time);
nicknameCache.removeDisplayName(playerUUID);
boolean banned = isBanned(player.getProfile());
dbSystem.getDatabase().executeTransaction(new BanStatusTransaction(playerUUID, () -> banned));
dbSystem.getDatabase().executeTransaction(new BanStatusTransaction(playerUUID, serverUUID, () -> isBanned(player.getProfile())));
sessionCache.endSession(playerUUID, time)
.ifPresent(endedSession -> dbSystem.getDatabase().executeTransaction(new SessionEndTransaction(endedSession)));