Initial support for alternative login types

This commit is contained in:
Zakhar Afonin
2021-05-30 12:23:21 +03:00
parent 18d24678fe
commit 431af1cd62
2 changed files with 22 additions and 0 deletions

View File

@@ -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<YggdrasilTask> 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())
{

View File

@@ -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