3c46d8a412
This makes the account system much more modular and makes it treat errors as something recoverable, unless they come directly from the MSA refresh token becoming invalid.
52 lines
1.5 KiB
C++
52 lines
1.5 KiB
C++
#include "YggdrasilStep.h"
|
|
|
|
#include "minecraft/auth/AuthRequest.h"
|
|
#include "minecraft/auth/Parsers.h"
|
|
#include "minecraft/auth/Yggdrasil.h"
|
|
|
|
YggdrasilStep::YggdrasilStep(AccountData* data, QString password) : AuthStep(data), m_password(password) {
|
|
m_yggdrasil = new Yggdrasil(m_data, this);
|
|
|
|
connect(m_yggdrasil, &Task::failed, this, &YggdrasilStep::onAuthFailed);
|
|
connect(m_yggdrasil, &Task::succeeded, this, &YggdrasilStep::onAuthSucceeded);
|
|
}
|
|
|
|
YggdrasilStep::~YggdrasilStep() noexcept = default;
|
|
|
|
QString YggdrasilStep::describe() {
|
|
return tr("Logging in with Mojang account.");
|
|
}
|
|
|
|
void YggdrasilStep::rehydrate() {
|
|
// NOOP, for now.
|
|
}
|
|
|
|
void YggdrasilStep::perform() {
|
|
if(m_password.size()) {
|
|
m_yggdrasil->login(m_password);
|
|
}
|
|
else {
|
|
m_yggdrasil->refresh();
|
|
}
|
|
}
|
|
|
|
void YggdrasilStep::onAuthSucceeded() {
|
|
emit finished(AccountTaskState::STATE_WORKING, tr("Logged in with Mojang"));
|
|
}
|
|
|
|
void YggdrasilStep::onAuthFailed() {
|
|
// TODO: hook these in again, expand to MSA
|
|
// m_error = m_yggdrasil->m_error;
|
|
// m_aborted = m_yggdrasil->m_aborted;
|
|
|
|
auto state = m_yggdrasil->taskState();
|
|
QString errorMessage = tr("Mojang user authentication failed.");
|
|
|
|
// NOTE: soft error in the first step means 'offline'
|
|
if(state == AccountTaskState::STATE_FAILED_SOFT) {
|
|
state = AccountTaskState::STATE_OFFLINE;
|
|
errorMessage = tr("Mojang user authentication ended with a network error.");
|
|
}
|
|
emit finished(AccountTaskState::STATE_OFFLINE, errorMessage);
|
|
}
|