* '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>
50 lines
1.8 KiB
C++
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."));
|
|
}
|