diff --git a/api/logic/minecraft/auth/MojangAccount.cpp b/api/logic/minecraft/auth/MojangAccount.cpp index f5853fe3..2cf3a9eb 100644 --- a/api/logic/minecraft/auth/MojangAccount.cpp +++ b/api/logic/minecraft/auth/MojangAccount.cpp @@ -38,6 +38,7 @@ MojangAccountPtr MojangAccount::loadFromJson(const QJsonObject &object) return nullptr; } + QString loginType = object.value("loginType").toString("mojang"); QString username = object.value("username").toString(""); QString clientToken = object.value("clientToken").toString(""); QString accessToken = object.value("accessToken").toString(""); @@ -82,6 +83,7 @@ MojangAccountPtr MojangAccount::loadFromJson(const QJsonObject &object) */ account->m_user = u; } + account->m_loginType = loginType; account->m_username = username; account->m_clientToken = clientToken; account->m_accessToken = accessToken; @@ -106,6 +108,7 @@ MojangAccountPtr MojangAccount::createFromUsername(const QString &username) QJsonObject MojangAccount::saveToJson() const { QJsonObject json; + json.insert("loginType", m_loginType); json.insert("username", m_username); json.insert("clientToken", m_clientToken); json.insert("accessToken", m_accessToken); @@ -174,6 +177,15 @@ std::shared_ptr MojangAccount::login(AuthSessionPtr session, QStr { Q_ASSERT(m_currentTask.get() == nullptr); + // Handling alternative account types + if (m_loginType == "dummy") + { + session->status = AuthSession::PlayableOffline; + session->auth_server_online = false; + fillSession(session); + return nullptr; + } + // take care of the true offline status if (accountStatus() == NotVerified && password.isEmpty()) { diff --git a/api/logic/minecraft/auth/MojangAccount.h b/api/logic/minecraft/auth/MojangAccount.h index 30a5f2ff..1876e00c 100644 --- a/api/logic/minecraft/auth/MojangAccount.h +++ b/api/logic/minecraft/auth/MojangAccount.h @@ -99,6 +99,11 @@ public: /* manipulation */ void invalidateClientToken(); public: /* queries */ + const QString &loginType() const + { + return m_loginType; + } + const QString &username() const { return m_username; @@ -139,6 +144,11 @@ signals: // TODO: better signalling for the various possible state changes - especially errors protected: /* variables */ + // Authentication system used. + // Usable values: "mojang", "dummy" + QString m_loginType; + + // Username taken by account. QString m_username; // Used to identify the client - the user can have multiple clients for the same account