ShatteredPrism/launcher/minecraft/auth/steps/AuthlibInjectorMetadataStep.cpp
Evan Goode 9d442a0348 authlib-injector
* 'Custom Yggdrasil' AccountType

Signed-off-by: Evan Goode <mail@evangoo.de>

* Allow multiple accounts with the same player UUID

Signed-off-by: Evan Goode <mail@evangoo.de>

* Use correct services server URL for SkinDelete

Signed-off-by: Evan Goode <mail@evangoo.de>

* Correctly use CustomYggdrasilRefresh, add warning message

Signed-off-by: Evan Goode <mail@evangoo.de>

* Custom Yggdrasil: Readability fixes

Also made the MinecraftEntitlement for Custom Yggdrasil accounts work
just like offline accounts---instead of checking the reply from the auth
server, Custom Yggdrasil accounts are granted canPlayMinecraft and
ownsMinecraft when they are created, in MinecraftAccount.cpp.

Signed-off-by: Evan Goode <mail@evangoo.de>

* Custom Yggdrasil: Add extra confirmation dialog

Signed-off-by: Evan Goode <mail@evangoo.de>

* Add install authlib-injector button

Signed-off-by: Evan Goode <mail@evangoo.de>

* authlib-injector accounts

Signed-off-by: Evan Goode <mail@evangoo.de>

* Suggest installing authlib-injector when needed

Signed-off-by: Evan Goode <mail@evangoo.de>

* Use Unmojang metadata

Signed-off-by: Evan Goode <mail@evangoo.de>

* Use std::string for MANAGED_AGENTS, not QString

---------

Signed-off-by: Evan Goode <mail@evangoo.de>

Resolve X-Authlib-Injector-API-Location

Signed-off-by: Evan Goode <mail@evangoo.de>

Prefetch authlib-injector metadata

Resolves https://github.com/unmojang/PrismLauncher/issues/4

See https://github-com.translate.goog/yushijinhun/authlib-injector/wiki/%E5%90%AF%E5%8A%A8%E5%99%A8%E6%8A%80%E6%9C%AF%E8%A7%84%E8%8C%83?_x_tr_sl=auto&_x_tr_tl=en&_x_tr_hl=en-US#%E9%85%8D%E7%BD%AE%E9%A2%84%E8%8E%B7%E5%8F%96

Signed-off-by: Evan Goode <mail@evangoo.de>

drag-and-drop authlib-injector URL, clang-format

Resolves https://github.com/unmojang/PrismLauncher/issues/2

Signed-off-by: Evan Goode <mail@evangoo.de>
2023-09-04 19:00:18 +01:00

50 lines
1.8 KiB
C++

#include "AuthlibInjectorMetadataStep.h"
#include <QJsonDocument>
#include <QNetworkRequest>
#include "minecraft/auth/AuthRequest.h"
#include "minecraft/auth/Parsers.h"
AuthlibInjectorMetadataStep::AuthlibInjectorMetadataStep(AccountData* data) : AuthStep(data) {}
AuthlibInjectorMetadataStep::~AuthlibInjectorMetadataStep() noexcept = default;
QString AuthlibInjectorMetadataStep::describe()
{
return tr("Prefetching authlib-injector metadata.");
}
void AuthlibInjectorMetadataStep::perform()
{
if (m_data->authlibInjectorUrl == "") {
emit finished(AccountTaskState::STATE_WORKING, tr("Account has no authlib-injector URL."));
return;
}
QNetworkRequest request = QNetworkRequest(m_data->authlibInjectorUrl);
AuthRequest* requestor = new AuthRequest(this);
connect(requestor, &AuthRequest::finished, this, &AuthlibInjectorMetadataStep::onRequestDone);
requestor->get(request);
}
void AuthlibInjectorMetadataStep::rehydrate() {}
void AuthlibInjectorMetadataStep::onRequestDone(QNetworkReply::NetworkError error,
QByteArray data,
QList<QNetworkReply::RawHeaderPair> headers)
{
auto requestor = qobject_cast<AuthRequest*>(QObject::sender());
requestor->deleteLater();
if (error == QNetworkReply::NoError && data.size() > 0) {
QJsonParseError jsonError;
QJsonDocument doc = QJsonDocument::fromJson(data, &jsonError);
if (jsonError.error == QJsonParseError::NoError) {
m_data->authlibInjectorMetadata = data.toBase64();
emit finished(AccountTaskState::STATE_WORKING, tr("Got authlib-injector metadata."));
return;
}
}
emit finished(AccountTaskState::STATE_WORKING, tr("Didn't get authlib-injector metadata, continuing anyway."));
}