Alpha mongodb support
This commit is contained in:
parent
9757af1958
commit
3b4e9f9561
|
@ -220,7 +220,7 @@ public class SimpleAuth implements DedicatedServerModInitializer {
|
||||||
|
|
||||||
// Marking player as not authenticated
|
// Marking player as not authenticated
|
||||||
String uuid = convertUuid(player);
|
String uuid = convertUuid(player);
|
||||||
playerCacheMap.put(uuid, new PlayerCache(uuid, player));
|
playerCacheMap.put(uuid, PlayerCache.fromJson(player, DB.getUserData(uuid)));
|
||||||
playerCacheMap.get(uuid).isAuthenticated = false;
|
playerCacheMap.get(uuid).isAuthenticated = false;
|
||||||
|
|
||||||
// Teleporting player to spawn to hide its position
|
// Teleporting player to spawn to hide its position
|
||||||
|
|
|
@ -177,7 +177,7 @@ public class AuthCommand {
|
||||||
Entity sender = source.getEntity();
|
Entity sender = source.getEntity();
|
||||||
THREADPOOL.submit(() -> {
|
THREADPOOL.submit(() -> {
|
||||||
DB.deleteUserData(uuid);
|
DB.deleteUserData(uuid);
|
||||||
SimpleAuth.playerCacheMap.put(uuid, new PlayerCache(uuid, null));
|
SimpleAuth.playerCacheMap.put(uuid, new PlayerCache(null));
|
||||||
});
|
});
|
||||||
|
|
||||||
if(sender != null)
|
if(sender != null)
|
||||||
|
@ -205,7 +205,7 @@ public class AuthCommand {
|
||||||
playerCache = playerCacheMap.get(uuid);
|
playerCache = playerCacheMap.get(uuid);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
playerCache = new PlayerCache(uuid, null);
|
playerCache = new PlayerCache(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
playerCacheMap.put(uuid, playerCache);
|
playerCacheMap.put(uuid, playerCache);
|
||||||
|
@ -238,7 +238,7 @@ public class AuthCommand {
|
||||||
playerCache = playerCacheMap.get(uuid);
|
playerCache = playerCacheMap.get(uuid);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
playerCache = new PlayerCache(uuid, null);
|
playerCache = new PlayerCache(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
playerCacheMap.put(uuid, playerCache);
|
playerCacheMap.put(uuid, playerCache);
|
||||||
|
|
|
@ -176,7 +176,6 @@ public class AuthEventHandler {
|
||||||
|
|
||||||
// Punching a block
|
// Punching a block
|
||||||
public static ActionResult onAttackBlock(PlayerEntity player) {
|
public static ActionResult onAttackBlock(PlayerEntity player) {
|
||||||
DB.saveAll(playerCacheMap); //todo debug only
|
|
||||||
if(!isAuthenticated((ServerPlayerEntity) player) && !config.experimental.allowBlockPunch) {
|
if(!isAuthenticated((ServerPlayerEntity) player) && !config.experimental.allowBlockPunch) {
|
||||||
player.sendMessage(notAuthenticated(player), false);
|
player.sendMessage(notAuthenticated(player), false);
|
||||||
return ActionResult.FAIL;
|
return ActionResult.FAIL;
|
||||||
|
|
|
@ -47,7 +47,8 @@ public class DBHelper {
|
||||||
*/
|
*/
|
||||||
public boolean registerUser(String uuid, String data) {
|
public boolean registerUser(String uuid, String data) {
|
||||||
if(config.main.useMongoDB)
|
if(config.main.useMongoDB)
|
||||||
return MongoDB.registerUser(uuid, data);
|
//return MongoDB.registerUser(uuid, data);
|
||||||
|
System.out.println("Not implemented yet.");
|
||||||
return LevelDB.registerUser(uuid, data);
|
return LevelDB.registerUser(uuid, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,7 +82,8 @@ public class DBHelper {
|
||||||
*/
|
*/
|
||||||
public void updateUserData(String uuid, String data) {
|
public void updateUserData(String uuid, String data) {
|
||||||
if(config.main.useMongoDB)
|
if(config.main.useMongoDB)
|
||||||
MongoDB.updateUserData(uuid, data);
|
//MongoDB.updateUserData(uuid, data);
|
||||||
|
System.out.println("Not implemented yet.");
|
||||||
else
|
else
|
||||||
LevelDB.updateUserData(uuid, data);
|
LevelDB.updateUserData(uuid, data);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
package org.samo_lego.simpleauth.storage;
|
package org.samo_lego.simpleauth.storage;
|
||||||
|
|
||||||
import com.google.gson.*;
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
import net.minecraft.block.Blocks;
|
import net.minecraft.block.Blocks;
|
||||||
import net.minecraft.server.network.ServerPlayerEntity;
|
import net.minecraft.server.network.ServerPlayerEntity;
|
||||||
import net.minecraft.text.LiteralText;
|
|
||||||
|
|
||||||
import static org.samo_lego.simpleauth.SimpleAuth.DB;
|
import java.util.Objects;
|
||||||
|
|
||||||
import static org.samo_lego.simpleauth.SimpleAuth.config;
|
import static org.samo_lego.simpleauth.SimpleAuth.config;
|
||||||
import static org.samo_lego.simpleauth.utils.SimpleLogger.logInfo;
|
import static org.samo_lego.simpleauth.utils.SimpleLogger.logInfo;
|
||||||
|
|
||||||
|
@ -57,21 +58,21 @@ public class PlayerCache {
|
||||||
|
|
||||||
private static final Gson gson = new Gson();
|
private static final Gson gson = new Gson();
|
||||||
|
|
||||||
public PlayerCache(String uuid, ServerPlayerEntity player) {
|
public PlayerCache(ServerPlayerEntity player) {
|
||||||
if(DB.isClosed())
|
if(config.experimental.debugMode)
|
||||||
return;
|
logInfo("Creating cache for " + Objects.requireNonNull(player).getName());
|
||||||
|
this.isAuthenticated = false;
|
||||||
|
this.loginTries = 0;
|
||||||
|
|
||||||
if(player != null) {
|
if(player != null) {
|
||||||
if(config.experimental.debugMode)
|
|
||||||
logInfo("Creating cache for " + player.getName());
|
|
||||||
this.lastIp = player.getIp();
|
this.lastIp = player.getIp();
|
||||||
|
|
||||||
this.lastAir = player.getAir();
|
|
||||||
this.wasOnFire = player.isOnFire();
|
this.wasOnFire = player.isOnFire();
|
||||||
|
this.wasInPortal = player.getBlockState().getBlock().equals(Blocks.NETHER_PORTAL);
|
||||||
|
this.lastAir = player.getAir();
|
||||||
|
|
||||||
// Setting position cache
|
// Setting position cache
|
||||||
this.lastDim = String.valueOf(player.getEntityWorld().getRegistryKey().getValue());
|
this.lastDim = String.valueOf(player.getEntityWorld().getRegistryKey().getValue());
|
||||||
this.wasInPortal = player.getBlockState().getBlock().equals(Blocks.NETHER_PORTAL);
|
|
||||||
this.lastX = player.getX();
|
this.lastX = player.getX();
|
||||||
this.lastY = player.getY();
|
this.lastY = player.getY();
|
||||||
this.lastZ = player.getZ();
|
this.lastZ = player.getZ();
|
||||||
|
@ -82,61 +83,52 @@ public class PlayerCache {
|
||||||
this.lastAir = 300;
|
this.lastAir = 300;
|
||||||
}
|
}
|
||||||
|
|
||||||
String data = DB.getUserData(uuid);
|
|
||||||
if(!data.isEmpty()) {
|
|
||||||
// Getting (hashed) password
|
|
||||||
JsonObject json = gson.fromJson(data, JsonObject.class);
|
|
||||||
JsonElement passwordElement = json.get("password");
|
|
||||||
if(passwordElement instanceof JsonNull) {
|
|
||||||
if(player != null) {
|
|
||||||
player.sendMessage(new LiteralText(config.lang.corruptedPlayerData), false);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(config.experimental.debugMode)
|
|
||||||
logInfo("Password for " + uuid + " is null! Marking as not registered.");
|
|
||||||
this.password = "";
|
|
||||||
this.isRegistered = false;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
this.password = passwordElement.getAsString();
|
|
||||||
this.isRegistered = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// We should check the DB for saved coords
|
|
||||||
if(config.main.spawnOnJoin) {
|
|
||||||
try {
|
|
||||||
JsonElement lastLoc = json.get("lastLocation");
|
|
||||||
if (lastLoc != null) {
|
|
||||||
// Getting DB coords
|
|
||||||
JsonObject lastLocation = gson.fromJson(lastLoc.getAsString(), JsonObject.class);
|
|
||||||
this.lastDim = lastLocation.get("dim").isJsonNull() ? config.worldSpawn.dimension : lastLocation.get("dim").getAsString();
|
|
||||||
this.lastX = lastLocation.get("x").isJsonNull() ? config.worldSpawn.x : lastLocation.get("x").getAsDouble();
|
|
||||||
this.lastY = lastLocation.get("y").isJsonNull() ? config.worldSpawn.y : lastLocation.get("y").getAsDouble();
|
|
||||||
this.lastZ = lastLocation.get("z").isJsonNull() ? config.worldSpawn.z : lastLocation.get("z").getAsDouble();
|
|
||||||
|
|
||||||
// Removing location data from DB
|
|
||||||
json.remove("lastLocation");
|
|
||||||
DB.updateUserData(uuid, json.toString());
|
|
||||||
}
|
|
||||||
} catch (JsonSyntaxException ignored) {
|
|
||||||
// Player didn't have any coords in db to tp to
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
this.isRegistered = false;
|
this.isRegistered = false;
|
||||||
this.password = "";
|
this.password = "";
|
||||||
}
|
|
||||||
this.isAuthenticated = false;
|
|
||||||
this.loginTries = 0;
|
|
||||||
if(config.experimental.debugMode)
|
if(config.experimental.debugMode)
|
||||||
logInfo("Cache created. Registered: " + this.isRegistered + ", hashed password: " + this.password);
|
logInfo("New player cache created.");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PlayerCache fromJson(String json) {
|
public static PlayerCache fromJson(ServerPlayerEntity player, String json) {
|
||||||
|
if(json.isEmpty()) {
|
||||||
|
// Player doesn't have data yet
|
||||||
|
return new PlayerCache(player);
|
||||||
|
}
|
||||||
|
if(config.experimental.debugMode)
|
||||||
|
logInfo("Creating cache for " + Objects.requireNonNull(player).getName());
|
||||||
|
|
||||||
|
// Parsing data from DB
|
||||||
PlayerCache playerCache = gson.fromJson(json, PlayerCache.class);
|
PlayerCache playerCache = gson.fromJson(json, PlayerCache.class);
|
||||||
System.out.println(playerCache);
|
|
||||||
|
playerCache.loginTries = 0;
|
||||||
|
if(playerCache.password != null && !playerCache.password.isEmpty()) {
|
||||||
|
playerCache.isRegistered = true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Not registered
|
||||||
|
playerCache.isRegistered = false;
|
||||||
|
playerCache.password = "";
|
||||||
|
}
|
||||||
|
if(player != null) {
|
||||||
|
playerCache.lastIp = player.getIp();
|
||||||
|
|
||||||
|
playerCache.wasInPortal = player.getBlockState().getBlock().equals(Blocks.NETHER_PORTAL);
|
||||||
|
playerCache.lastAir = player.getAir();
|
||||||
|
playerCache.wasOnFire = player.isOnFire();
|
||||||
|
|
||||||
|
// Setting position cache
|
||||||
|
playerCache.lastDim = String.valueOf(player.getEntityWorld().getRegistryKey().getValue());
|
||||||
|
playerCache.lastX = player.getX();
|
||||||
|
playerCache.lastY = player.getY();
|
||||||
|
playerCache.lastZ = player.getZ();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
playerCache.wasInPortal = false;
|
||||||
|
playerCache.lastAir = 300;
|
||||||
|
playerCache.wasOnFire = false;
|
||||||
|
}
|
||||||
|
|
||||||
return playerCache;
|
return playerCache;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,17 +1,13 @@
|
||||||
package org.samo_lego.simpleauth.storage.database;
|
package org.samo_lego.simpleauth.storage.database;
|
||||||
|
|
||||||
|
|
||||||
import com.google.gson.JsonObject;
|
|
||||||
import com.mongodb.client.MongoClient;
|
import com.mongodb.client.MongoClient;
|
||||||
import com.mongodb.client.MongoClients;
|
import com.mongodb.client.MongoClients;
|
||||||
import com.mongodb.client.MongoCollection;
|
import com.mongodb.client.MongoCollection;
|
||||||
import com.mongodb.client.MongoDatabase;
|
import com.mongodb.client.MongoDatabase;
|
||||||
import com.mongodb.client.model.InsertOneModel;
|
import com.mongodb.client.model.InsertOneModel;
|
||||||
import com.mongodb.client.model.ReplaceOneModel;
|
import com.mongodb.client.model.ReplaceOneModel;
|
||||||
import com.mongodb.client.model.UpdateOneModel;
|
|
||||||
import org.bson.Document;
|
import org.bson.Document;
|
||||||
import org.bson.conversions.Bson;
|
|
||||||
import org.iq80.leveldb.DBException;
|
|
||||||
import org.samo_lego.simpleauth.storage.PlayerCache;
|
import org.samo_lego.simpleauth.storage.PlayerCache;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -20,7 +16,6 @@ import java.util.List;
|
||||||
|
|
||||||
import static com.mongodb.client.model.Filters.eq;
|
import static com.mongodb.client.model.Filters.eq;
|
||||||
import static org.samo_lego.simpleauth.SimpleAuth.config;
|
import static org.samo_lego.simpleauth.SimpleAuth.config;
|
||||||
import static org.samo_lego.simpleauth.utils.SimpleLogger.logError;
|
|
||||||
|
|
||||||
public class MongoDB {
|
public class MongoDB {
|
||||||
private static MongoCollection<Document> collection;
|
private static MongoCollection<Document> collection;
|
||||||
|
@ -44,39 +39,24 @@ public class MongoDB {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isUserRegistered(String uuid) {
|
public static boolean isUserRegistered(String uuid) {
|
||||||
try {
|
|
||||||
return collection.find(eq("UUID", uuid)).iterator().hasNext();
|
return collection.find(eq("UUID", uuid)).iterator().hasNext();
|
||||||
} catch (DBException e) {
|
|
||||||
logError(e.getMessage());
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean registerUser(String uuid, String data) {
|
|
||||||
if(!isUserRegistered(uuid)) {
|
|
||||||
collection.insertOne(
|
|
||||||
new Document(uuid, data)
|
|
||||||
);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void deleteUserData(String uuid) {
|
public static void deleteUserData(String uuid) {
|
||||||
collection.deleteOne(eq("UUID", uuid));
|
collection.deleteOne(eq("UUID", uuid));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void updateUserData(String uuid, String data) {
|
|
||||||
collection.updateOne(eq("UUID", uuid), new Document(uuid, data));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getUserData(String uuid){
|
public static String getUserData(String uuid){
|
||||||
return isUserRegistered(uuid) ? collection.find(eq("UUID", uuid)).iterator().next().getString(uuid) : "";
|
if(isUserRegistered(uuid)) {
|
||||||
|
Document data = collection.find(eq("UUID", uuid)).iterator().next();
|
||||||
|
return data.toJson();
|
||||||
|
}
|
||||||
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void saveFromCache(HashMap<String, PlayerCache> playerCacheMap) {
|
public static void saveFromCache(HashMap<String, PlayerCache> playerCacheMap) {
|
||||||
List<InsertOneModel<Document>> writeList = new ArrayList<>();
|
List<InsertOneModel<Document>> writeList = new ArrayList<>();
|
||||||
List<UpdateOneModel<Document>> updateList = new ArrayList<>();
|
List<ReplaceOneModel<Document>> updateList = new ArrayList<>();
|
||||||
playerCacheMap.forEach((uuid, playerCache) -> {
|
playerCacheMap.forEach((uuid, playerCache) -> {
|
||||||
// Save as BSON not JSON stringified
|
// Save as BSON not JSON stringified
|
||||||
Document lastLocation = new Document("x", playerCache.lastX)
|
Document lastLocation = new Document("x", playerCache.lastX)
|
||||||
|
@ -93,7 +73,7 @@ public class MongoDB {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
updateList.add(new UpdateOneModel<>(eq("UUID", uuid),
|
updateList.add(new ReplaceOneModel<>(eq("UUID", uuid),
|
||||||
new Document("UUID", uuid)
|
new Document("UUID", uuid)
|
||||||
.append("password", playerCache.password)
|
.append("password", playerCache.password)
|
||||||
.append("lastLocation", lastLocation)
|
.append("lastLocation", lastLocation)
|
||||||
|
@ -101,8 +81,6 @@ public class MongoDB {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
System.out.println(writeList);
|
|
||||||
System.out.println(updateList);
|
|
||||||
if(!writeList.isEmpty())
|
if(!writeList.isEmpty())
|
||||||
collection.bulkWrite(writeList);
|
collection.bulkWrite(writeList);
|
||||||
if(!updateList.isEmpty())
|
if(!updateList.isEmpty())
|
||||||
|
|
Loading…
Reference in New Issue