@ -31,8 +31,8 @@ struct HeaderPair {
|
||||
|
||||
class HeaderProxy {
|
||||
public:
|
||||
HeaderProxy(){}
|
||||
virtual ~HeaderProxy(){}
|
||||
HeaderProxy() {}
|
||||
virtual ~HeaderProxy() {}
|
||||
|
||||
public:
|
||||
virtual QList<HeaderPair> headers(const QNetworkRequest& request) const = 0;
|
||||
|
@ -125,8 +125,9 @@ auto HttpMetaCache::resolveEntry(QString base, QString resource_path, QString ex
|
||||
|
||||
// Get rid of old entries, to prevent cache problems
|
||||
auto current_time = QDateTime::currentSecsSinceEpoch();
|
||||
if (entry->isExpired(current_time - ( file_last_changed / 1000 ))) {
|
||||
qCWarning(taskNetLogC) << "[HttpMetaCache]" << "Removing cache entry because of old age!";
|
||||
if (entry->isExpired(current_time - (file_last_changed / 1000))) {
|
||||
qCWarning(taskNetLogC) << "[HttpMetaCache]"
|
||||
<< "Removing cache entry because of old age!";
|
||||
selected_base.entry_list.remove(resource_path);
|
||||
return staleEntry(base, resource_path);
|
||||
}
|
||||
|
@ -16,8 +16,8 @@
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <QLoggingCategory>
|
||||
|
||||
|
@ -46,32 +46,27 @@ namespace Net {
|
||||
/** Maximum time to hold a cache entry
|
||||
* = 1 week in seconds
|
||||
*/
|
||||
#define MAX_TIME_TO_EXPIRE 1*7*24*60*60
|
||||
#define MAX_TIME_TO_EXPIRE 1 * 7 * 24 * 60 * 60
|
||||
|
||||
|
||||
MetaCacheSink::MetaCacheSink(MetaEntryPtr entry, ChecksumValidator * md5sum, bool is_eternal)
|
||||
:Net::FileSink(entry->getFullPath()), m_entry(entry), m_md5Node(md5sum), m_is_eternal(is_eternal)
|
||||
MetaCacheSink::MetaCacheSink(MetaEntryPtr entry, ChecksumValidator* md5sum, bool is_eternal)
|
||||
: Net::FileSink(entry->getFullPath()), m_entry(entry), m_md5Node(md5sum), m_is_eternal(is_eternal)
|
||||
{
|
||||
addValidator(md5sum);
|
||||
}
|
||||
|
||||
Task::State MetaCacheSink::initCache(QNetworkRequest& request)
|
||||
{
|
||||
if (!m_entry->isStale())
|
||||
{
|
||||
if (!m_entry->isStale()) {
|
||||
return Task::State::Succeeded;
|
||||
}
|
||||
|
||||
// check if file exists, if it does, use its information for the request
|
||||
QFile current(m_filename);
|
||||
if(current.exists() && current.size() != 0)
|
||||
{
|
||||
if (m_entry->getRemoteChangedTimestamp().size())
|
||||
{
|
||||
if (current.exists() && current.size() != 0) {
|
||||
if (m_entry->getRemoteChangedTimestamp().size()) {
|
||||
request.setRawHeader(QString("If-Modified-Since").toLatin1(), m_entry->getRemoteChangedTimestamp().toLatin1());
|
||||
}
|
||||
if (m_entry->getETag().size())
|
||||
{
|
||||
if (m_entry->getETag().size()) {
|
||||
request.setRawHeader(QString("If-None-Match").toLatin1(), m_entry->getETag().toLatin1());
|
||||
}
|
||||
}
|
||||
@ -79,25 +74,23 @@ Task::State MetaCacheSink::initCache(QNetworkRequest& request)
|
||||
return Task::State::Running;
|
||||
}
|
||||
|
||||
Task::State MetaCacheSink::finalizeCache(QNetworkReply & reply)
|
||||
Task::State MetaCacheSink::finalizeCache(QNetworkReply& reply)
|
||||
{
|
||||
QFileInfo output_file_info(m_filename);
|
||||
|
||||
if(wroteAnyData)
|
||||
{
|
||||
if (wroteAnyData) {
|
||||
m_entry->setMD5Sum(m_md5Node->hash().toHex().constData());
|
||||
}
|
||||
|
||||
m_entry->setETag(reply.rawHeader("ETag").constData());
|
||||
|
||||
if (reply.hasRawHeader("Last-Modified"))
|
||||
{
|
||||
if (reply.hasRawHeader("Last-Modified")) {
|
||||
m_entry->setRemoteChangedTimestamp(reply.rawHeader("Last-Modified").constData());
|
||||
}
|
||||
|
||||
m_entry->setLocalChangedTimestamp(output_file_info.lastModified().toUTC().toMSecsSinceEpoch());
|
||||
|
||||
{ // Cache lifetime
|
||||
{ // Cache lifetime
|
||||
if (m_is_eternal) {
|
||||
qCDebug(taskMetaCacheLogC) << "Adding eternal cache entry:" << m_entry->getFullPath();
|
||||
m_entry->makeEternal(true);
|
||||
@ -141,4 +134,4 @@ bool MetaCacheSink::hasLocalData()
|
||||
QFileInfo info(m_filename);
|
||||
return info.exists() && info.size() != 0;
|
||||
}
|
||||
}
|
||||
} // namespace Net
|
||||
|
@ -47,7 +47,7 @@
|
||||
class NetAction : public Task {
|
||||
Q_OBJECT
|
||||
protected:
|
||||
explicit NetAction() : Task(){}
|
||||
explicit NetAction() : Task() {}
|
||||
|
||||
public:
|
||||
using Ptr = shared_qobject_ptr<NetAction>;
|
||||
@ -86,7 +86,7 @@ class NetAction : public Task {
|
||||
}
|
||||
|
||||
protected:
|
||||
void executeTask() override{}
|
||||
void executeTask() override {}
|
||||
|
||||
public:
|
||||
shared_qobject_ptr<QNetworkAccessManager> m_network;
|
||||
|
@ -52,7 +52,9 @@ class NetJob : public ConcurrentTask {
|
||||
public:
|
||||
using Ptr = shared_qobject_ptr<NetJob>;
|
||||
|
||||
explicit NetJob(QString job_name, shared_qobject_ptr<QNetworkAccessManager> network) : ConcurrentTask(nullptr, job_name), m_network(network) {}
|
||||
explicit NetJob(QString job_name, shared_qobject_ptr<QNetworkAccessManager> network)
|
||||
: ConcurrentTask(nullptr, job_name), m_network(network)
|
||||
{}
|
||||
~NetJob() override = default;
|
||||
|
||||
void startNext() override;
|
||||
|
@ -52,7 +52,7 @@ namespace Net {
|
||||
class NetRequest : public NetAction {
|
||||
Q_OBJECT
|
||||
protected:
|
||||
explicit NetRequest() : NetAction(){}
|
||||
explicit NetRequest() : NetAction() {}
|
||||
|
||||
public:
|
||||
using Ptr = shared_qobject_ptr<class NetRequest>;
|
||||
@ -62,7 +62,7 @@ class NetRequest : public NetAction {
|
||||
public:
|
||||
~NetRequest() override = default;
|
||||
|
||||
void init() override{}
|
||||
void init() override {}
|
||||
|
||||
public:
|
||||
void addValidator(Validator* v);
|
||||
|
@ -22,23 +22,22 @@
|
||||
#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);
|
||||
}
|
||||
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
|
||||
|
@ -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");
|
||||
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));
|
||||
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);
|
||||
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);
|
||||
obj.insert("files", files);
|
||||
|
||||
doc.setObject(obj);
|
||||
rep = APPLICATION->network()->post(request, doc.toJson());
|
||||
break;
|
||||
}
|
||||
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();
|
||||
}
|
||||
|
@ -35,17 +35,16 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "tasks/Task.h"
|
||||
#include <QBuffer>
|
||||
#include <QNetworkReply>
|
||||
#include <QString>
|
||||
#include <QBuffer>
|
||||
#include <memory>
|
||||
#include <array>
|
||||
#include <memory>
|
||||
#include "tasks/Task.h"
|
||||
|
||||
class PasteUpload : public Task
|
||||
{
|
||||
class PasteUpload : public Task {
|
||||
Q_OBJECT
|
||||
public:
|
||||
public:
|
||||
enum PasteType : int {
|
||||
// 0x0.st
|
||||
NullPointer,
|
||||
@ -68,26 +67,23 @@ public:
|
||||
|
||||
static std::array<PasteTypeInfo, 4> PasteTypes;
|
||||
|
||||
PasteUpload(QWidget *window, QString text, QString url, PasteType pasteType);
|
||||
PasteUpload(QWidget* window, QString text, QString url, PasteType pasteType);
|
||||
virtual ~PasteUpload();
|
||||
|
||||
QString pasteLink()
|
||||
{
|
||||
return m_pasteLink;
|
||||
}
|
||||
protected:
|
||||
QString pasteLink() { return m_pasteLink; }
|
||||
|
||||
protected:
|
||||
virtual void executeTask();
|
||||
|
||||
private:
|
||||
QWidget *m_window;
|
||||
private:
|
||||
QWidget* m_window;
|
||||
QString m_pasteLink;
|
||||
QString m_baseUrl;
|
||||
QString m_uploadUrl;
|
||||
PasteType m_pasteType;
|
||||
QByteArray m_text;
|
||||
std::shared_ptr<QNetworkReply> m_reply;
|
||||
public
|
||||
slots:
|
||||
public slots:
|
||||
void downloadError(QNetworkReply::NetworkError);
|
||||
void downloadFinished();
|
||||
};
|
||||
|
@ -37,17 +37,16 @@
|
||||
#include "net/NetAction.h"
|
||||
|
||||
namespace Net {
|
||||
class Validator
|
||||
{
|
||||
public: /* con/des */
|
||||
class Validator {
|
||||
public: /* con/des */
|
||||
Validator() {}
|
||||
|
||||
virtual ~Validator() {}
|
||||
|
||||
public: /* methods */
|
||||
virtual bool init(QNetworkRequest & request) = 0;
|
||||
virtual bool write(QByteArray & data) = 0;
|
||||
public: /* methods */
|
||||
virtual bool init(QNetworkRequest& request) = 0;
|
||||
virtual bool write(QByteArray& data) = 0;
|
||||
virtual bool abort() = 0;
|
||||
virtual bool validate(QNetworkReply & reply) = 0;
|
||||
virtual bool validate(QNetworkReply& reply) = 0;
|
||||
};
|
||||
}
|
||||
} // namespace Net
|
||||
|
Reference in New Issue
Block a user