From 663e6a313ceaadd06e425207cbc28c21335ddf43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C4=81vis=20Mos=C4=81ns?= Date: Fri, 10 Dec 2021 05:22:44 +0200 Subject: [PATCH] Fix Microsoft account provider --- launcher/CMakeLists.txt | 1 + launcher/minecraft/auth/AccountData.cpp | 1 + launcher/minecraft/auth/AuthProviders.cpp | 2 ++ launcher/minecraft/auth/MinecraftAccount.cpp | 2 ++ .../minecraft/auth/flows/MSAInteractive.cpp | 1 - .../auth/providers/MicrosoftAuthProvider.h | 26 +++++++++++++++++++ launcher/ui/dialogs/LoginDialog.cpp | 10 ++++--- 7 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 launcher/minecraft/auth/providers/MicrosoftAuthProvider.h diff --git a/launcher/CMakeLists.txt b/launcher/CMakeLists.txt index 5f1a4bfa..7012778f 100644 --- a/launcher/CMakeLists.txt +++ b/launcher/CMakeLists.txt @@ -218,6 +218,7 @@ set(MINECRAFT_SOURCES minecraft/auth/providers/DummyAuthProvider.h minecraft/auth/providers/ElybyAuthProvider.h minecraft/auth/providers/MojangAuthProvider.h + minecraft/auth/providers/MicrosoftAuthProvider.h minecraft/auth/flows/MSAInteractive.h minecraft/auth/flows/MSAInteractive.cpp diff --git a/launcher/minecraft/auth/AccountData.cpp b/launcher/minecraft/auth/AccountData.cpp index 5136ffbd..eada3084 100644 --- a/launcher/minecraft/auth/AccountData.cpp +++ b/launcher/minecraft/auth/AccountData.cpp @@ -313,6 +313,7 @@ bool AccountData::resumeStateFromV3(QJsonObject data) { auto typeS = typeV.toString(); if(typeS == "MSA") { type = AccountType::MSA; + provider = AuthProviders::lookup("MSA"); } else { type = AccountType::Mojang; provider = AuthProviders::lookup(typeS); diff --git a/launcher/minecraft/auth/AuthProviders.cpp b/launcher/minecraft/auth/AuthProviders.cpp index 8753dfd2..b3edc91d 100644 --- a/launcher/minecraft/auth/AuthProviders.cpp +++ b/launcher/minecraft/auth/AuthProviders.cpp @@ -2,6 +2,7 @@ #include "providers/ElybyAuthProvider.h" #include "providers/DummyAuthProvider.h" #include "providers/MojangAuthProvider.h" +#include "providers/MicrosoftAuthProvider.h" #include "../../AuthServer.h" #define REGISTER_AUTH_PROVIDER(Provider) \ @@ -20,6 +21,7 @@ namespace AuthProviders REGISTER_AUTH_PROVIDER(ElybyAuthProvider); REGISTER_AUTH_PROVIDER(DummyAuthProvider); REGISTER_AUTH_PROVIDER(MojangAuthProvider); + REGISTER_AUTH_PROVIDER(MicrosoftAuthProvider); } AuthProviderPtr lookup(QString id) diff --git a/launcher/minecraft/auth/MinecraftAccount.cpp b/launcher/minecraft/auth/MinecraftAccount.cpp index 5cfec49d..bf85af31 100644 --- a/launcher/minecraft/auth/MinecraftAccount.cpp +++ b/launcher/minecraft/auth/MinecraftAccount.cpp @@ -33,6 +33,7 @@ #include "flows/MojangRefresh.h" #include "flows/MojangLogin.h" +#include "AuthProviders.h" MinecraftAccountPtr MinecraftAccount::loadFromJsonV2(const QJsonObject& json) { MinecraftAccountPtr account(new MinecraftAccount()); @@ -63,6 +64,7 @@ MinecraftAccountPtr MinecraftAccount::createBlankMSA() { MinecraftAccountPtr account(new MinecraftAccount()); account->data.type = AccountType::MSA; + account->setProvider(AuthProviders::lookup("MSA")); return account; } diff --git a/launcher/minecraft/auth/flows/MSAInteractive.cpp b/launcher/minecraft/auth/flows/MSAInteractive.cpp index 6c597cf7..ae1d1cdd 100644 --- a/launcher/minecraft/auth/flows/MSAInteractive.cpp +++ b/launcher/minecraft/auth/flows/MSAInteractive.cpp @@ -18,6 +18,5 @@ void MSAInteractive::executeTask() { beginActivity(Katabasis::Activity::LoggingIn); m_oauth2->unlink(); - *m_data = AccountData(); m_oauth2->link(); } diff --git a/launcher/minecraft/auth/providers/MicrosoftAuthProvider.h b/launcher/minecraft/auth/providers/MicrosoftAuthProvider.h new file mode 100644 index 00000000..8b0908e8 --- /dev/null +++ b/launcher/minecraft/auth/providers/MicrosoftAuthProvider.h @@ -0,0 +1,26 @@ +#pragma once + +#include +#include "QObjectPtr.h" +#include +#include +#include +#include + +#include "MojangAuthProvider.h" + +class MicrosoftAuthProvider : public MojangAuthProvider +{ + Q_OBJECT + +public: + QString id() + { + return "MSA"; + } + + QString displayName() + { + return "Microsoft"; + } +}; diff --git a/launcher/ui/dialogs/LoginDialog.cpp b/launcher/ui/dialogs/LoginDialog.cpp index c562da79..92cf305e 100644 --- a/launcher/ui/dialogs/LoginDialog.cpp +++ b/launcher/ui/dialogs/LoginDialog.cpp @@ -28,9 +28,13 @@ LoginDialog::LoginDialog(QWidget *parent) : QDialog(parent), ui(new Ui::LoginDia ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); for(auto provider: AuthProviders::getAll()) { - QRadioButton *button = new QRadioButton(provider->displayName()); - m_radioButtons[provider->id()] = button; - ui->radioLayout->addWidget(button); + auto providerId = provider->id(); + // Exclude Microsoft account from here... + if (providerId != "MSA") { + QRadioButton *button = new QRadioButton(provider->displayName()); + m_radioButtons[providerId] = button; + ui->radioLayout->addWidget(button); + } } m_radioButtons["dummy"]->setChecked(true); adjustSize();