mirror of
https://github.com/LuckPerms/LuckPerms.git
synced 2024-11-24 11:38:40 +01:00
Pre-generate web editor keypair to speed up initial session init
This commit is contained in:
parent
0fe85ed6ff
commit
b13a74c61e
@ -58,11 +58,11 @@ public class WebEditorSocket {
|
|||||||
private final WebEditorSession session;
|
private final WebEditorSession session;
|
||||||
/** The socket listener that handles incoming messages */
|
/** The socket listener that handles incoming messages */
|
||||||
private final WebEditorSocketListener listener;
|
private final WebEditorSocketListener listener;
|
||||||
|
/** The public and private keys used to sign messages sent by the plugin */
|
||||||
|
private final KeyPair pluginKeyPair;
|
||||||
|
|
||||||
/** The websocket backing the connection */
|
/** The websocket backing the connection */
|
||||||
private BytesocksClient.Socket socket;
|
private BytesocksClient.Socket socket;
|
||||||
/** The public and private keys used to sign messages sent by the plugin */
|
|
||||||
private KeyPair localKeys;
|
|
||||||
/** A task to check if the socket is still active */
|
/** A task to check if the socket is still active */
|
||||||
private SchedulerTask keepaliveTask;
|
private SchedulerTask keepaliveTask;
|
||||||
/** The public key used by the editor to sign messages */
|
/** The public key used by the editor to sign messages */
|
||||||
@ -75,6 +75,7 @@ public class WebEditorSocket {
|
|||||||
this.sender = sender;
|
this.sender = sender;
|
||||||
this.session = session;
|
this.session = session;
|
||||||
this.listener = new WebEditorSocketListener(this);
|
this.listener = new WebEditorSocketListener(this);
|
||||||
|
this.pluginKeyPair = plugin.getWebEditorStore().keyPair();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -86,7 +87,6 @@ public class WebEditorSocket {
|
|||||||
*/
|
*/
|
||||||
public void initialize(BytesocksClient client) throws UnsuccessfulRequestException, IOException {
|
public void initialize(BytesocksClient client) throws UnsuccessfulRequestException, IOException {
|
||||||
this.socket = client.createSocket(this.listener);
|
this.socket = client.createSocket(this.listener);
|
||||||
this.localKeys = CryptographyUtils.generateKeyPair();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -112,7 +112,7 @@ public class WebEditorSocket {
|
|||||||
*/
|
*/
|
||||||
public void appendDetailToRequest(WebEditorRequest request) {
|
public void appendDetailToRequest(WebEditorRequest request) {
|
||||||
String channelId = this.socket.channelId();
|
String channelId = this.socket.channelId();
|
||||||
String publicKey = Base64.getEncoder().encodeToString(this.localKeys.getPublic().getEncoded());
|
String publicKey = Base64.getEncoder().encodeToString(this.pluginKeyPair.getPublic().getEncoded());
|
||||||
|
|
||||||
JsonObject socket = new JsonObject();
|
JsonObject socket = new JsonObject();
|
||||||
socket.addProperty("protocolVersion", PROTOCOL_VERSION);
|
socket.addProperty("protocolVersion", PROTOCOL_VERSION);
|
||||||
@ -133,7 +133,7 @@ public class WebEditorSocket {
|
|||||||
*/
|
*/
|
||||||
public void send(JsonObject msg) {
|
public void send(JsonObject msg) {
|
||||||
String encoded = GsonProvider.normal().toJson(msg);
|
String encoded = GsonProvider.normal().toJson(msg);
|
||||||
String signature = CryptographyUtils.sign(this.localKeys.getPrivate(), encoded);
|
String signature = CryptographyUtils.sign(this.pluginKeyPair.getPrivate(), encoded);
|
||||||
|
|
||||||
JsonObject frame = new JObject()
|
JsonObject frame = new JObject()
|
||||||
.add("msg", encoded)
|
.add("msg", encoded)
|
||||||
|
@ -26,6 +26,10 @@
|
|||||||
package me.lucko.luckperms.common.webeditor.store;
|
package me.lucko.luckperms.common.webeditor.store;
|
||||||
|
|
||||||
import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
|
import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
|
||||||
|
import me.lucko.luckperms.common.webeditor.socket.CryptographyUtils;
|
||||||
|
|
||||||
|
import java.security.KeyPair;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Contains a store of known web editor sessions and provides a lookup function for
|
* Contains a store of known web editor sessions and provides a lookup function for
|
||||||
@ -35,11 +39,13 @@ public class WebEditorStore {
|
|||||||
private final WebEditorSessionMap sessions;
|
private final WebEditorSessionMap sessions;
|
||||||
private final WebEditorSocketMap sockets;
|
private final WebEditorSocketMap sockets;
|
||||||
private final WebEditorKeystore keystore;
|
private final WebEditorKeystore keystore;
|
||||||
|
private final CompletableFuture<KeyPair> keyPair;
|
||||||
|
|
||||||
public WebEditorStore(LuckPermsPlugin plugin) {
|
public WebEditorStore(LuckPermsPlugin plugin) {
|
||||||
this.sessions = new WebEditorSessionMap();
|
this.sessions = new WebEditorSessionMap();
|
||||||
this.sockets = new WebEditorSocketMap();
|
this.sockets = new WebEditorSocketMap();
|
||||||
this.keystore = new WebEditorKeystore(plugin.getBootstrap().getConfigDirectory().resolve("editor-keystore.json"));
|
this.keystore = new WebEditorKeystore(plugin.getBootstrap().getConfigDirectory().resolve("editor-keystore.json"));
|
||||||
|
this.keyPair = CompletableFuture.supplyAsync(CryptographyUtils::generateKeyPair, plugin.getBootstrap().getScheduler().async());
|
||||||
}
|
}
|
||||||
|
|
||||||
public WebEditorSessionMap sessions() {
|
public WebEditorSessionMap sessions() {
|
||||||
@ -54,4 +60,11 @@ public class WebEditorStore {
|
|||||||
return this.keystore;
|
return this.keystore;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public KeyPair keyPair() {
|
||||||
|
if (!this.keyPair.isDone()) {
|
||||||
|
throw new IllegalStateException("Web editor keypair has not been generated yet! Has the server just started?");
|
||||||
|
}
|
||||||
|
return this.keyPair.join();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user