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 99b7ae3afa6..7e7171824ab 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 @@ 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 e2ad052961e..bf275fe0642 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 @@ private static void encryptConnectionWithCert(GeyserSession session, AuthPayload 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 {