Files
zeal/src/libs/core/networkaccessmanager.cpp
T
2026-05-16 20:55:46 +03:00

59 lines
1.7 KiB
C++

// Copyright (C) Oleg Shparber, et al. <https://zealdocs.org>
// SPDX-License-Identifier: GPL-3.0-or-later
#include "networkaccessmanager.h"
#include "application.h"
#include "httpserver.h"
#include <QNetworkRequest>
namespace Zeal::Core {
NetworkAccessManager::NetworkAccessManager(QObject *parent)
: QNetworkAccessManager(parent)
{
}
bool NetworkAccessManager::isLocalFile(const QUrl &url)
{
return url.isLocalFile() || url.scheme() == QLatin1String("qrc");
}
bool NetworkAccessManager::isLocalUrl(const QUrl &url)
{
if (isLocalFile(url)) {
return true;
}
const QUrl &baseUrl = Application::instance()->httpServer()->baseUrl();
return baseUrl.isParentOf(url);
}
QNetworkReply *NetworkAccessManager::createRequest(QNetworkAccessManager::Operation op,
const QNetworkRequest &request,
QIODevice *outgoingData)
{
QNetworkRequest overrideRequest(request);
overrideRequest.setAttribute(QNetworkRequest::RedirectPolicyAttribute, true);
// Forward all non-local schemaless URLs via HTTPS.
const QUrl url = request.url();
if (isLocalFile(url) && !url.host().isEmpty()) {
QUrl overrideUrl(url);
overrideUrl.setScheme(QStringLiteral("https"));
overrideRequest.setUrl(overrideUrl);
op = QNetworkAccessManager::GetOperation;
}
QSslConfiguration sslConfig = overrideRequest.sslConfiguration();
sslConfig.setCaCertificates(QSslConfiguration::systemCaCertificates());
overrideRequest.setSslConfiguration(sslConfig);
return QNetworkAccessManager::createRequest(op, overrideRequest, outgoingData);
}
} // namespace Zeal::Core