Converted the new forms

This commit is contained in:
Tim203 2022-05-28 23:45:35 +02:00
parent d4ecd2bd72
commit 84bcadc687
No known key found for this signature in database
GPG key ID: 064EE9F5BF7C3EE8
15 changed files with 99 additions and 60 deletions

View file

@ -6,9 +6,9 @@
<parent> <parent>
<groupId>org.geysermc</groupId> <groupId>org.geysermc</groupId>
<artifactId>geyser-parent</artifactId> <artifactId>geyser-parent</artifactId>
<version>2.0.3-SNAPSHOT</version> <version>2.0.3-cumulus-SNAPSHOT</version>
</parent> </parent>
<artifactId>ap</artifactId> <artifactId>ap</artifactId>
<version>2.0.3-SNAPSHOT</version> <version>2.0.3-cumulus-SNAPSHOT</version>
</project> </project>

View file

@ -5,7 +5,7 @@
<parent> <parent>
<groupId>org.geysermc</groupId> <groupId>org.geysermc</groupId>
<artifactId>api-parent</artifactId> <artifactId>api-parent</artifactId>
<version>2.0.3-SNAPSHOT</version> <version>2.0.3-cumulus-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View file

@ -5,7 +5,7 @@
<parent> <parent>
<groupId>org.geysermc</groupId> <groupId>org.geysermc</groupId>
<artifactId>api-parent</artifactId> <artifactId>api-parent</artifactId>
<version>2.0.3-SNAPSHOT</version> <version>2.0.3-cumulus-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
@ -26,7 +26,7 @@
<dependency> <dependency>
<groupId>org.geysermc</groupId> <groupId>org.geysermc</groupId>
<artifactId>base-api</artifactId> <artifactId>base-api</artifactId>
<version>2.0.3-SNAPSHOT</version> <version>2.0.3-cumulus-SNAPSHOT</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
</dependencies> </dependencies>

View file

@ -6,7 +6,7 @@
<parent> <parent>
<groupId>org.geysermc</groupId> <groupId>org.geysermc</groupId>
<artifactId>geyser-parent</artifactId> <artifactId>geyser-parent</artifactId>
<version>2.0.3-SNAPSHOT</version> <version>2.0.3-cumulus-SNAPSHOT</version>
</parent> </parent>
<artifactId>api-parent</artifactId> <artifactId>api-parent</artifactId>

View file

@ -6,7 +6,7 @@
<parent> <parent>
<groupId>org.geysermc</groupId> <groupId>org.geysermc</groupId>
<artifactId>bootstrap-parent</artifactId> <artifactId>bootstrap-parent</artifactId>
<version>2.0.3-SNAPSHOT</version> <version>2.0.3-cumulus-SNAPSHOT</version>
</parent> </parent>
<artifactId>bootstrap-bungeecord</artifactId> <artifactId>bootstrap-bungeecord</artifactId>
@ -14,7 +14,7 @@
<dependency> <dependency>
<groupId>org.geysermc</groupId> <groupId>org.geysermc</groupId>
<artifactId>core</artifactId> <artifactId>core</artifactId>
<version>2.0.3-SNAPSHOT</version> <version>2.0.3-cumulus-SNAPSHOT</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<!-- Used for better working with internals without reflection --> <!-- Used for better working with internals without reflection -->

View file

@ -6,7 +6,7 @@
<parent> <parent>
<groupId>org.geysermc</groupId> <groupId>org.geysermc</groupId>
<artifactId>geyser-parent</artifactId> <artifactId>geyser-parent</artifactId>
<version>2.0.3-SNAPSHOT</version> <version>2.0.3-cumulus-SNAPSHOT</version>
</parent> </parent>
<artifactId>bootstrap-parent</artifactId> <artifactId>bootstrap-parent</artifactId>
<packaging>pom</packaging> <packaging>pom</packaging>
@ -34,7 +34,7 @@
<dependency> <dependency>
<groupId>org.geysermc</groupId> <groupId>org.geysermc</groupId>
<artifactId>ap</artifactId> <artifactId>ap</artifactId>
<version>2.0.3-SNAPSHOT</version> <version>2.0.3-cumulus-SNAPSHOT</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
</dependencies> </dependencies>

View file

@ -6,7 +6,7 @@
<parent> <parent>
<groupId>org.geysermc</groupId> <groupId>org.geysermc</groupId>
<artifactId>bootstrap-parent</artifactId> <artifactId>bootstrap-parent</artifactId>
<version>2.0.3-SNAPSHOT</version> <version>2.0.3-cumulus-SNAPSHOT</version>
</parent> </parent>
<artifactId>bootstrap-spigot</artifactId> <artifactId>bootstrap-spigot</artifactId>
@ -30,7 +30,7 @@
<dependency> <dependency>
<groupId>org.geysermc</groupId> <groupId>org.geysermc</groupId>
<artifactId>core</artifactId> <artifactId>core</artifactId>
<version>2.0.3-SNAPSHOT</version> <version>2.0.3-cumulus-SNAPSHOT</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency> <dependency>

