Mirror von
https://github.com/GeyserMC/Geyser.git
synchronisiert 2024-12-25 15:50:14 +01:00
Properly use CompleteableFuture for MSA auth
Dieser Commit ist enthalten in:
Ursprung
1a0ac26398
Commit
ef7c673276
@ -609,28 +609,31 @@ public class GeyserSession implements CommandSender {
|
||||
}
|
||||
|
||||
loggingIn = true;
|
||||
|
||||
// This just looks cool
|
||||
SetTimePacket packet = new SetTimePacket();
|
||||
packet.setTime(16000);
|
||||
sendUpstreamPacket(packet);
|
||||
|
||||
// new thread so clients don't timeout
|
||||
new Thread(() -> {
|
||||
MsaAuthenticationService msaAuthenticationService = new MsaAuthenticationService(GeyserConnector.OAUTH_CLIENT_ID);
|
||||
|
||||
// Use a future to prevent timeouts as all the authentication is handled sync
|
||||
// This will be changed with the new protocol library.
|
||||
CompletableFuture.supplyAsync(() -> {
|
||||
try {
|
||||
MsaAuthenticationService msaAuthenticationService = new MsaAuthenticationService(GeyserConnector.OAUTH_CLIENT_ID);
|
||||
|
||||
MsaAuthenticationService.MsCodeResponse response = msaAuthenticationService.getAuthCode();
|
||||
LoginEncryptionUtils.buildAndShowMicrosoftCodeWindow(this, response);
|
||||
|
||||
// This just looks cool
|
||||
SetTimePacket packet = new SetTimePacket();
|
||||
packet.setTime(16000);
|
||||
sendUpstreamPacket(packet);
|
||||
|
||||
// Wait for the code to validate
|
||||
attemptCodeAuthentication(msaAuthenticationService);
|
||||
} catch (InvalidCredentialsException | IllegalArgumentException e) {
|
||||
connector.getLogger().info(LanguageUtils.getLocaleStringLog("geyser.auth.login.invalid", getAuthData().getName()));
|
||||
disconnect(LanguageUtils.getPlayerLocaleString("geyser.auth.login.invalid.kick", getClientData().getLanguageCode()));
|
||||
} catch (RequestException ex) {
|
||||
ex.printStackTrace();
|
||||
return msaAuthenticationService.getAuthCode();
|
||||
} catch (RequestException e) {
|
||||
throw new CompletionException(e);
|
||||
}
|
||||
}).start();
|
||||
}).whenComplete((response, ex) -> {
|
||||
if (ex != null) {
|
||||
ex.printStackTrace();
|
||||
return;
|
||||
}
|
||||
LoginEncryptionUtils.buildAndShowMicrosoftCodeWindow(this, response);
|
||||
attemptCodeAuthentication(msaAuthenticationService);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren