File indexing completed on 2024-05-05 03:56:11

0001 /*
0002     localdomainfilter.cpp
0003 
0004     This file is part of the KDE project
0005     SPDX-FileCopyrightText: 2002 Lubos Lunak <llunak@suse.cz>
0006     SPDX-FileCopyrightText: 2010 Dawit Alemayehu <adawit@kde.org>
0007 
0008     SPDX-License-Identifier: GPL-2.0-or-later
0009 */
0010 
0011 #include "localdomainurifilter.h"
0012 
0013 #include <KPluginFactory>
0014 #include <KProtocolInfo>
0015 
0016 #include <QHostInfo>
0017 #include <QLoggingCategory>
0018 
0019 namespace
0020 {
0021 Q_LOGGING_CATEGORY(category, "kf.kio.urifilters.localdomain", QtWarningMsg)
0022 }
0023 
0024 bool LocalDomainUriFilter::filterUri(KUriFilterData &data) const
0025 {
0026     const QUrl url = data.uri();
0027     const QString protocol = url.scheme();
0028 
0029     // When checking for local domain just validate it is indeed a local domain,
0030     // but do not modify the hostname! See bug#
0031     if ((protocol.isEmpty() || !KProtocolInfo::isKnownProtocol(protocol)) && m_hostPortPattern.match(data.typedString()).hasMatch()) {
0032         QString host(data.typedString().left(data.typedString().indexOf(QLatin1Char('/'))));
0033         const int pos = host.indexOf(QLatin1Char(':'));
0034         if (pos > -1) {
0035             host.truncate(pos); // Remove port number
0036         }
0037         if (exists(host)) {
0038             qCDebug(category) << "QHostInfo found a host called" << host;
0039             QString scheme(data.defaultUrlScheme());
0040             if (scheme.isEmpty()) {
0041                 scheme = QStringLiteral("http://");
0042             }
0043             setFilteredUri(data, QUrl(scheme + data.typedString()));
0044             setUriType(data, KUriFilterData::NetProtocol);
0045             return true;
0046         }
0047     }
0048 
0049     return false;
0050 }
0051 
0052 bool LocalDomainUriFilter::exists(const QString &host) const
0053 {
0054     qCDebug(category) << "Checking if a host called" << host << "exists";
0055     QHostInfo hostInfo = resolveName(host, 1500);
0056     return hostInfo.error() == QHostInfo::NoError;
0057 }
0058 
0059 K_PLUGIN_CLASS_WITH_JSON(LocalDomainUriFilter, "localdomainurifilter.json")
0060 
0061 #include "localdomainurifilter.moc"
0062 #include "moc_localdomainurifilter.cpp"