View file

@ -6,7 +6,7 @@
<parent> <parent>
<groupId>org.geysermc</groupId> <groupId>org.geysermc</groupId>
<artifactId>bootstrap-parent</artifactId> <artifactId>bootstrap-parent</artifactId>
<version>2.0.3-SNAPSHOT</version> <version>2.0.3-cumulus-SNAPSHOT</version>
</parent> </parent>
<artifactId>bootstrap-sponge</artifactId> <artifactId>bootstrap-sponge</artifactId>
@ -14,7 +14,7 @@
<dependency> <dependency>
<groupId>org.geysermc</groupId> <groupId>org.geysermc</groupId>
<artifactId>core</artifactId> <artifactId>core</artifactId>
<version>2.0.3-SNAPSHOT</version> <version>2.0.3-cumulus-SNAPSHOT</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency> <dependency>

View file

@ -6,7 +6,7 @@
<parent> <parent>
<groupId>org.geysermc</groupId> <groupId>org.geysermc</groupId>
<artifactId>bootstrap-parent</artifactId> <artifactId>bootstrap-parent</artifactId>
<version>2.0.3-SNAPSHOT</version> <version>2.0.3-cumulus-SNAPSHOT</version>
</parent> </parent>
<artifactId>bootstrap-standalone</artifactId> <artifactId>bootstrap-standalone</artifactId>
@ -18,7 +18,7 @@
<dependency> <dependency>
<groupId>org.geysermc</groupId> <groupId>org.geysermc</groupId>
<artifactId>core</artifactId> <artifactId>core</artifactId>
<version>2.0.3-SNAPSHOT</version> <version>2.0.3-cumulus-SNAPSHOT</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency> <dependency>

View file

@ -6,7 +6,7 @@
<parent> <parent>
<groupId>org.geysermc</groupId> <groupId>org.geysermc</groupId>
<artifactId>bootstrap-parent</artifactId> <artifactId>bootstrap-parent</artifactId>
<version>2.0.3-SNAPSHOT</version> <version>2.0.3-cumulus-SNAPSHOT</version>
</parent> </parent>
<artifactId>bootstrap-velocity</artifactId> <artifactId>bootstrap-velocity</artifactId>
@ -14,7 +14,7 @@
<dependency> <dependency>
<groupId>org.geysermc</groupId> <groupId>org.geysermc</groupId>
<artifactId>core</artifactId> <artifactId>core</artifactId>
<version>2.0.3-SNAPSHOT</version> <version>2.0.3-cumulus-SNAPSHOT</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency> <dependency>

View file

@ -6,7 +6,7 @@
<parent> <parent>
<groupId>org.geysermc</groupId> <groupId>org.geysermc</groupId>
<artifactId>geyser-parent</artifactId> <artifactId>geyser-parent</artifactId>
<version>2.0.3-SNAPSHOT</version> <version>2.0.3-cumulus-SNAPSHOT</version>
</parent> </parent>
<artifactId>common</artifactId> <artifactId>common</artifactId>
@ -20,7 +20,7 @@
<dependency> <dependency>
<groupId>org.geysermc.cumulus</groupId> <groupId>org.geysermc.cumulus</groupId>
<artifactId>cumulus</artifactId> <artifactId>cumulus</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.1-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.google.code.gson</groupId> <groupId>com.google.code.gson</groupId>

View file

@ -6,7 +6,7 @@
<parent> <parent>
<groupId>org.geysermc</groupId> <groupId>org.geysermc</groupId>
<artifactId>geyser-parent</artifactId> <artifactId>geyser-parent</artifactId>
<version>2.0.3-SNAPSHOT</version> <version>2.0.3-cumulus-SNAPSHOT</version>
</parent> </parent>
<artifactId>core</artifactId> <artifactId>core</artifactId>
@ -21,19 +21,19 @@
<dependency> <dependency>
<groupId>org.geysermc</groupId> <groupId>org.geysermc</groupId>
<artifactId>ap</artifactId> <artifactId>ap</artifactId>
<version>2.0.3-SNAPSHOT</version> <version>2.0.3-cumulus-SNAPSHOT</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.geysermc</groupId> <groupId>org.geysermc</groupId>
<artifactId>geyser-api</artifactId> <artifactId>geyser-api</artifactId>
<version>2.0.3-SNAPSHOT</version> <version>2.0.3-cumulus-SNAPSHOT</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.geysermc</groupId> <groupId>org.geysermc</groupId>
<artifactId>common</artifactId> <artifactId>common</artifactId>
<version>2.0.3-SNAPSHOT</version> <version>2.0.3-cumulus-SNAPSHOT</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<!-- Jackson JSON and YAML serialization --> <!-- Jackson JSON and YAML serialization -->

