diff options
| author | Aqua-sama <aqua@iserlohn-fortress.net> | 2018-01-13 20:13:10 +0100 | 
|---|---|---|
| committer | Aqua-sama <aqua@iserlohn-fortress.net> | 2018-01-13 20:13:10 +0100 | 
| commit | 3efd427d2a6c456f1cfbdd73013d8e20cac909ab (patch) | |
| tree | 0bb2d362fd49fe2365330e2bbe5e6abf8be5c5b0 /src/webengine | |
| parent | Multithreaded saving during shutdown (diff) | |
| download | smolbote-3efd427d2a6c456f1cfbdd73013d8e20cac909ab.tar.xz | |
CookieInterceptor, making all cookies session cookies
Diffstat (limited to 'src/webengine')
| -rw-r--r-- | src/webengine/cookieinterceptor.cpp | 34 | ||||
| -rw-r--r-- | src/webengine/cookieinterceptor.h | 32 | ||||
| -rw-r--r-- | src/webengine/webengineprofile.cpp | 7 | ||||
| -rw-r--r-- | src/webengine/webengineprofile.h | 3 | 
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: | 
