Skip to content

Commit

Permalink
feat: detect Cloudflare redirects during image download
Browse files Browse the repository at this point in the history
  • Loading branch information
Bionus committed Jul 20, 2024
1 parent ff5ca6c commit 4275553
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 0 deletions.
9 changes: 9 additions & 0 deletions src/lib/src/downloader/image-downloader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -381,6 +381,15 @@ void ImageDownloader::success()
// Handle network redirects
const QUrl redirect = m_reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
if (!redirect.isEmpty()) {
// Detect Cloudflare redirects to error or home pages
if (m_reply->rawHeader("server") == "cloudflare" && getExtension(m_url) != getExtension(redirect)) {
log(QStringLiteral("Cloudflare redirect image `%1` to `%2` ignored").arg(m_url.toString().toHtmlEscaped(), redirect.toString().toHtmlEscaped()), Logger::Info);
QFile::remove(m_temporaryPath);
emit saved(m_image, makeResult(m_paths, Image::SaveResult::NetworkError));
return;
}

log(QStringLiteral("Redirecting image `%1` to `%2`").arg(m_url.toString().toHtmlEscaped(), redirect.toString().toHtmlEscaped()), Logger::Info);
m_url = redirect;
loadImage();
return;
Expand Down
1 change: 1 addition & 0 deletions src/lib/src/models/site.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,7 @@ QNetworkRequest Site::makeRequest(QUrl url, const QUrl &pageUrl, const QString &
}

request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, CACHE_POLICY);
request.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy);
return request;
}

Expand Down
1 change: 1 addition & 0 deletions src/lib/src/network/network-reply.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@ void NetworkReply::startNow()

connect(m_reply, &QNetworkReply::readyRead, this, &NetworkReply::readyRead);
connect(m_reply, &QNetworkReply::downloadProgress, this, &NetworkReply::downloadProgress);
connect(m_reply, &QNetworkReply::redirected, this, &NetworkReply::redirected);
connect(m_reply, &QNetworkReply::finished, this, &NetworkReply::finished);

m_reply->setParent(this);
Expand Down
1 change: 1 addition & 0 deletions src/lib/src/network/network-reply.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ class NetworkReply : public QObject
signals:
void readyRead();
void downloadProgress(qint64 bytesReceived, qint64 bytesTotal);
void redirected(const QUrl &url);
void finished();

private:
Expand Down

0 comments on commit 4275553

Please sign in to comment.