File indexing completed on 2024-04-28 11:41:08

0001 /*
0002     This file is part of the KDE project
0003     SPDX-FileCopyrightText: 2000 Dawit Alemayehu <adawit@kde.org>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #include "sessiondata_p.h"
0009 
0010 #include <QDir>
0011 #include <QStandardPaths>
0012 #include <QTextCodec>
0013 
0014 #include <KConfigGroup>
0015 #include <KLocalizedString>
0016 #include <KSharedConfig>
0017 #include <kprotocolmanager.h>
0018 
0019 #include "http_worker_defaults.h"
0020 #include "workerconfig.h"
0021 
0022 namespace KIO
0023 {
0024 /********************************* SessionData ****************************/
0025 
0026 class SessionData::SessionDataPrivate
0027 {
0028 public:
0029     SessionDataPrivate()
0030     {
0031         useCookie = true;
0032         initDone = false;
0033     }
0034 
0035     bool initDone;
0036     bool useCookie;
0037     QString charsets;
0038     QString language;
0039 };
0040 
0041 SessionData::SessionData()
0042     : d(new SessionDataPrivate)
0043 {
0044 }
0045 
0046 SessionData::~SessionData() = default;
0047 
0048 void SessionData::configDataFor(MetaData &configData, const QString &proto, const QString &)
0049 {
0050     if ((proto.startsWith(QLatin1String("http"), Qt::CaseInsensitive)) || (proto.startsWith(QLatin1String("webdav"), Qt::CaseInsensitive))) {
0051         if (!d->initDone) {
0052             reset();
0053         }
0054 
0055         // These might have already been set so check first
0056         // to make sure that we do not trumpt settings sent
0057         // by apps or end-user.
0058         if (configData[QStringLiteral("Cookies")].isEmpty()) {
0059             configData[QStringLiteral("Cookies")] = d->useCookie ? QStringLiteral("true") : QStringLiteral("false");
0060         }
0061         if (configData[QStringLiteral("Languages")].isEmpty()) {
0062             configData[QStringLiteral("Languages")] = d->language;
0063         }
0064         if (configData[QStringLiteral("Charsets")].isEmpty()) {
0065             configData[QStringLiteral("Charsets")] = d->charsets;
0066         }
0067         if (configData[QStringLiteral("CacheDir")].isEmpty()) {
0068             const QString httpCacheDir = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + QLatin1String("/kio_http");
0069             QDir().mkpath(httpCacheDir);
0070             configData[QStringLiteral("CacheDir")] = httpCacheDir;
0071         }
0072         if (configData[QStringLiteral("UserAgent")].isEmpty()) {
0073             configData[QStringLiteral("UserAgent")] = KProtocolManager::defaultUserAgent();
0074         }
0075     }
0076 }
0077 
0078 void SessionData::reset()
0079 {
0080     d->initDone = true;
0081     // Get Cookie settings...
0082     d->useCookie = KSharedConfig::openConfig(QStringLiteral("kcookiejarrc"), KConfig::NoGlobals)->group("Cookie Policy").readEntry("Cookies", true);
0083 
0084     d->language = KProtocolManager::acceptLanguagesHeader();
0085     d->charsets = QString::fromLatin1(QTextCodec::codecForLocale()->name()).toLower();
0086     KProtocolManager::reparseConfiguration();
0087 }
0088 
0089 }
0090 
0091 #include "moc_sessiondata_p.cpp"