#include "nam.h" #include #include SlxDisabledNetworkReply::SlxDisabledNetworkReply(QObject *parent, const QNetworkRequest &req, QNetworkAccessManager::Operation op) : QNetworkReply(parent) { setRequest(req); setUrl(req.url()); setOperation(op); setFinished(true); qRegisterMetaType(); QString msg = QCoreApplication::translate("QNetworkAccessManager", "Network access is disabled."); setError(UnknownNetworkError, msg); QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, Q_ARG(QNetworkReply::NetworkError, UnknownNetworkError)); QMetaObject::invokeMethod(this, "finished", Qt::QueuedConnection); } QNetworkReply* SlxNetworkAccessManager::createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &req, QIODevice *outgoingData) { const QUrl url(req.url()); //qDebug() << url; bool ok; if (url.isLocalFile()) { ok = true; } else if (url.scheme() == QLatin1String("qrc") || url.scheme() == QLatin1String("data")) { ok = true; } else if (url.host().isEmpty()) { ok = true; } else { auto str = url.toDisplayString(QUrl::NormalizePathSegments); if (_white.isValid() && _white.match(str).hasMatch()) { // We have a whitelist, and it matches - allow ok = true; } else if (_black.isValid() && _black.match(str).hasMatch()) { // we have a blacklist, and it matches - deny ok = false; } else { // neither matched; if we have a whitelist: deny; otherwise: allow ok = !_white.isValid(); } } if (!ok) { return new SlxDisabledNetworkReply(this, req, op); } auto cp(req); cp.setAttribute(QNetworkRequest::HTTP2AllowedAttribute, QVariant(false)); return QNetworkAccessManager::createRequest(op, cp, outgoingData); }