mirror of
https://github.com/jie65535/gc-opencommand-plugin.git
synced 2025-06-02 17:49:12 +08:00
Update version to dev-1.1.0
Support gc-dev-1.1.2 Fix token expired but not deleted bug
This commit is contained in:
parent
4227354ae2
commit
062187d1c1
@ -4,7 +4,7 @@ plugins {
|
||||
}
|
||||
|
||||
group 'com.github.jie65535.opencommand'
|
||||
version 'dev-1.0.0'
|
||||
version 'dev-1.1.0'
|
||||
|
||||
sourceCompatibility = 17
|
||||
targetCompatibility = 17
|
||||
|
@ -4,12 +4,14 @@ import com.github.jie65535.opencommand.json.JsonRequest;
|
||||
import com.github.jie65535.opencommand.json.JsonResponse;
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.command.CommandMap;
|
||||
import emu.grasscutter.server.http.Router;
|
||||
import emu.grasscutter.utils.Crypto;
|
||||
import emu.grasscutter.utils.MessageHandler;
|
||||
import emu.grasscutter.utils.Utils;
|
||||
import express.http.HttpContextHandler;
|
||||
import express.Express;
|
||||
import express.http.Request;
|
||||
import express.http.Response;
|
||||
import io.javalin.Javalin;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
|
||||
@ -18,15 +20,19 @@ import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public final class OpenCommandHandler implements HttpContextHandler {
|
||||
public final class OpenCommandHandler implements Router {
|
||||
|
||||
@Override
|
||||
public void applyRoutes(Express express, Javalin javalin) {
|
||||
express.post("/opencommand/api", OpenCommandHandler::handle);
|
||||
}
|
||||
|
||||
private static final Map<String, Integer> clients = new HashMap<>();
|
||||
private static final Map<String, Date> tokenExpireTime = new HashMap<>();
|
||||
private static final Map<String, Integer> codes = new HashMap<>();
|
||||
private static final Int2ObjectMap<Date> codeExpireTime = new Int2ObjectOpenHashMap<>();
|
||||
|
||||
@Override
|
||||
public void handle(Request request, Response response) throws IOException {
|
||||
public static void handle(Request request, Response response) {
|
||||
// Trigger cleanup action
|
||||
cleanupExpiredData();
|
||||
var now = new Date();
|
||||
@ -70,6 +76,7 @@ public final class OpenCommandHandler implements HttpContextHandler {
|
||||
response.json(new JsonResponse(401, "Unauthorized"));
|
||||
return;
|
||||
}
|
||||
|
||||
if (codes.containsKey(req.token)) {
|
||||
if (req.action.equals("verify")) {
|
||||
if (codes.get(req.token).equals(req.data)) {
|
||||
@ -85,7 +92,7 @@ public final class OpenCommandHandler implements HttpContextHandler {
|
||||
} else {
|
||||
if (req.action.equals("command")) {
|
||||
// update token expire time
|
||||
tokenExpireTime.put(req.token, new Date(now.getTime() + 60 * 60 * 1000));
|
||||
tokenExpireTime.put(req.token, new Date(now.getTime() + 24 * 60 * 60 * 1000));
|
||||
var playerId = clients.get(req.token);
|
||||
var player = Grasscutter.getGameServer().getPlayerByUid(playerId);
|
||||
var command = req.data.toString();
|
||||
@ -105,9 +112,18 @@ public final class OpenCommandHandler implements HttpContextHandler {
|
||||
response.json(new JsonResponse(403, "forbidden"));
|
||||
}
|
||||
|
||||
private void cleanupExpiredData() {
|
||||
private static void cleanupExpiredData() {
|
||||
var now = new Date();
|
||||
codeExpireTime.int2ObjectEntrySet().removeIf(entry -> entry.getValue().before(now));
|
||||
tokenExpireTime.entrySet().removeIf(entry -> entry.getValue().before(now));
|
||||
|
||||
var it = tokenExpireTime.entrySet().iterator();
|
||||
while (it.hasNext()) {
|
||||
var entry = it.next();
|
||||
if (entry.getValue().before(now)) {
|
||||
it.remove();
|
||||
// remove expired token
|
||||
clients.remove(entry.getKey());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,23 +4,19 @@ import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.plugin.Plugin;
|
||||
|
||||
public class OpenCommandPlugin extends Plugin {
|
||||
private OpenCommandHandler handler;
|
||||
|
||||
@Override
|
||||
public void onLoad() {
|
||||
handler = new OpenCommandHandler();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
var app = Grasscutter.getDispatchServer().getServer();
|
||||
app.post("/opencommand/api", handler);
|
||||
Grasscutter.getLogger().info("Open command enabled");
|
||||
Grasscutter.getHttpServer().addRouter(OpenCommandHandler.class);
|
||||
Grasscutter.getLogger().info("[OpenCommand] Enabled");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
|
||||
Grasscutter.getLogger().info("[OpenCommand] Disabled");
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "opencommand-plugin",
|
||||
"description": "Open command interface for third-party clients",
|
||||
"version": "dev-1.0.0",
|
||||
"version": "dev-1.1.0",
|
||||
"mainClass": "com.github.jie65535.opencommand.OpenCommandPlugin",
|
||||
"authors": ["jie65535"]
|
||||
}
|
Loading…
Reference in New Issue
Block a user