fix: treat accounts as offline, if auth servers are down
Signed-off-by: Sefa Eyeoglu <contact@scrumplex.net>
This commit is contained in:
parent
ac8ee9f981
commit
2e94562f79
@ -117,6 +117,7 @@ set(NET_SOURCES
|
|||||||
net/NetAction.h
|
net/NetAction.h
|
||||||
net/NetJob.cpp
|
net/NetJob.cpp
|
||||||
net/NetJob.h
|
net/NetJob.h
|
||||||
|
net/NetUtils.h
|
||||||
net/PasteUpload.cpp
|
net/PasteUpload.cpp
|
||||||
net/PasteUpload.h
|
net/PasteUpload.h
|
||||||
net/Sink.h
|
net/Sink.h
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
#include "minecraft/auth/AuthRequest.h"
|
#include "minecraft/auth/AuthRequest.h"
|
||||||
#include "minecraft/auth/Parsers.h"
|
#include "minecraft/auth/Parsers.h"
|
||||||
#include "minecraft/auth/AccountTask.h"
|
#include "minecraft/auth/AccountTask.h"
|
||||||
|
#include "net/NetUtils.h"
|
||||||
|
|
||||||
LauncherLoginStep::LauncherLoginStep(AccountData* data) : AuthStep(data) {
|
LauncherLoginStep::LauncherLoginStep(AccountData* data) : AuthStep(data) {
|
||||||
|
|
||||||
@ -58,10 +59,18 @@ void LauncherLoginStep::onRequestDone(
|
|||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
qDebug() << data;
|
qDebug() << data;
|
||||||
#endif
|
#endif
|
||||||
|
if (Net::isApplicationError(error)) {
|
||||||
emit finished(
|
emit finished(
|
||||||
AccountTaskState::STATE_FAILED_SOFT,
|
AccountTaskState::STATE_FAILED_SOFT,
|
||||||
tr("Failed to get Minecraft access token: %1").arg(requestor->errorString_)
|
tr("Failed to get Minecraft access token: %1").arg(requestor->errorString_)
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
emit finished(
|
||||||
|
AccountTaskState::STATE_OFFLINE,
|
||||||
|
tr("Failed to get Minecraft access token: %1").arg(requestor->errorString_)
|
||||||
|
);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
#include "minecraft/auth/AuthRequest.h"
|
#include "minecraft/auth/AuthRequest.h"
|
||||||
#include "minecraft/auth/Parsers.h"
|
#include "minecraft/auth/Parsers.h"
|
||||||
|
#include "net/NetUtils.h"
|
||||||
|
|
||||||
MinecraftProfileStep::MinecraftProfileStep(AccountData* data) : AuthStep(data) {
|
MinecraftProfileStep::MinecraftProfileStep(AccountData* data) : AuthStep(data) {
|
||||||
|
|
||||||
@ -64,10 +65,18 @@ void MinecraftProfileStep::onRequestDone(
|
|||||||
qWarning() << " Response:";
|
qWarning() << " Response:";
|
||||||
qWarning() << QString::fromUtf8(data);
|
qWarning() << QString::fromUtf8(data);
|
||||||
|
|
||||||
|
if (Net::isApplicationError(error)) {
|
||||||
emit finished(
|
emit finished(
|
||||||
AccountTaskState::STATE_FAILED_SOFT,
|
AccountTaskState::STATE_FAILED_SOFT,
|
||||||
tr("Minecraft Java profile acquisition failed.")
|
tr("Minecraft Java profile acquisition failed: %1").arg(requestor->errorString_)
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
emit finished(
|
||||||
|
AccountTaskState::STATE_OFFLINE,
|
||||||
|
tr("Minecraft Java profile acquisition failed: %1").arg(requestor->errorString_)
|
||||||
|
);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(!Parsers::parseMinecraftProfile(data, m_data->minecraftProfile)) {
|
if(!Parsers::parseMinecraftProfile(data, m_data->minecraftProfile)) {
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
#include "minecraft/auth/AuthRequest.h"
|
#include "minecraft/auth/AuthRequest.h"
|
||||||
#include "minecraft/auth/Parsers.h"
|
#include "minecraft/auth/Parsers.h"
|
||||||
|
#include "net/NetUtils.h"
|
||||||
|
|
||||||
MinecraftProfileStepMojang::MinecraftProfileStepMojang(AccountData* data) : AuthStep(data) {
|
MinecraftProfileStepMojang::MinecraftProfileStepMojang(AccountData* data) : AuthStep(data) {
|
||||||
|
|
||||||
@ -67,10 +68,18 @@ void MinecraftProfileStepMojang::onRequestDone(
|
|||||||
qWarning() << " Response:";
|
qWarning() << " Response:";
|
||||||
qWarning() << QString::fromUtf8(data);
|
qWarning() << QString::fromUtf8(data);
|
||||||
|
|
||||||
|
if (Net::isApplicationError(error)) {
|
||||||
emit finished(
|
emit finished(
|
||||||
AccountTaskState::STATE_FAILED_SOFT,
|
AccountTaskState::STATE_FAILED_SOFT,
|
||||||
tr("Minecraft Java profile acquisition failed.")
|
tr("Minecraft Java profile acquisition failed: %1").arg(requestor->errorString_)
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
emit finished(
|
||||||
|
AccountTaskState::STATE_OFFLINE,
|
||||||
|
tr("Minecraft Java profile acquisition failed: %1").arg(requestor->errorString_)
|
||||||
|
);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(!Parsers::parseMinecraftProfileMojang(data, m_data->minecraftProfile)) {
|
if(!Parsers::parseMinecraftProfileMojang(data, m_data->minecraftProfile)) {
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
#include "minecraft/auth/AuthRequest.h"
|
#include "minecraft/auth/AuthRequest.h"
|
||||||
#include "minecraft/auth/Parsers.h"
|
#include "minecraft/auth/Parsers.h"
|
||||||
|
#include "net/NetUtils.h"
|
||||||
|
|
||||||
XboxAuthorizationStep::XboxAuthorizationStep(AccountData* data, Katabasis::Token *token, QString relyingParty, QString authorizationKind):
|
XboxAuthorizationStep::XboxAuthorizationStep(AccountData* data, Katabasis::Token *token, QString relyingParty, QString authorizationKind):
|
||||||
AuthStep(data),
|
AuthStep(data),
|
||||||
@ -62,12 +63,26 @@ void XboxAuthorizationStep::onRequestDone(
|
|||||||
#endif
|
#endif
|
||||||
if (error != QNetworkReply::NoError) {
|
if (error != QNetworkReply::NoError) {
|
||||||
qWarning() << "Reply error:" << error;
|
qWarning() << "Reply error:" << error;
|
||||||
|
if (Net::isApplicationError(error)) {
|
||||||
if(!processSTSError(error, data, headers)) {
|
if(!processSTSError(error, data, headers)) {
|
||||||
emit finished(
|
emit finished(
|
||||||
AccountTaskState::STATE_FAILED_SOFT,
|
AccountTaskState::STATE_FAILED_SOFT,
|
||||||
tr("Failed to get authorization for %1 services. Error %2.").arg(m_authorizationKind, error)
|
tr("Failed to get authorization for %1 services. Error %2.").arg(m_authorizationKind, error)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
emit finished(
|
||||||
|
AccountTaskState::STATE_FAILED_SOFT,
|
||||||
|
tr("Unknown STS error for %1 services: %2").arg(m_authorizationKind, requestor->errorString_)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
emit finished(
|
||||||
|
AccountTaskState::STATE_OFFLINE,
|
||||||
|
tr("Failed to get authorization for %1 services: %2").arg(m_authorizationKind, requestor->errorString_)
|
||||||
|
);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
#include "minecraft/auth/AuthRequest.h"
|
#include "minecraft/auth/AuthRequest.h"
|
||||||
#include "minecraft/auth/Parsers.h"
|
#include "minecraft/auth/Parsers.h"
|
||||||
|
#include "net/NetUtils.h"
|
||||||
|
|
||||||
XboxProfileStep::XboxProfileStep(AccountData* data) : AuthStep(data) {
|
XboxProfileStep::XboxProfileStep(AccountData* data) : AuthStep(data) {
|
||||||
|
|
||||||
@ -58,10 +59,18 @@ void XboxProfileStep::onRequestDone(
|
|||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
qDebug() << data;
|
qDebug() << data;
|
||||||
#endif
|
#endif
|
||||||
finished(
|
if (Net::isApplicationError(error)) {
|
||||||
|
emit finished(
|
||||||
AccountTaskState::STATE_FAILED_SOFT,
|
AccountTaskState::STATE_FAILED_SOFT,
|
||||||
tr("Failed to retrieve the Xbox profile.")
|
tr("Failed to retrieve the Xbox profile: %1").arg(requestor->errorString_)
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
emit finished(
|
||||||
|
AccountTaskState::STATE_OFFLINE,
|
||||||
|
tr("Failed to retrieve the Xbox profile: %1").arg(requestor->errorString_)
|
||||||
|
);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
#include "minecraft/auth/AuthRequest.h"
|
#include "minecraft/auth/AuthRequest.h"
|
||||||
#include "minecraft/auth/Parsers.h"
|
#include "minecraft/auth/Parsers.h"
|
||||||
|
#include "net/NetUtils.h"
|
||||||
|
|
||||||
XboxUserStep::XboxUserStep(AccountData* data) : AuthStep(data) {
|
XboxUserStep::XboxUserStep(AccountData* data) : AuthStep(data) {
|
||||||
|
|
||||||
@ -53,7 +54,17 @@ void XboxUserStep::onRequestDone(
|
|||||||
|
|
||||||
if (error != QNetworkReply::NoError) {
|
if (error != QNetworkReply::NoError) {
|
||||||
qWarning() << "Reply error:" << error;
|
qWarning() << "Reply error:" << error;
|
||||||
emit finished(AccountTaskState::STATE_FAILED_SOFT, tr("XBox user authentication failed."));
|
if (Net::isApplicationError(error)) {
|
||||||
|
emit finished(AccountTaskState::STATE_FAILED_SOFT,
|
||||||
|
tr("XBox user authentication failed: %1").arg(requestor->errorString_)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
emit finished(
|
||||||
|
AccountTaskState::STATE_OFFLINE,
|
||||||
|
tr("XBox user authentication failed: %1").arg(requestor->errorString_)
|
||||||
|
);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
44
launcher/net/NetUtils.h
Normal file
44
launcher/net/NetUtils.h
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
/*
|
||||||
|
* PolyMC - Minecraft Launcher
|
||||||
|
* Copyright (c) 2022 Sefa Eyeoglu <contact@scrumplex.net>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <QNetworkReply>
|
||||||
|
#include <QSet>
|
||||||
|
|
||||||
|
namespace Net {
|
||||||
|
inline bool isApplicationError(QNetworkReply::NetworkError x) {
|
||||||
|
// Mainly taken from https://github.com/qt/qtbase/blob/dev/src/network/access/qhttpthreaddelegate.cpp
|
||||||
|
static QSet<QNetworkReply::NetworkError> errors = {
|
||||||
|
QNetworkReply::ProtocolInvalidOperationError,
|
||||||
|
QNetworkReply::AuthenticationRequiredError,
|
||||||
|
QNetworkReply::ContentAccessDenied,
|
||||||
|
QNetworkReply::ContentNotFoundError,
|
||||||
|
QNetworkReply::ContentOperationNotPermittedError,
|
||||||
|
QNetworkReply::ProxyAuthenticationRequiredError,
|
||||||
|
QNetworkReply::ContentConflictError,
|
||||||
|
QNetworkReply::ContentGoneError,
|
||||||
|
QNetworkReply::InternalServerError,
|
||||||
|
QNetworkReply::OperationNotImplementedError,
|
||||||
|
QNetworkReply::ServiceUnavailableError,
|
||||||
|
QNetworkReply::UnknownServerError,
|
||||||
|
QNetworkReply::UnknownContentError
|
||||||
|
};
|
||||||
|
return errors.contains(x);
|
||||||
|
}
|
||||||
|
} // namespace Net
|
Loading…
Reference in New Issue
Block a user