File indexing completed on 2025-03-09 04:54:38
0001 /* 0002 SPDX-FileCopyrightText: 2016-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 0006 */ 0007 0008 #include "scamexpandurljob.h" 0009 #include "messageviewer_debug.h" 0010 0011 #include <PimCommon/BroadcastStatus> 0012 #include <PimCommon/NetworkManager> 0013 0014 #include <KLocalizedString> 0015 0016 #include <QJsonDocument> 0017 #include <QNetworkAccessManager> 0018 0019 using namespace MessageViewer; 0020 class MessageViewer::ScamExpandUrlJobPrivate 0021 { 0022 public: 0023 ScamExpandUrlJobPrivate() = default; 0024 0025 ~ScamExpandUrlJobPrivate() = default; 0026 0027 QNetworkAccessManager *mNetworkAccessManager = nullptr; 0028 }; 0029 0030 ScamExpandUrlJob::ScamExpandUrlJob(QObject *parent) 0031 : QObject(parent) 0032 , d(new ScamExpandUrlJobPrivate) 0033 { 0034 d->mNetworkAccessManager = new QNetworkAccessManager(this); 0035 d->mNetworkAccessManager->setRedirectPolicy(QNetworkRequest::NoLessSafeRedirectPolicy); 0036 d->mNetworkAccessManager->setStrictTransportSecurityEnabled(true); 0037 d->mNetworkAccessManager->enableStrictTransportSecurityStore(true); 0038 0039 connect(d->mNetworkAccessManager, &QNetworkAccessManager::finished, this, &ScamExpandUrlJob::slotExpandFinished); 0040 } 0041 0042 ScamExpandUrlJob::~ScamExpandUrlJob() = default; 0043 0044 void ScamExpandUrlJob::expandedUrl(const QUrl &url) 0045 { 0046 if (!PimCommon::NetworkManager::self()->isOnline()) { 0047 PimCommon::BroadcastStatus::instance()->setStatusMsg(i18n("No network connection detected, we cannot expand url.")); 0048 deleteLater(); 0049 return; 0050 } 0051 const QUrl newUrl(QStringLiteral("https://lengthenurl.info/api/longurl/shorturl/?inputURL=%1&format=json").arg(url.url())); 0052 0053 qCDebug(MESSAGEVIEWER_LOG) << " newUrl " << newUrl; 0054 QNetworkReply *reply = d->mNetworkAccessManager->get(QNetworkRequest(newUrl)); 0055 reply->setProperty("shortUrl", url.url()); 0056 connect(reply, &QNetworkReply::errorOccurred, this, &ScamExpandUrlJob::slotError); 0057 } 0058 0059 void ScamExpandUrlJob::slotExpandFinished(QNetworkReply *reply) 0060 { 0061 QUrl shortUrl; 0062 if (!reply->property("shortUrl").isNull()) { 0063 shortUrl.setUrl(reply->property("shortUrl").toString()); 0064 } 0065 const QByteArray ba = reply->readAll(); 0066 // qDebug() << " reply->readAll()" << ba; 0067 QJsonDocument jsonDoc = QJsonDocument::fromJson(ba); 0068 reply->deleteLater(); 0069 if (!jsonDoc.isNull()) { 0070 const QMap<QString, QVariant> map = jsonDoc.toVariant().toMap(); 0071 QUrl longUrl; 0072 const QVariant longUrlVar = map.value(QStringLiteral("LongURL")); 0073 if (longUrlVar.isValid()) { 0074 longUrl.setUrl(longUrlVar.toString()); 0075 } else { 0076 qCWarning(MESSAGEVIEWER_LOG) << "JSon is not correct" << ba; 0077 PimCommon::BroadcastStatus::instance()->setStatusMsg(i18n("Impossible to expand \'%1\'.", shortUrl.url())); 0078 deleteLater(); 0079 return; 0080 } 0081 PimCommon::BroadcastStatus::instance()->setStatusMsg(i18n("Short url \'%1\' redirects to \'%2\'.", shortUrl.url(), longUrl.toDisplayString())); 0082 } else { 0083 PimCommon::BroadcastStatus::instance()->setStatusMsg(i18n("Impossible to expand \'%1\'.", shortUrl.url())); 0084 } 0085 deleteLater(); 0086 } 0087 0088 void ScamExpandUrlJob::slotError(QNetworkReply::NetworkError error) 0089 { 0090 Q_EMIT expandUrlError(error); 0091 deleteLater(); 0092 } 0093 0094 #include "moc_scamexpandurljob.cpp"