View file

@ -43,29 +43,29 @@ import java.util.concurrent.atomic.AtomicInteger;
@RequiredArgsConstructor @RequiredArgsConstructor
public class FormCache { public class FormCache {
private final FormDefinitions formDefinitions = FormDefinitions.instance(); private final FormDefinitions formDefinitions = FormDefinitions.instance();
private final AtomicInteger formId = new AtomicInteger(0); private final AtomicInteger formIdCounter = new AtomicInteger(0);
private final Int2ObjectMap<Form> forms = new Int2ObjectOpenHashMap<>(); private final Int2ObjectMap<Form> forms = new Int2ObjectOpenHashMap<>();
private final GeyserSession session; private final GeyserSession session;
public int addForm(Form form) { public int addForm(Form form) {
int windowId = formId.getAndIncrement(); int formId = formIdCounter.getAndIncrement();
forms.put(windowId, form); forms.put(formId, form);
return windowId; return formId;
} }
public void showForm(Form form) { public void showForm(Form form) {
int windowId = addForm(form); int formId = addForm(form);
if (session.getUpstream().isInitialized()) { if (session.getUpstream().isInitialized()) {
sendForm(windowId, form); sendForm(formId, form);
} }
} }
private void sendForm(int windowId, Form form) { private void sendForm(int formId, Form form) {
String jsonData = formDefinitions.codecFor(form).jsonData(form); String jsonData = formDefinitions.codecFor(form).jsonData(form);
ModalFormRequestPacket formRequestPacket = new ModalFormRequestPacket(); ModalFormRequestPacket formRequestPacket = new ModalFormRequestPacket();
formRequestPacket.setFormId(windowId); formRequestPacket.setFormId(formId);
formRequestPacket.setFormData(jsonData); formRequestPacket.setFormData(jsonData);
session.sendUpstreamPacket(formRequestPacket); session.sendUpstreamPacket(formRequestPacket);
@ -74,8 +74,10 @@ public class FormCache {
NetworkStackLatencyPacket latencyPacket = new NetworkStackLatencyPacket(); NetworkStackLatencyPacket latencyPacket = new NetworkStackLatencyPacket();
latencyPacket.setFromServer(true); latencyPacket.setFromServer(true);
latencyPacket.setTimestamp(-System.currentTimeMillis()); latencyPacket.setTimestamp(-System.currentTimeMillis());
session.scheduleInEventLoop(() -> session.sendUpstreamPacket(latencyPacket), session.scheduleInEventLoop(
500, TimeUnit.MILLISECONDS); () -> session.sendUpstreamPacket(latencyPacket),
500, TimeUnit.MILLISECONDS
);
} }
} }

View file

@ -40,7 +40,10 @@ import com.nukkitx.protocol.bedrock.util.EncryptionUtils;
import org.geysermc.cumulus.form.CustomForm; import org.geysermc.cumulus.form.CustomForm;
import org.geysermc.cumulus.form.ModalForm; import org.geysermc.cumulus.form.ModalForm;
import org.geysermc.cumulus.form.SimpleForm; import org.geysermc.cumulus.form.SimpleForm;
import org.geysermc.cumulus.response.SimpleFormResponse;
import org.geysermc.cumulus.response.result.FormResponseResult;
import org.geysermc.cumulus.response.result.ResultType; import org.geysermc.cumulus.response.result.ResultType;
import org.geysermc.cumulus.response.result.ValidFormResponseResult;
import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.GeyserImpl;
import org.geysermc.geyser.configuration.GeyserConfiguration; import org.geysermc.geyser.configuration.GeyserConfiguration;
import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.GeyserSession;
@ -59,6 +62,7 @@ import java.security.interfaces.ECPublicKey;
import java.security.spec.ECGenParameterSpec; import java.security.spec.ECGenParameterSpec;
import java.util.Iterator; import java.util.Iterator;
import java.util.UUID; import java.util.UUID;
import java.util.function.BiConsumer;
public class LoginEncryptionUtils { public class LoginEncryptionUtils {
private static final ObjectMapper JSON_MAPPER = new ObjectMapper().disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); private static final ObjectMapper JSON_MAPPER = new ObjectMapper().disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
@ -264,42 +268,49 @@ public class LoginEncryptionUtils {
* Build a window that explains the user's credentials will be saved to the system. * Build a window that explains the user's credentials will be saved to the system.
*/ */
public static void buildAndShowConsentWindow(GeyserSession session) { public static void buildAndShowConsentWindow(GeyserSession session) {
String locale = session.getLocale();
session.sendForm( session.sendForm(
SimpleForm.builder() SimpleForm.builder()
.translator(LoginEncryptionUtils::translate, session.getLocale())
.title("%gui.signIn") .title("%gui.signIn")
.content(GeyserLocale.getPlayerLocaleString("geyser.auth.login.save_token.warning", locale) + .content("""
"\n\n" + geyser.auth.login.save_token.warning
GeyserLocale.getPlayerLocaleString("geyser.auth.login.save_token.proceed", locale))
geyser.auth.login.save_token.proceed""")
.button("%gui.ok") .button("%gui.ok")
.button("%gui.decline") .button("%gui.decline")
.responseHandler((form, responseData) -> { .resultHandler(
SimpleFormResponse response = form.parseResponse(responseData); authenticateOrKickHandler(session),
if (response.isCorrect() && response.getClickedButtonId() == 0) { ResultType.CLOSED, ResultType.INVALID, ResultType.VALID
session.authenticateWithMicrosoftCode(true); )
} else { );
session.disconnect("%disconnect.quitting");
}
}));
} }
public static void buildAndShowTokenExpiredWindow(GeyserSession session) { public static void buildAndShowTokenExpiredWindow(GeyserSession session) {
String locale = session.getLocale();
session.sendForm( session.sendForm(
SimpleForm.builder() SimpleForm.builder()
.title(GeyserLocale.getPlayerLocaleString("geyser.auth.login.form.expired", locale)) .translator(LoginEncryptionUtils::translate, session.getLocale())
.content(GeyserLocale.getPlayerLocaleString("geyser.auth.login.save_token.expired", locale) + .title("geyser.auth.login.form.expired")
"\n\n" + .content("""
GeyserLocale.getPlayerLocaleString("geyser.auth.login.save_token.proceed", locale)) geyser.auth.login.save_token.expired
geyser.auth.login.save_token.proceed""")
.button("%gui.ok") .button("%gui.ok")
.responseHandler((form, responseData) -> { .resultHandler(
SimpleFormResponse response = form.parseResponse(responseData); authenticateOrKickHandler(session),
if (response.isCorrect()) { ResultType.CLOSED, ResultType.INVALID, ResultType.VALID
)
);
}
private static BiConsumer<SimpleForm, FormResponseResult<SimpleFormResponse>> authenticateOrKickHandler(GeyserSession session) {
return (form, genericResult) -> {
if (genericResult instanceof ValidFormResponseResult<SimpleFormResponse> result &&
result.response().clickedButtonId() == 0) {
session.authenticateWithMicrosoftCode(true); session.authenticateWithMicrosoftCode(true);
} else { } else {
session.disconnect("%disconnect.quitting"); session.disconnect("%disconnect.quitting");
} }
})); };
} }
public static void buildAndShowLoginDetailsWindow(GeyserSession session) { public static void buildAndShowLoginDetailsWindow(GeyserSession session) {
@ -378,4 +389,30 @@ public class LoginEncryptionUtils {
}) })
); );
} }
/*
This checks per line if there is something to be translated, and it skips Bedrock translation keys (%)
*/
private static String translate(String key, String locale) {
StringBuilder newValue = new StringBuilder();
int previousIndex = 0;
while (previousIndex < key.length()) {
int nextIndex = key.indexOf('\n', previousIndex);
int endIndex = nextIndex == -1 ? key.length() : nextIndex;
// if there is more to this line than just a new line char
if (endIndex - previousIndex > 1) {
String substring = key.substring(previousIndex, endIndex);
if (key.charAt(previousIndex) != '%') {
newValue.append(GeyserLocale.getPlayerLocaleString(substring, locale));
} else {
newValue.append(substring);
}
}
newValue.append('\n');
previousIndex = endIndex + 1;
}
return newValue.toString();
}
} }

View file

@ -5,7 +5,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>org.geysermc</groupId> <groupId>org.geysermc</groupId>
<artifactId>geyser-parent</artifactId> <artifactId>geyser-parent</artifactId>
<version>2.0.3-SNAPSHOT</version> <version>2.0.3-cumulus-SNAPSHOT</version>
<packaging>pom</packaging> <packaging>pom</packaging>
<name>Geyser</name> <name>Geyser</name>
<description>Allows for players from Minecraft Bedrock Edition to join Minecraft Java Edition servers.</description> <description>Allows for players from Minecraft Bedrock Edition to join Minecraft Java Edition servers.</description>