summaryrefslogtreecommitdiff
path: root/src/cookiejar.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/cookiejar.cpp')
-rw-r--r--src/cookiejar.cpp322
1 files changed, 33 insertions, 289 deletions
diff --git a/src/cookiejar.cpp b/src/cookiejar.cpp
index 28a77120..df3140f5 100644
--- a/src/cookiejar.cpp
+++ b/src/cookiejar.cpp
@@ -49,325 +49,69 @@
#include <QtGui/QSortFilterProxyModel>
#include <QtGui/QCompleter>
+#include <QtDBus>
-static const unsigned int JAR_VERSION = 23;
-
-static const char cookieFileName[] = "cookies";
-
-
-CookieJar::CookieJar(QObject *parent)
- : QNetworkCookieJar(parent)
- , m_acceptCookies(AcceptOnlyFromSitesNavigatedTo)
+CookieJar::CookieJar(QObject* parent)
+ : QNetworkCookieJar(parent)
+ , m_windowId(-1)
{
- // load cookies and exceptions
- QString filepath = KStandardDirs::locateLocal("appdata", cookieFileName);
- KConfig iniconfig(filepath);
-
- KConfigGroup inigroup1 = iniconfig.group("cookielist");
-
- QStringList cookieStringList = inigroup1.readEntry( QString("cookies"), QStringList() );
- QList<QNetworkCookie> cookieNetworkList;
- foreach( QString str, cookieStringList )
- {
- cookieNetworkList << QNetworkCookie( str.toLocal8Bit() );
- }
- setAllCookies( cookieNetworkList );
-
- KConfigGroup inigroup2 = iniconfig.group("exceptions");
- m_exceptions_block = inigroup2.readEntry( QString("block") , QStringList() );
- m_exceptions_allow = inigroup2.readEntry( QString("allow"), QStringList() );
- m_exceptions_allowForSession = inigroup2.readEntry( QString("allowForSession"), QStringList() );
-
- qSort( m_exceptions_block.begin(), m_exceptions_block.end() );
- qSort( m_exceptions_allow.begin(), m_exceptions_allow.end() );
- qSort( m_exceptions_allowForSession.begin(), m_exceptions_allowForSession.end() );
-
- loadSettings();
}
CookieJar::~CookieJar()
{
- if (m_keepCookies == KeepUntilExit)
- clear();
-
- save();
-}
-
-
-void CookieJar::clear()
-{
- setAllCookies(QList<QNetworkCookie>());
-
- save();
-
- emit cookiesChanged();
-}
-
-
-void CookieJar::loadSettings()
-{
- int canAcceptCookies = ReKonfig::acceptCookies();
-
- switch (canAcceptCookies)
- {
- case 0:
- m_acceptCookies = AcceptAlways;
- break;
- case 1:
- m_acceptCookies = AcceptNever;
- break;
- case 2:
- default:
- m_acceptCookies = AcceptOnlyFromSitesNavigatedTo;
- break;
- }
-
- int canKeepCookiesUntil = ReKonfig::keepCookiesUntil();
-
- switch (canKeepCookiesUntil)
- {
- default:
- case 0:
- m_keepCookies = KeepUntilExpire;
- break;
- case 1:
- m_keepCookies = KeepUntilExit;
- setAllCookies(QList<QNetworkCookie>());
- break;
- case 2:
- m_keepCookies = KeepUntilTimeLimit;
- break;
- }
-
- emit cookiesChanged();
}
-void CookieJar::save()
+QList<QNetworkCookie> CookieJar::cookiesForUrl(const QUrl & url) const
{
- purgeOldCookies();
+ QList<QNetworkCookie> cookieList;
- QString filepath = KStandardDirs::locateLocal("appdata", cookieFileName);
- KConfig iniconfig( filepath );
-
- KConfigGroup inigroup1 = iniconfig.group("cookielist");
- QList<QNetworkCookie> cookies = allCookies();
- for (int i = cookies.count() - 1; i >= 0; --i)
+ if ( true ) // FIXME WebKitSettings::self()->isCookieJarEnabled())
{
- if (cookies.at(i).isSessionCookie())
- cookies.removeAt(i);
- }
+ QDBusInterface kcookiejar("org.kde.kded", "/modules/kcookiejar", "org.kde.KCookieServer");
+ QDBusReply<QString> reply = kcookiejar.call("findCookies", url.toString(), m_windowId);
- QStringList cookieStringList;
- foreach( QNetworkCookie cookie, cookies )
- {
- cookieStringList << QString( cookie.toRawForm() );
- }
- inigroup1.writeEntry( QString("cookies"), cookieStringList );
-
- KConfigGroup inigroup2 = iniconfig.group("exceptions");
- inigroup2.writeEntry( QString("block"), m_exceptions_block );
- inigroup2.writeEntry( QString("allow"), m_exceptions_allow );
- inigroup2.writeEntry( QString("allowForSession"), m_exceptions_allowForSession );
-
- // save cookie settings
- int n;
- switch (m_acceptCookies)
- {
- case AcceptAlways:
- n = 0;
- break;
- case AcceptNever:
- n = 1;
- break;
- case AcceptOnlyFromSitesNavigatedTo:
- default:
- n = 2;
- break;
+ if (reply.isValid())
+ {
+ cookieList << reply.value().toUtf8();
+ //kDebug() << reply.value();
+ }
+ else
+ {
+ kWarning() << "Unable to communicate with the cookiejar!";
+ }
}
- ReKonfig::setAcceptCookies(n);
-
- switch (m_keepCookies)
- {
- default:
- case KeepUntilExpire:
- n = 0;
- break;
- case KeepUntilExit:
- n = 1;
- break;
- case KeepUntilTimeLimit:
- n = 2;
- break;
- }
- ReKonfig::setKeepCookiesUntil(n);
+ return cookieList;
}
-void CookieJar::purgeOldCookies()
+bool CookieJar::setCookiesFromUrl(const QList<QNetworkCookie> & cookieList, const QUrl & url)
{
- QList<QNetworkCookie> cookies = allCookies();
- if (cookies.isEmpty())
- return;
- int oldCount = cookies.count();
- QDateTime now = QDateTime::currentDateTime();
- for (int i = cookies.count() - 1; i >= 0; --i)
- {
- if (!cookies.at(i).isSessionCookie() && cookies.at(i).expirationDate() < now)
- cookies.removeAt(i);
- }
- if (oldCount == cookies.count())
- return;
- setAllCookies(cookies);
- emit cookiesChanged();
-}
-
-
-QList<QNetworkCookie> CookieJar::cookiesForUrl(const QUrl &url) const
-{
- QWebSettings *globalSettings = QWebSettings::globalSettings();
- if (globalSettings->testAttribute(QWebSettings::PrivateBrowsingEnabled))
+ if ( true ) // FIXME WebKitSettings::self()->isCookieJarEnabled())
{
- QList<QNetworkCookie> noCookies;
- return noCookies;
- }
+ QDBusInterface kcookiejar("org.kde.kded", "/modules/kcookiejar", "org.kde.KCookieServer");
- return QNetworkCookieJar::cookiesForUrl(url);
-}
-
-
-bool CookieJar::setCookiesFromUrl(const QList<QNetworkCookie> &cookieList, const QUrl &url)
-{
- QWebSettings *globalSettings = QWebSettings::globalSettings();
- if (globalSettings->testAttribute(QWebSettings::PrivateBrowsingEnabled))
- return false;
-
- QString host = url.host();
- bool eBlock = qBinaryFind(m_exceptions_block.begin(), m_exceptions_block.end(), host) != m_exceptions_block.end();
- bool eAllow = qBinaryFind(m_exceptions_allow.begin(), m_exceptions_allow.end(), host) != m_exceptions_allow.end();
- bool eAllowSession = qBinaryFind(m_exceptions_allowForSession.begin(), m_exceptions_allowForSession.end(), host) != m_exceptions_allowForSession.end();
-
- bool addedCookies = false;
- // pass exceptions
- bool acceptInitially = (m_acceptCookies != AcceptNever);
- if ((acceptInitially && !eBlock) || (!acceptInitially && (eAllow || eAllowSession)))
- {
- // pass url domain == cookie domain
- QDateTime soon = QDateTime::currentDateTime();
- soon = soon.addDays(90);
- foreach(QNetworkCookie cookie, cookieList)
+ QByteArray cookieHeader;
+ Q_FOREACH(const QNetworkCookie& cookie, cookieList)
{
- QList<QNetworkCookie> lst;
- if (m_keepCookies == KeepUntilTimeLimit
- && !cookie.isSessionCookie()
- && cookie.expirationDate() > soon)
- {
- cookie.setExpirationDate(soon);
- }
- lst += cookie;
- if (QNetworkCookieJar::setCookiesFromUrl(lst, url))
- {
- addedCookies = true;
- }
- else
- {
- // finally force it in if wanted
- if (m_acceptCookies == AcceptAlways)
- {
- QList<QNetworkCookie> cookies = allCookies();
- cookies += cookie;
- setAllCookies(cookies);
- addedCookies = true;
- }
- }
+ cookieHeader = "Set-Cookie: ";
+ cookieHeader += cookie.toRawForm();
+ kcookiejar.call("addCookies", url.toString(), cookieHeader, m_windowId);
+ //kDebug() << "url: " << url.host() << ", cookie: " << cookieHeader;
}
- }
- if (addedCookies)
- {
- save();
- emit cookiesChanged();
+ return !kcookiejar.lastError().isValid();
}
- return addedCookies;
-}
-
-
-CookieJar::AcceptPolicy CookieJar::acceptPolicy() const
-{
- return m_acceptCookies;
+
+ return false;
}
-void CookieJar::setAcceptPolicy(AcceptPolicy policy)
+void CookieJar::setWindowId(qlonglong id)
{
- if (policy == m_acceptCookies)
- return;
- m_acceptCookies = policy;
-
- save();
-}
-
-
-CookieJar::KeepPolicy CookieJar::keepPolicy() const
-{
- return m_keepCookies;
-}
-
-
-void CookieJar::setKeepPolicy(KeepPolicy policy)
-{
- if (policy == m_keepCookies)
- return;
- m_keepCookies = policy;
-
- save();
-}
-
-
-QStringList CookieJar::blockedCookies() const
-{
- return m_exceptions_block;
-}
-
-
-QStringList CookieJar::allowedCookies() const
-{
- return m_exceptions_allow;
-}
-
-
-QStringList CookieJar::allowForSessionCookies() const
-{
- return m_exceptions_allowForSession;
-}
-
-
-void CookieJar::setBlockedCookies(const QStringList &list)
-{
- m_exceptions_block = list;
- qSort(m_exceptions_block.begin(), m_exceptions_block.end());
-
- save();
-}
-
-
-void CookieJar::setAllowedCookies(const QStringList &list)
-{
- m_exceptions_allow = list;
- qSort(m_exceptions_allow.begin(), m_exceptions_allow.end());
-
- save();
-}
-
-
-void CookieJar::setAllowForSessionCookies(const QStringList &list)
-{
- m_exceptions_allowForSession = list;
- qSort(m_exceptions_allowForSession.begin(), m_exceptions_allowForSession.end());
-
- save();
+ m_windowId = id;
}