1
mirror of https://invent.kde.org/network/falkon.git synced 2024-12-20 18:56:34 +01:00

Created Cookies API

This commit is contained in:
Anmol Gautam 2018-05-24 22:50:27 +05:30
parent 59d1cc22f5
commit a729ccf7bf
7 changed files with 317 additions and 0 deletions

View File

@ -163,6 +163,8 @@ set(SRCS ${SRCS}
plugins/qml/api/topsites/qmltopsites.cpp plugins/qml/api/topsites/qmltopsites.cpp
plugins/qml/api/history/qmlhistoryitem.cpp plugins/qml/api/history/qmlhistoryitem.cpp
plugins/qml/api/history/qmlhistory.cpp plugins/qml/api/history/qmlhistory.cpp
plugins/qml/api/cookies/qmlcookie.cpp
plugins/qml/api/cookies/qmlcookies.cpp
popupwindow/popuplocationbar.cpp popupwindow/popuplocationbar.cpp
popupwindow/popupstatusbarmessage.cpp popupwindow/popupstatusbarmessage.cpp
popupwindow/popupwebview.cpp popupwindow/popupwebview.cpp

View File

@ -0,0 +1,81 @@
/* ============================================================
* Falkon - Qt web browser
* Copyright (C) 2018 Anmol Gautam <tarptaeya@gmail.com>
*
* 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 <http://www.gnu.org/licenses/>.
* ============================================================ */
#include "qmlcookie.h"
#include <QDebug>
QmlCookie::QmlCookie(QNetworkCookie *cookie, QObject *parent) :
QObject(parent)
, m_cookie(cookie)
{
}
QString QmlCookie::domain() const
{
if (!m_cookie) {
return QString();
}
return m_cookie->domain();
}
QDateTime QmlCookie::expirationDate() const
{
if (!m_cookie) {
return QDateTime();
}
return m_cookie->expirationDate();
}
QString QmlCookie::name() const
{
if (!m_cookie) {
return QString();
}
return QString(m_cookie->name());
}
QString QmlCookie::path() const
{
if (!m_cookie) {
return QString();
}
return m_cookie->path();
}
bool QmlCookie::secure() const
{
if (!m_cookie) {
return false;
}
return m_cookie->isSecure();
}
bool QmlCookie::session() const
{
if (!m_cookie) {
return false;
}
return m_cookie->isSessionCookie();
}
QString QmlCookie::value() const
{
if (!m_cookie) {
return QString();
}
return QString(m_cookie->value());
}

View File

@ -0,0 +1,48 @@
/* ============================================================
* Falkon - Qt web browser
* Copyright (C) 2018 Anmol Gautam <tarptaeya@gmail.com>
*
* 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 <http://www.gnu.org/licenses/>.
* ============================================================ */
#ifndef QMLCOOKIE_H
#define QMLCOOKIE_H
#include <QObject>
#include <QDateTime>
#include <QNetworkCookie>
class QmlCookie : public QObject
{
Q_OBJECT
Q_PROPERTY(QString domain READ domain CONSTANT)
Q_PROPERTY(QDateTime expirationDate READ expirationDate CONSTANT)
Q_PROPERTY(QString name READ name CONSTANT)
Q_PROPERTY(QString path READ path CONSTANT)
Q_PROPERTY(bool secure READ secure CONSTANT)
Q_PROPERTY(bool session READ session CONSTANT)
Q_PROPERTY(QString value READ value CONSTANT)
public:
explicit QmlCookie(QNetworkCookie *cookie = 0, QObject *parent = 0);
QString domain() const;
QDateTime expirationDate() const;
QString name() const;
QString path() const;
bool secure() const;
bool session() const;
QString value() const;
private:
QNetworkCookie *m_cookie;
};
#endif // QMLCOOKIE_H

View File

@ -0,0 +1,115 @@
/* ============================================================
* Falkon - Qt web browser
* Copyright (C) 2018 Anmol Gautam <tarptaeya@gmail.com>
*
* 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 <http://www.gnu.org/licenses/>.
* ============================================================ */
#include "qmlcookies.h"
#include "mainapplication.h"
#include "cookiejar.h"
#include "qwebengineprofile.h"
QmlCookies::QmlCookies(QObject *parent) :
QObject(parent)
{
connect(mApp->cookieJar(), &CookieJar::cookieAdded, this, [=](QNetworkCookie network_cookie){
QmlCookie *cookie = new QmlCookie(&network_cookie);
emit changed(cookie, false);
});
connect(mApp->cookieJar(), &CookieJar::cookieRemoved, this, [=](QNetworkCookie network_cookie){
QmlCookie *cookie = new QmlCookie(&network_cookie);
emit changed(cookie, true);
});
}
QNetworkCookie *QmlCookies::getNetworkCookie(const QVariantMap &map)
{
if (!map["name"].isValid() || !map["url"].isValid()) {
qWarning() << "Error:" << "Wrong arguments passed to" << __FUNCTION__;
return nullptr;
}
QString name = map["name"].toString();
QString url = map["url"].toString();
QVector<QNetworkCookie> cookies = mApp->cookieJar()->getAllCookies();
for (QNetworkCookie cookie : cookies) {
if (cookie.name() == name && cookie.domain() == url) {
QNetworkCookie *netCookie = new QNetworkCookie(cookie);
return netCookie;
}
}
return nullptr;
}
QmlCookie *QmlCookies::get(const QVariantMap &map)
{
QNetworkCookie *netCookie = getNetworkCookie(map);
if (!netCookie) {
return nullptr;
}
return new QmlCookie(netCookie);
}
QList<QObject*> QmlCookies::getAll(const QVariantMap &map)
{
QList<QObject*> qmlCookies;
QString name = map["name"].toString();
QString url = map["url"].toString();
QString path = map["path"].toString();
bool secure = map["secure"].toBool();
bool session = map["session"].toBool();
QVector<QNetworkCookie> cookies = mApp->cookieJar()->getAllCookies();
for (QNetworkCookie cookie : cookies) {
if ((!map["name"].isValid() || cookie.name() == name)
&& (!map["url"].isValid() || cookie.domain() == url)
&& (!map["path"].isValid() || cookie.path() == path)
&& (!map["secure"].isValid() || cookie.isSecure() == secure)
&& (!map["session"].isValid() || cookie.isSessionCookie() == session)) {
QNetworkCookie *netCookie = new QNetworkCookie(cookie);
QmlCookie *qmlCookie = new QmlCookie(netCookie);
qmlCookies.append(qmlCookie);
}
}
return qmlCookies;
}
void QmlCookies::set(const QVariantMap &map)
{
QString name = map["name"].toString();
QString url = map["url"].toString();
QString path = map["path"].toString();
bool secure = map["secure"].toBool();
QDateTime expirationDate = QDateTime::fromMSecsSinceEpoch(map["expirationDate"].toDouble());
bool httpOnly = map["httpOnly"].toBool();
QString value = map["value"].toString();
QNetworkCookie cookie;
cookie.setName(name.toLocal8Bit());
cookie.setDomain(url);
cookie.setPath(path);
cookie.setSecure(secure);
cookie.setExpirationDate(expirationDate);
cookie.setHttpOnly(httpOnly);
cookie.setValue(value.toLocal8Bit());
mApp->webProfile()->cookieStore()->setCookie(cookie);
}
void QmlCookies::remove(const QVariantMap &map)
{
QNetworkCookie *netCookie = getNetworkCookie(map);
if (!netCookie) {
qWarning() << "Error:" << "Cannot find cookie";
return;
}
mApp->webProfile()->cookieStore()->deleteCookie(*netCookie);
}

View File

@ -0,0 +1,39 @@
/* ============================================================
* Falkon - Qt web browser
* Copyright (C) 2018 Anmol Gautam <tarptaeya@gmail.com>
*
* 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 <http://www.gnu.org/licenses/>.
* ============================================================ */
#ifndef QMLCOOKIES_H
#define QMLCOOKIES_H
#include <QObject>
#include "qmlcookie.h"
class QmlCookies : public QObject
{
Q_OBJECT
public:
explicit QmlCookies(QObject *parent = 0);
Q_INVOKABLE QmlCookie *get(const QVariantMap &map);
Q_INVOKABLE QList<QObject*> getAll(const QVariantMap &map);
Q_INVOKABLE void set(const QVariantMap &map);
Q_INVOKABLE void remove(const QVariantMap &map);
signals:
void changed(QmlCookie *cookie, bool removed);
private:
QNetworkCookie *getNetworkCookie(const QVariantMap &map);
};
#endif // QMLCOOKIES_H

View File

@ -23,6 +23,8 @@
#include "api/topsites/qmltopsites.h" #include "api/topsites/qmltopsites.h"
#include "api/history/qmlhistoryitem.h" #include "api/history/qmlhistoryitem.h"
#include "api/history/qmlhistory.h" #include "api/history/qmlhistory.h"
#include "api/cookies/qmlcookie.h"
#include "api/cookies/qmlcookies.h"
#include <QQmlEngine> #include <QQmlEngine>
@ -39,6 +41,9 @@ void QmlPlugins::registerQmlTypes()
registerQmlHistoryItem(); registerQmlHistoryItem();
registerQmlHistory(); registerQmlHistory();
registerQmlCookie();
registerQmlCookies();
} }
// private static // private static
@ -118,3 +123,27 @@ void QmlPlugins::registerQmlHistory()
return object; return object;
}); });
} }
// private static
void QmlPlugins::registerQmlCookie()
{
qmlRegisterSingletonType<QmlCookie>("org.kde.falkon", 1, 0, "Cookie", [](QQmlEngine *engine, QJSEngine *scriptEngine) -> QObject * {
Q_UNUSED(engine)
Q_UNUSED(scriptEngine)
auto *object = new QmlCookie();
return object;
});
}
// private static
void QmlPlugins::registerQmlCookies()
{
qmlRegisterSingletonType<QmlCookies>("org.kde.falkon", 1, 0, "Cookies", [](QQmlEngine *engine, QJSEngine *scriptEngine) -> QObject * {
Q_UNUSED(engine)
Q_UNUSED(scriptEngine)
auto *object = new QmlCookies();
return object;
});
}

View File

@ -30,6 +30,9 @@ class QmlPlugins
static void registerQmlHistoryItem(); static void registerQmlHistoryItem();
static void registerQmlHistory(); static void registerQmlHistory();
static void registerQmlCookie();
static void registerQmlCookies();
public: public:
static void registerQmlTypes(); static void registerQmlTypes();
}; };