Implement proper handbook authentication (pt. 1)

This commit is contained in:
KingRainbow44
2023-05-16 02:38:01 -04:00
parent 79d417c3ca
commit f1cf6da178
28 changed files with 1019 additions and 53 deletions

View File

@@ -1,12 +1,16 @@
package emu.grasscutter.server.dispatch;
import static emu.grasscutter.config.Configuration.DISPATCH_INFO;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.database.DatabaseHelper;
import emu.grasscutter.utils.Crypto;
import lombok.Getter;
import org.java_websocket.WebSocket;
import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer;
import org.slf4j.Logger;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
@@ -15,11 +19,8 @@ import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import lombok.Getter;
import org.java_websocket.WebSocket;
import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer;
import org.slf4j.Logger;
import static emu.grasscutter.config.Configuration.DISPATCH_INFO;
/* Internal communications server. */
public final class DispatchServer extends WebSocketServer implements IDispatcher {
@@ -39,6 +40,7 @@ public final class DispatchServer extends WebSocketServer implements IDispatcher
this.registerHandler(PacketIds.LoginNotify, this::handleLogin);
this.registerHandler(PacketIds.TokenValidateReq, this::validateToken);
this.registerHandler(PacketIds.GetAccountReq, this::fetchAccount);
}
/**
@@ -84,6 +86,23 @@ public final class DispatchServer extends WebSocketServer implements IDispatcher
this.sendMessage(socket, PacketIds.TokenValidateRsp, response);
}
/**
* Fetches an account by its ID.
*
* @param socket The socket the packet was received from.
* @param object The packet data.
*/
private void fetchAccount(WebSocket socket, JsonElement object) {
var message = IDispatcher.decode(object);
var accountId = message.get("accountId").getAsString();
// Get the account from the database.
var account = DatabaseHelper.getAccountById(accountId);
// Send the account.
this.sendMessage(socket, PacketIds.GetAccountRsp,
JSON.toJsonTree(account));
}
/**
* Broadcasts an encrypted message to all connected clients.
*