/* ============================================================ * QupZilla - WebKit based browser * Copyright (C) 2010-2011 nowrep * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ============================================================ */ #include "cookiejar.h" #include "qupzilla.h" #define COOKIE_DEBUG //TODO: black/white listing CookieJar::CookieJar(QupZilla* mainClass, QObject *parent) : QNetworkCookieJar(parent) ,p_QupZilla(mainClass) { loadSettings(); // activeProfil = mApp->getActiveProfil(); m_activeProfil = mApp->getActiveProfil(); } void CookieJar::loadSettings() { QSettings settings(m_activeProfil+"settings.ini", QSettings::IniFormat); settings.beginGroup("Web-Browser-Settings"); m_allowCookies = settings.value("allowCookies",true).toBool(); m_allowCookiesFromDomain = settings.value("allowCookiesFromVisitedDomainOnly",false).toBool(); m_filterTrackingCookie = settings.value("filterTrackingCookie",false).toBool(); m_deleteOnClose = settings.value("deleteCookiesOnClose", false).toBool(); } void CookieJar::setAllowCookies(bool allow) { m_allowCookies = allow; } bool CookieJar::setCookiesFromUrl(const QList &cookieList, const QUrl &url) { if (!m_allowCookies) return QNetworkCookieJar::setCookiesFromUrl(QList(), url); QList newList = cookieList; QDateTime now = QDateTime::currentDateTime(); foreach (QNetworkCookie cok, newList) { if (m_allowCookiesFromDomain && !url.toString().contains(cok.domain())) { #ifdef COOKIE_DEBUG qDebug() << "purged for domain mismatch" << cok; #endif newList.removeOne(cok); continue; } if (m_filterTrackingCookie && cok.expirationDate() > now.addYears(2)) { #ifdef COOKIE_DEBUG qDebug() << "purged as tracking " << cok; #endif newList.removeOne(cok); continue; } } return QNetworkCookieJar::setCookiesFromUrl(newList, url); } void CookieJar::saveCookies() { if (m_deleteOnClose) return; QList allCookies = getAllCookies(); QFile file(m_activeProfil+"cookies.dat"); file.open(QIODevice::WriteOnly); QDataStream stream(&file); int count = allCookies.count(); stream << count; for (int i = 0; i restoredCookies; QFile file(m_activeProfil+"cookies.dat"); file.open(QIODevice::ReadOnly); QDataStream stream(&file); int count; stream >> count; for (int i = 0; i> rawForm; QNetworkCookie cok = QNetworkCookie::parseCookies(rawForm).at(0); if (cok.expirationDate() < now) continue; if (cok.isSessionCookie()) continue; restoredCookies.append(cok); } file.close(); setAllCookies(restoredCookies); } QList CookieJar::getAllCookies() { return QNetworkCookieJar::allCookies(); } void CookieJar::setAllCookies(const QList &cookieList) { QNetworkCookieJar::setAllCookies(cookieList); }