diff options
Diffstat (limited to 'launcher/net/PasteUpload.cpp')
-rw-r--r-- | launcher/net/PasteUpload.cpp | 255 |
1 files changed, 117 insertions, 138 deletions
diff --git a/launcher/net/PasteUpload.cpp b/launcher/net/PasteUpload.cpp index 595279a3..c67d3b23 100644 --- a/launcher/net/PasteUpload.cpp +++ b/launcher/net/PasteUpload.cpp @@ -36,26 +36,26 @@ */ #include "PasteUpload.h" -#include "BuildConfig.h" #include "Application.h" +#include "BuildConfig.h" #include <QDebug> -#include <QJsonObject> +#include <QFile> #include <QHttpPart> #include <QJsonArray> #include <QJsonDocument> -#include <QFile> +#include <QJsonObject> #include <QUrlQuery> #include "net/Logging.h" -std::array<PasteUpload::PasteTypeInfo, 4> PasteUpload::PasteTypes = { - {{"0x0.st", "https://0x0.st", ""}, - {"hastebin", "https://hst.sh", "/documents"}, - {"paste.gg", "https://paste.gg", "/api/v1/pastes"}, - {"mclo.gs", "https://api.mclo.gs", "/1/log"}}}; +std::array<PasteUpload::PasteTypeInfo, 4> PasteUpload::PasteTypes = { { { "0x0.st", "https://0x0.st", "" }, + { "hastebin", "https://hst.sh", "/documents" }, + { "paste.gg", "https://paste.gg", "/api/v1/pastes" }, + { "mclo.gs", "https://api.mclo.gs", "/1/log" } } }; -PasteUpload::PasteUpload(QWidget *window, QString text, QString baseUrl, PasteType pasteType) : m_window(window), m_baseUrl(baseUrl), m_pasteType(pasteType), m_text(text.toUtf8()) +PasteUpload::PasteUpload(QWidget* window, QString text, QString baseUrl, PasteType pasteType) + : m_window(window), m_baseUrl(baseUrl), m_pasteType(pasteType), m_text(text.toUtf8()) { if (m_baseUrl == "") m_baseUrl = PasteTypes.at(pasteType).defaultBase; @@ -67,68 +67,64 @@ PasteUpload::PasteUpload(QWidget *window, QString text, QString baseUrl, PasteTy m_uploadUrl = m_baseUrl + PasteTypes.at(pasteType).endpointPath; } -PasteUpload::~PasteUpload() -{ -} +PasteUpload::~PasteUpload() {} void PasteUpload::executeTask() { - QNetworkRequest request{QUrl(m_uploadUrl)}; - QNetworkReply *rep{}; + QNetworkRequest request{ QUrl(m_uploadUrl) }; + QNetworkReply* rep{}; request.setHeader(QNetworkRequest::UserAgentHeader, APPLICATION->getUserAgentUncached().toUtf8()); switch (m_pasteType) { - case NullPointer: { - QHttpMultiPart *multiPart = - new QHttpMultiPart{QHttpMultiPart::FormDataType}; + case NullPointer: { + QHttpMultiPart* multiPart = new QHttpMultiPart{ QHttpMultiPart::FormDataType }; - QHttpPart filePart; - filePart.setBody(m_text); - filePart.setHeader(QNetworkRequest::ContentTypeHeader, "text/plain"); - filePart.setHeader(QNetworkRequest::ContentDispositionHeader, - "form-data; name=\"file\"; filename=\"log.txt\""); - multiPart->append(filePart); + QHttpPart filePart; + filePart.setBody(m_text); + filePart.setHeader(QNetworkRequest::ContentTypeHeader, "text/plain"); + filePart.setHeader(QNetworkRequest::ContentDispositionHeader, "form-data; name=\"file\"; filename=\"log.txt\""); + multiPart->append(filePart); - rep = APPLICATION->network()->post(request, multiPart); - multiPart->setParent(rep); + rep = APPLICATION->network()->post(request, multiPart); + multiPart->setParent(rep); - break; - } - case Hastebin: { - request.setHeader(QNetworkRequest::UserAgentHeader, APPLICATION->getUserAgentUncached().toUtf8()); - rep = APPLICATION->network()->post(request, m_text); - break; - } - case Mclogs: { - QUrlQuery postData; - postData.addQueryItem("content", m_text); - request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); - rep = APPLICATION->network()->post(request, postData.toString().toUtf8()); - break; - } - case PasteGG: { - QJsonObject obj; - QJsonDocument doc; - request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); - - obj.insert("expires", QDateTime::currentDateTimeUtc().addDays(100).toString(Qt::DateFormat::ISODate)); - - QJsonArray files; - QJsonObject logFileInfo; - QJsonObject logFileContentInfo; - logFileContentInfo.insert("format", "text"); - logFileContentInfo.insert("value", QString::fromUtf8(m_text)); - logFileInfo.insert("name", "log.txt"); - logFileInfo.insert("content", logFileContentInfo); - files.append(logFileInfo); - - obj.insert("files", files); - - doc.setObject(obj); - rep = APPLICATION->network()->post(request, doc.toJson()); - break; - } + break; + } + case Hastebin: { + request.setHeader(QNetworkRequest::UserAgentHeader, APPLICATION->getUserAgentUncached().toUtf8()); + rep = APPLICATION->network()->post(request, m_text); + break; + } + case Mclogs: { + QUrlQuery postData; + postData.addQueryItem("content", m_text); + request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); + rep = APPLICATION->network()->post(request, postData.toString().toUtf8()); + break; + } + case PasteGG: { + QJsonObject obj; + QJsonDocument doc; + request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); + + obj.insert("expires", QDateTime::currentDateTimeUtc().addDays(100).toString(Qt::DateFormat::ISODate)); + + QJsonArray files; + QJsonObject logFileInfo; + QJsonObject logFileContentInfo; + logFileContentInfo.insert("format", "text"); + logFileContentInfo.insert("value", QString::fromUtf8(m_text)); + logFileInfo.insert("name", "log.txt"); + logFileInfo.insert("content", logFileContentInfo); + files.append(logFileInfo); + + obj.insert("files", files); + + doc.setObject(obj); + rep = APPLICATION->network()->post(request, doc.toJson()); + break; + } } connect(rep, &QNetworkReply::uploadProgress, this, &Task::setProgress); @@ -140,7 +136,6 @@ void PasteUpload::executeTask() connect(rep, QOverload<QNetworkReply::NetworkError>::of(&QNetworkReply::error), this, &PasteUpload::downloadError); #endif - m_reply = std::shared_ptr<QNetworkReply>(rep); setStatus(tr("Uploading to %1").arg(m_uploadUrl)); @@ -158,97 +153,81 @@ void PasteUpload::downloadFinished() QByteArray data = m_reply->readAll(); int statusCode = m_reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); - if (m_reply->error() != QNetworkReply::NetworkError::NoError) - { + if (m_reply->error() != QNetworkReply::NetworkError::NoError) { emitFailed(tr("Network error: %1").arg(m_reply->errorString())); m_reply.reset(); return; - } - else if (statusCode != 200 && statusCode != 201) - { + } else if (statusCode != 200 && statusCode != 201) { QString reasonPhrase = m_reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString(); emitFailed(tr("Error: %1 returned unexpected status code %2 %3").arg(m_uploadUrl).arg(statusCode).arg(reasonPhrase)); - qCCritical(taskUploadLogC) << getUid().toString() << m_uploadUrl << " returned unexpected status code " << statusCode << " with body: " << data; + qCCritical(taskUploadLogC) << getUid().toString() << m_uploadUrl << " returned unexpected status code " << statusCode + << " with body: " << data; m_reply.reset(); return; } - switch (m_pasteType) - { - case NullPointer: - m_pasteLink = QString::fromUtf8(data).trimmed(); - break; - case Hastebin: { - QJsonDocument jsonDoc{QJsonDocument::fromJson(data)}; - QJsonObject jsonObj{jsonDoc.object()}; - if (jsonObj.contains("key") && jsonObj["key"].isString()) - { - QString key = jsonDoc.object()["key"].toString(); - m_pasteLink = m_baseUrl + "/" + key; - } - else - { - emitFailed(tr("Error: %1 returned a malformed response body").arg(m_uploadUrl)); - qCCritical(taskUploadLogC) << getUid().toString() << getUid().toString() << m_uploadUrl << " returned malformed response body: " << data; - return; - } - break; - } - case Mclogs: { - QJsonDocument jsonDoc{QJsonDocument::fromJson(data)}; - QJsonObject jsonObj{jsonDoc.object()}; - if (jsonObj.contains("success") && jsonObj["success"].isBool()) - { - bool success = jsonObj["success"].toBool(); - if (success) - { - m_pasteLink = jsonObj["url"].toString(); - } - else - { - QString error = jsonObj["error"].toString(); - emitFailed(tr("Error: %1 returned an error: %2").arg(m_uploadUrl, error)); - qCCritical(taskUploadLogC) << getUid().toString() << m_uploadUrl << " returned error: " << error; - qCCritical(taskUploadLogC) << getUid().toString() << "Response body: " << data; + switch (m_pasteType) { + case NullPointer: + m_pasteLink = QString::fromUtf8(data).trimmed(); + break; + case Hastebin: { + QJsonDocument jsonDoc{ QJsonDocument::fromJson(data) }; + QJsonObject jsonObj{ jsonDoc.object() }; + if (jsonObj.contains("key") && jsonObj["key"].isString()) { + QString key = jsonDoc.object()["key"].toString(); + m_pasteLink = m_baseUrl + "/" + key; + } else { + emitFailed(tr("Error: %1 returned a malformed response body").arg(m_uploadUrl)); + qCCritical(taskUploadLogC) << getUid().toString() << getUid().toString() << m_uploadUrl + << " returned malformed response body: " << data; return; } + break; } - else - { - emitFailed(tr("Error: %1 returned a malformed response body").arg(m_uploadUrl)); - qCCritical(taskUploadLogC) << getUid().toString() << m_uploadUrl << " returned malformed response body: " << data; - return; - } - break; - } - case PasteGG: - QJsonDocument jsonDoc{QJsonDocument::fromJson(data)}; - QJsonObject jsonObj{jsonDoc.object()}; - if (jsonObj.contains("status") && jsonObj["status"].isString()) - { - QString status = jsonObj["status"].toString(); - if (status == "success") - { - m_pasteLink = m_baseUrl + "/p/anonymous/" + jsonObj["result"].toObject()["id"].toString(); - } - else - { - QString error = jsonObj["error"].toString(); - QString message = (jsonObj.contains("message") && jsonObj["message"].isString()) ? jsonObj["message"].toString() : "none"; - emitFailed(tr("Error: %1 returned an error code: %2\nError message: %3").arg(m_uploadUrl, error, message)); - qCCritical(taskUploadLogC) << getUid().toString() << m_uploadUrl << " returned error: " << error; - qCCritical(taskUploadLogC) << getUid().toString() << "Error message: " << message; - qCCritical(taskUploadLogC) << getUid().toString() << "Response body: " << data; + case Mclogs: { + QJsonDocument jsonDoc{ QJsonDocument::fromJson(data) }; + QJsonObject jsonObj{ jsonDoc.object() }; + if (jsonObj.contains("success") && jsonObj["success"].isBool()) { + bool success = jsonObj["success"].toBool(); + if (success) { + m_pasteLink = jsonObj["url"].toString(); + } else { + QString error = jsonObj["error"].toString(); + emitFailed(tr("Error: %1 returned an error: %2").arg(m_uploadUrl, error)); + qCCritical(taskUploadLogC) << getUid().toString() << m_uploadUrl << " returned error: " << error; + qCCritical(taskUploadLogC) << getUid().toString() << "Response body: " << data; + return; + } + } else { + emitFailed(tr("Error: %1 returned a malformed response body").arg(m_uploadUrl)); + qCCritical(taskUploadLogC) << getUid().toString() << m_uploadUrl << " returned malformed response body: " << data; return; } + break; } - else - { - emitFailed(tr("Error: %1 returned a malformed response body").arg(m_uploadUrl)); - qCCritical(taskUploadLogC) << getUid().toString() << m_uploadUrl << " returned malformed response body: " << data; - return; - } - break; + case PasteGG: + QJsonDocument jsonDoc{ QJsonDocument::fromJson(data) }; + QJsonObject jsonObj{ jsonDoc.object() }; + if (jsonObj.contains("status") && jsonObj["status"].isString()) { + QString status = jsonObj["status"].toString(); + if (status == "success") { + m_pasteLink = m_baseUrl + "/p/anonymous/" + jsonObj["result"].toObject()["id"].toString(); + } else { + QString error = jsonObj["error"].toString(); + QString message = + (jsonObj.contains("message") && jsonObj["message"].isString()) ? jsonObj["message"].toString() : "none"; + emitFailed(tr("Error: %1 returned an error code: %2\nError message: %3").arg(m_uploadUrl, error, message)); + qCCritical(taskUploadLogC) << getUid().toString() << m_uploadUrl << " returned error: " << error; + qCCritical(taskUploadLogC) << getUid().toString() << "Error message: " << message; + qCCritical(taskUploadLogC) << getUid().toString() << "Response body: " << data; + return; + } + } else { + emitFailed(tr("Error: %1 returned a malformed response body").arg(m_uploadUrl)); + qCCritical(taskUploadLogC) << getUid().toString() << m_uploadUrl << " returned malformed response body: " << data; + return; + } + break; } emitSucceeded(); } |