diff --git a/core/src/main/java/org/geysermc/geyser/session/auth/AuthData.java b/core/src/main/java/org/geysermc/geyser/session/auth/AuthData.java index 99b7ae3af..7e7171824 100644 --- a/core/src/main/java/org/geysermc/geyser/session/auth/AuthData.java +++ b/core/src/main/java/org/geysermc/geyser/session/auth/AuthData.java @@ -27,5 +27,13 @@ package org.geysermc.geyser.session.auth; import java.util.UUID; -public record AuthData(String name, UUID uuid, String xuid) { +/** + * A class holding some basic information of the connected user. + * + * @param name The gamertag of the user + * @param uuid Also known as identity + * @param xuid The xuid of the user + * @param issuedAt The unix time (in seconds) that the JWT was issued + */ +public record AuthData(String name, UUID uuid, String xuid, long issuedAt) { } diff --git a/core/src/main/java/org/geysermc/geyser/util/LoginEncryptionUtils.java b/core/src/main/java/org/geysermc/geyser/util/LoginEncryptionUtils.java index e2ad05296..bf275fe06 100644 --- a/core/src/main/java/org/geysermc/geyser/util/LoginEncryptionUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/LoginEncryptionUtils.java @@ -76,9 +76,13 @@ public class LoginEncryptionUtils { return; } + // Should always be present, but hey, why not make it safe :D + Long rawIssuedAt = (Long) result.rawIdentityClaims().get("iat"); + long issuedAt = rawIssuedAt != null ? rawIssuedAt : -1; + IdentityData extraData = result.identityClaims().extraData; // TODO!!! identity won't persist - session.setAuthData(new AuthData(extraData.displayName, extraData.identity, extraData.xuid)); + session.setAuthData(new AuthData(extraData.displayName, extraData.identity, extraData.xuid, issuedAt)); if (authPayload instanceof CertificateChainPayload certificateChainPayload) { session.setCertChainData(certificateChainPayload.getChain()); } else {