aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2018-01-13 20:13:10 +0100
committerAqua-sama <aqua@iserlohn-fortress.net>2018-01-13 20:13:10 +0100
commit3efd427d2a6c456f1cfbdd73013d8e20cac909ab (patch)
tree0bb2d362fd49fe2365330e2bbe5e6abf8be5c5b0
parentMultithreaded saving during shutdown (diff)
downloadsmolbote-3efd427d2a6c456f1cfbdd73013d8e20cac909ab.tar.xz
CookieInterceptor, making all cookies session cookies
-rw-r--r--BUGS.md45
-rw-r--r--CMakeLists.txt2
-rw-r--r--src/browser.cpp3
-rw-r--r--src/browser.h2
-rw-r--r--src/webengine/cookieinterceptor.cpp34
-rw-r--r--src/webengine/cookieinterceptor.h32
-rw-r--r--src/webengine/webengineprofile.cpp7
-rw-r--r--src/webengine/webengineprofile.h3
8 files changed, 84 insertions, 44 deletions
diff --git a/BUGS.md b/BUGS.md
index 03eee94..df2d942 100644
--- a/BUGS.md
+++ b/BUGS.md
@@ -2,52 +2,11 @@
List of known bugs that can't be fixed atm
### Search terms in address bar
-QUrl always seems to return true when checking if valid url. Workaround is to prepend '#'
-to the search.
+QUrl always seems to return true when checking if valid url. Workaround is to
+prepend '#' to the search.
### databases-incognito in home
https://bugreports.qt.io/browse/QTBUG-62957
### Shortcuts don't work at times
A field on a page is probably taking focus.
-
-## To do list
-List of things to do before 1.0 release
-
-### Cookies
-- cookie whitelist and blacklist
-
-### Request filter
-- How are multiple IPs per hostname to be treated?
-- Multiple hostnames on a line get ignored after the first one
-
-### Settings dialog
-- show settings dialog on startup if config was auto-generated
-- dialog buttons
-
-### Bookmarks
-- BUG: Completer doesn't search through folders
-- TODO: BookmarkItem icon url
-- TOOD: Saving BookmarksModel
-
-### Downloads
-- review code
-- download speed
-- Elapsed time, avg speed, remaining time
-- In details: stop, pause/resume
-
-### Rewrite documentation
-- quickstart/manual that lists keyboard shortcuts
-
-### SSL popup
-- give it a proper size (perhaps instead of a QMenu, make it a QWidget)
-
-### Windows build
-- adjust paths to make sense on Windows
-- make sure smolbote can run independent of its location
-
-Appveyor offers free builds for OSS; the build image offers Qt 5.9.2 with msvc2017
-- compile libconfig
-- compile smolbote, and link to libconfig
-- windeployqt into a package
-- write blog post about the process
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0fd5850..e7c7296 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -79,6 +79,8 @@ set(SourceCode
"data/resources.qrc"
# webengine
+ src/webengine/cookieinterceptor.cpp
+ src/webengine/cookieinterceptor.h
"src/webengine/urlinterceptor.cpp"
"src/webengine/urlinterceptor.h"
"src/webengine/webengineprofile.cpp" # todo: rename to profile
diff --git a/src/browser.cpp b/src/browser.cpp
index 25fcf59..8b7f40f 100644
--- a/src/browser.cpp
+++ b/src/browser.cpp
@@ -9,7 +9,6 @@
#include "browser.h"
#include "mainwindow.h"
#include "webengine/urlinterceptor.h"
-#include <QDir>
#include <QtConcurrent>
#include <bookmarks/bookmarkswidget.h>
#include <downloads/downloadswidget.h>
@@ -45,6 +44,7 @@ void Browser::setConfiguration(std::shared_ptr<Configuration> &config)
m_downloadManager = std::make_shared<DownloadsWidget>(QString::fromStdString(m_config->value<std::string>("downloads.path").value()));
m_urlRequestInterceptor = std::make_shared<UrlRequestInterceptor>(QString::fromStdString(m_config->value<std::string>("filter.path").value()));
+ m_cookieInterceptor = std::make_shared<CookieInterceptor>("");
// set default profile
m_defaultProfile = profile(QString::fromStdString(m_config->value<std::string>("browser.profile").value()));
@@ -118,6 +118,7 @@ std::shared_ptr<WebEngineProfile> Browser::profile(const QString storageName)
const QString &path = QString::fromStdString(m_config->value<std::string>("profile.path").value());
std::shared_ptr<WebEngineProfile> _profile = std::shared_ptr<WebEngineProfile>(createProfile(storageName, path, nullptr));
_profile->setRequestInterceptor(m_urlRequestInterceptor.get());
+ _profile->setCookieInterceptor(m_cookieInterceptor.get());
connect(_profile.get(), &WebEngineProfile::downloadRequested, m_downloadManager.get(), &DownloadsWidget::addDownload);
m_profiles.insert(storageName, _profile);
diff --git a/src/browser.h b/src/browser.h
index a78219d..9649948 100644
--- a/src/browser.h
+++ b/src/browser.h
@@ -14,6 +14,7 @@
#include "webengine/webengineprofile.h"
#include <QVector>
#include <memory>
+#include "webengine/cookieinterceptor.h"
class MainWindow;
class BookmarksWidget;
@@ -46,6 +47,7 @@ private:
std::shared_ptr<WebEngineProfile> m_defaultProfile;
std::shared_ptr<UrlRequestInterceptor> m_urlRequestInterceptor;
+ std::shared_ptr<CookieInterceptor> m_cookieInterceptor;
std::shared_ptr<BookmarksWidget> m_bookmarksManager;
std::shared_ptr<DownloadsWidget> m_downloadManager;
};
diff --git a/src/webengine/cookieinterceptor.cpp b/src/webengine/cookieinterceptor.cpp
new file mode 100644
index 0000000..88cc475
--- /dev/null
+++ b/src/webengine/cookieinterceptor.cpp
@@ -0,0 +1,34 @@
+/*
+ * This file is part of smolbote. It's copyrighted by the contributors recorded
+ * in the version control history of the file, available from its original
+ * location: git://neueland.iserlohn-fortress.net/smolbote.git
+ *
+ * SPDX-License-Identifier: GPL-3.0
+ */
+
+#include "cookieinterceptor.h"
+#include <QDateTime>
+#include <QWebEngineCookieStore>
+
+CookieInterceptor::CookieInterceptor(const QString &path, QObject *parent)
+ : QObject(parent)
+{
+}
+
+void CookieInterceptor::judgeCookie(const QNetworkCookie &cookie) {
+ QWebEngineCookieStore *store = dynamic_cast<QWebEngineCookieStore *>(sender());
+ Q_CHECK_PTR(store);
+
+ qDebug("Added cookie %s::%s", qUtf8Printable(cookie.domain()), qUtf8Printable(cookie.name()));
+
+ // A session cookie is a cookie which has no expiration date, which means it should be discarded when
+ // the application's concept of session is over (usually, when the application exits)
+ if(!cookie.isSessionCookie()) {
+ QNetworkCookie copyCookie(cookie);
+ copyCookie.setExpirationDate(QDateTime::fromString(""));
+ qDebug("cookie is now session?: %s", copyCookie.isSessionCookie() ? "yes" : "no");
+
+ store->deleteCookie(cookie, cookie.domain());
+ store->setCookie(copyCookie, copyCookie.domain());
+ }
+}
diff --git a/src/webengine/cookieinterceptor.h b/src/webengine/cookieinterceptor.h
new file mode 100644
index 0000000..58b8894
--- /dev/null
+++ b/src/webengine/cookieinterceptor.h
@@ -0,0 +1,32 @@
+/*
+ * This file is part of smolbote. It's copyrighted by the contributors recorded
+ * in the version control history of the file, available from its original
+ * location: git://neueland.iserlohn-fortress.net/smolbote.git
+ *
+ * SPDX-License-Identifier: GPL-3.0
+ */
+
+#ifndef COOKIEINTERCEPTOR_H
+#define COOKIEINTERCEPTOR_H
+
+#include <QObject>
+#include <QNetworkCookie>
+
+class CookieInterceptor : public QObject
+{
+ Q_OBJECT
+
+public:
+ struct CookieRule {
+ bool isBlocking;
+ };
+
+ explicit CookieInterceptor(const QString &path, QObject *parent = nullptr);
+
+public slots:
+ void judgeCookie(const QNetworkCookie &cookie);
+
+private:
+};
+
+#endif //COOKIEINTERCEPTOR_H
diff --git a/src/webengine/webengineprofile.cpp b/src/webengine/webengineprofile.cpp
index 78f0b9a..0e6a6bd 100644
--- a/src/webengine/webengineprofile.cpp
+++ b/src/webengine/webengineprofile.cpp
@@ -9,6 +9,7 @@
#include "webengineprofile.h"
#include <QFileInfo>
#include <QSettings>
+#include <QWebEngineCookieStore>
#include <QWebEngineSettings>
WebEngineProfile::WebEngineProfile(QObject *parent)
@@ -138,6 +139,12 @@ void WebEngineProfile::saveProfile()
config.sync();
}
+void WebEngineProfile::setCookieInterceptor(CookieInterceptor *interceptor)
+{
+ connect(cookieStore(), &QWebEngineCookieStore::cookieAdded, interceptor, &CookieInterceptor::judgeCookie);
+ cookieStore()->loadAllCookies();
+}
+
WebEngineProfile *createProfile(const QString &name, const QString &path, QObject *parent)
{
WebEngineProfile *profile;
diff --git a/src/webengine/webengineprofile.h b/src/webengine/webengineprofile.h
index bcf21bc..d0e5ed9 100644
--- a/src/webengine/webengineprofile.h
+++ b/src/webengine/webengineprofile.h
@@ -11,6 +11,7 @@
#include <QUrl>
#include <QWebEngineProfile>
+#include "cookieinterceptor.h"
class WebEngineProfile : public QWebEngineProfile
{
@@ -29,6 +30,8 @@ public:
QUrl newtab() const;
void setNewtab(const QUrl &url);
+ void setCookieInterceptor(CookieInterceptor *interceptor);
+
signals:
public slots: