aboutsummaryrefslogtreecommitdiff
path: root/src/webengine
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 /src/webengine
parentMultithreaded saving during shutdown (diff)
downloadsmolbote-3efd427d2a6c456f1cfbdd73013d8e20cac909ab.tar.xz
CookieInterceptor, making all cookies session cookies
Diffstat (limited to 'src/webengine')
-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
4 files changed, 76 insertions, 0 deletions
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: