From b6131a2de98eb021ab11a7262df600167beaf105 Mon Sep 17 00:00:00 2001 From: Kevin Kofler Date: Tue, 11 Jan 2022 09:59:11 +0100 Subject: [PATCH] Revert "Remove GnomeKeyringPasswords plugin" This reverts commit b9fb89a31ca6966412a60a30f4080949839aa839. This plugin was removed due to the underlying library being deprecated and removed from some distributions. However: * the gnome-keyring library is still available in Fedora Rawhide, * the plugin is optional, and the availability of the library is automatically detected, so having the plugin available will not hurt users who do not have access to the underlying library, as Falkon will just be built without the optional plugin then, * distribution packagers can put the plugin into an optional subpackage (which I have always done in Fedora to begin with), * a replacement plugin using libsecret (the upstream replacement for libgnome-keyring) is still not available, and * perhaps most importantly: not having the plugin available leaves users with no easy way to access their existing saved passwords (due to no libsecret plugin being available), which is IMHO not acceptable. --- CMakeLists.txt | 9 + src/plugins/CMakeLists.txt | 4 + .../GnomeKeyringPasswords/CMakeLists.txt | 13 + src/plugins/GnomeKeyringPasswords/Messages.sh | 2 + .../gnomekeyringpasswordbackend.cpp | 304 ++++++++++++++++++ .../gnomekeyringpasswordbackend.h | 50 +++ .../gnomekeyringpasswords.json | 54 ++++ .../gnomekeyringplugin.cpp | 52 +++ .../gnomekeyringplugin.h | 43 +++ 9 files changed, 531 insertions(+) create mode 100644 src/plugins/GnomeKeyringPasswords/CMakeLists.txt create mode 100644 src/plugins/GnomeKeyringPasswords/Messages.sh create mode 100644 src/plugins/GnomeKeyringPasswords/gnomekeyringpasswordbackend.cpp create mode 100644 src/plugins/GnomeKeyringPasswords/gnomekeyringpasswordbackend.h create mode 100644 src/plugins/GnomeKeyringPasswords/gnomekeyringpasswords.json create mode 100644 src/plugins/GnomeKeyringPasswords/gnomekeyringplugin.cpp create mode 100644 src/plugins/GnomeKeyringPasswords/gnomekeyringplugin.h diff --git a/CMakeLists.txt b/CMakeLists.txt index d56aec981..15ea9520c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -98,6 +98,15 @@ if (EXISTS "${CMAKE_SOURCE_DIR}/po") find_package(KF5I18n REQUIRED) endif() +# Optional: GnomeKeyring +find_package(PkgConfig) +if (PKG_CONFIG_FOUND) + option(BUILD_KEYRING "Gnome keyring password plugin" ON) + if (BUILD_KEYRING) + pkg_check_modules(GNOME_KEYRING IMPORTED_TARGET gnome-keyring-1 ) + endif() +endif() + # Optional: KWallet, KIO, KCrash, KCoreAddons set(KF5_MIN_VERSION "5.54.0") find_package(KF5Wallet ${KF5_MIN_VERSION} CONFIG) diff --git a/src/plugins/CMakeLists.txt b/src/plugins/CMakeLists.txt index bfcf59378..54b28ba98 100644 --- a/src/plugins/CMakeLists.txt +++ b/src/plugins/CMakeLists.txt @@ -9,6 +9,10 @@ add_subdirectory(StatusBarIcons) add_subdirectory(TabManager) add_subdirectory(VerticalTabs) +if (GNOME_KEYRING_FOUND) + add_subdirectory(GnomeKeyringPasswords) +endif() + if (ENABLE_KDE_FRAMEWORKS_INTEGRATION_PLUGIN) add_subdirectory(KDEFrameworksIntegration) endif() diff --git a/src/plugins/GnomeKeyringPasswords/CMakeLists.txt b/src/plugins/GnomeKeyringPasswords/CMakeLists.txt new file mode 100644 index 000000000..269da9288 --- /dev/null +++ b/src/plugins/GnomeKeyringPasswords/CMakeLists.txt @@ -0,0 +1,13 @@ +add_definitions(${GNOME_KEYRING_CFLAGS} ${GNOME_KEYRING_CFLAGS_OTHER}) + +set( GnomeKeyringPasswords_SRCS + gnomekeyringplugin.cpp + gnomekeyringpasswordbackend.cpp + ) + +ecm_create_qm_loader( GnomeKeyringPasswords_SRCS falkon_gnomekeyringpasswords_qt ) + +add_library(GnomeKeyringPasswords MODULE ${GnomeKeyringPasswords_SRCS} ${RSCS}) +install(TARGETS GnomeKeyringPasswords DESTINATION ${FALKON_INSTALL_PLUGINDIR}) +target_link_libraries(GnomeKeyringPasswords PkgConfig::GNOME_KEYRING FalkonPrivate) + diff --git a/src/plugins/GnomeKeyringPasswords/Messages.sh b/src/plugins/GnomeKeyringPasswords/Messages.sh new file mode 100644 index 000000000..75d450c90 --- /dev/null +++ b/src/plugins/GnomeKeyringPasswords/Messages.sh @@ -0,0 +1,2 @@ +#! /bin/sh +$EXTRACT_TR_STRINGS `find . -name '*.cpp' -o -name '*.h' -o -name '*.ui'` -o $podir/falkon_gnomekeyringpasswords_qt.pot diff --git a/src/plugins/GnomeKeyringPasswords/gnomekeyringpasswordbackend.cpp b/src/plugins/GnomeKeyringPasswords/gnomekeyringpasswordbackend.cpp new file mode 100644 index 000000000..e027b319a --- /dev/null +++ b/src/plugins/GnomeKeyringPasswords/gnomekeyringpasswordbackend.cpp @@ -0,0 +1,304 @@ +/* ============================================================ +* GnomeKeyringPasswords - gnome-keyring support plugin for Falkon +* Copyright (C) 2013-2014 David Rosca +* +* 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 "gnomekeyringpasswordbackend.h" +#include "gnomekeyringplugin.h" + +#include + +extern "C" { +#include "gnome-keyring.h" +} + +static PasswordEntry createEntry(GnomeKeyringFound* item) +{ + PasswordEntry entry; + entry.id = item->item_id; + entry.password = QString::fromUtf8(item->secret); + + for (unsigned i = 0; i < item->attributes->len; ++i) { + GnomeKeyringAttribute attr = g_array_index(item->attributes, GnomeKeyringAttribute, i); + + if (strcmp(attr.name, "host") == 0) { + entry.host = QString::fromUtf8(attr.value.string); + } + else if (strcmp(attr.name, "username") == 0) { + entry.username = QString::fromUtf8(attr.value.string); + } + else if (strcmp(attr.name, "data") == 0) { + entry.data = attr.value.string; + } + else if (strcmp(attr.name, "updated") == 0) { + entry.updated = attr.value.integer; + } + } + + entry.data.replace(QByteArray("___PASSWORD-VALUE___"), PasswordManager::urlEncodePassword(entry.password)); + + return entry; +} + +static GnomeKeyringAttributeList* createAttributes(const PasswordEntry &entry) +{ + GnomeKeyringAttributeList* attributes = gnome_keyring_attribute_list_new(); + + gnome_keyring_attribute_list_append_string(attributes, "application", "Falkon"); + + QByteArray value = entry.username.toUtf8(); + gnome_keyring_attribute_list_append_string(attributes, "username", value.constData()); + + value = entry.data; + value.replace(PasswordManager::urlEncodePassword(entry.password), "___PASSWORD-VALUE___"); + gnome_keyring_attribute_list_append_string(attributes, "data", value.constData()); + + value = entry.host.toUtf8(); + gnome_keyring_attribute_list_append_string(attributes, "host", value.constData()); + + gnome_keyring_attribute_list_append_uint32(attributes, "updated", entry.updated); + + return attributes; +} + +static void storeEntry(PasswordEntry &entry) +{ + guint32 itemId; + GnomeKeyringAttributeList* attributes = createAttributes(entry); + + QByteArray pass = entry.password.toUtf8(); + QByteArray host = entry.host.toUtf8(); + + GnomeKeyringResult result = gnome_keyring_item_create_sync(GNOME_KEYRING_DEFAULT, + GNOME_KEYRING_ITEM_GENERIC_SECRET, + host.constData(), + attributes, + pass.constData(), + TRUE, // Update if exists + &itemId); + + gnome_keyring_attribute_list_free(attributes); + + if (result != GNOME_KEYRING_RESULT_OK) { + qWarning() << "GnomeKeyringPasswordBackend::addEntry Cannot add entry to keyring!"; + } + + entry.id = itemId; +} + +GnomeKeyringPasswordBackend::GnomeKeyringPasswordBackend() + : PasswordBackend() + , m_loaded(false) +{ +} + +QString GnomeKeyringPasswordBackend::name() const +{ + return GnomeKeyringPlugin::tr("Gnome Keyring"); +} + +QVector GnomeKeyringPasswordBackend::getEntries(const QUrl &url) +{ + initialize(); + + const QString host = PasswordManager::createHost(url); + + QVector list; + + foreach (const PasswordEntry &entry, m_allEntries) { + if (entry.host == host) { + list.append(entry); + } + } + + // Sort to prefer last updated entries + std::sort(list.begin(), list.end()); + + return list; +} + +QVector GnomeKeyringPasswordBackend::getAllEntries() +{ + initialize(); + + return m_allEntries; +} + +void GnomeKeyringPasswordBackend::addEntry(const PasswordEntry &entry) +{ + initialize(); + + PasswordEntry stored = entry; + stored.updated = QDateTime::currentDateTime().toTime_t(); + + storeEntry(stored); + + m_allEntries.append(stored); +} + +bool GnomeKeyringPasswordBackend::updateEntry(const PasswordEntry &entry) +{ + initialize(); + + // Update item attributes + GnomeKeyringAttributeList* attributes = createAttributes(entry); + + GnomeKeyringResult result = gnome_keyring_item_set_attributes_sync(GNOME_KEYRING_DEFAULT, + entry.id.toUInt(), + attributes); + + gnome_keyring_attribute_list_free(attributes); + + if (result != GNOME_KEYRING_RESULT_OK) { + qWarning() << "GnomeKeyringPasswordBackend::updateEntry Cannot updated entry attributes in keyring!"; + return false; + } + + // Update secret + GnomeKeyringItemInfo* info; + result = gnome_keyring_item_get_info_full_sync(GNOME_KEYRING_DEFAULT, entry.id.toUInt(), + GNOME_KEYRING_ITEM_INFO_SECRET, &info); + + if (result != GNOME_KEYRING_RESULT_OK) { + qWarning() << "GnomeKeyringPasswordBackend::updateEntry Cannot get entry info from keyring!"; + return false; + } + + QByteArray pass = entry.password.toUtf8(); + gnome_keyring_item_info_set_secret(info, pass.constData()); + + result = gnome_keyring_item_set_info_sync(GNOME_KEYRING_DEFAULT, entry.id.toUInt(), info); + + gnome_keyring_item_info_free(info); + + if (result != GNOME_KEYRING_RESULT_OK) { + qWarning() << "GnomeKeyringPasswordBackend::updateEntry Cannot set entry info in keyring!"; + return false; + } + + int index = m_allEntries.indexOf(entry); + + if (index > -1) { + m_allEntries[index] = entry; + } + + return true; +} + +void GnomeKeyringPasswordBackend::updateLastUsed(PasswordEntry &entry) +{ + initialize(); + + entry.updated = QDateTime::currentDateTime().toTime_t(); + + GnomeKeyringAttributeList* attributes = createAttributes(entry); + + GnomeKeyringResult result = gnome_keyring_item_set_attributes_sync(GNOME_KEYRING_DEFAULT, + entry.id.toUInt(), + attributes); + + gnome_keyring_attribute_list_free(attributes); + + if (result != GNOME_KEYRING_RESULT_OK) { + qWarning() << "GnomeKeyringPasswordBackend::updateLastUsed Cannot updated entry in keyring!"; + return; + } + + int index = m_allEntries.indexOf(entry); + + if (index > -1) { + m_allEntries[index] = entry; + } +} + +void GnomeKeyringPasswordBackend::removeEntry(const PasswordEntry &entry) +{ + initialize(); + + GnomeKeyringResult result = gnome_keyring_item_delete_sync(GNOME_KEYRING_DEFAULT, entry.id.toUInt()); + + if (result != GNOME_KEYRING_RESULT_OK) { + qWarning() << "GnomeKeyringPasswordBackend::removeEntry Cannot remove entry from keyring!"; + return; + } + + int index = m_allEntries.indexOf(entry); + + if (index > -1) { + m_allEntries.remove(index); + } +} + +void GnomeKeyringPasswordBackend::removeAll() +{ + initialize(); + + foreach (const PasswordEntry &entry, m_allEntries) { + removeEntry(entry); + } + + m_allEntries.clear(); +} + +void GnomeKeyringPasswordBackend::initialize() +{ + if (m_loaded) { + return; + } + + GList* found; + GnomeKeyringResult result = gnome_keyring_find_itemsv_sync(GNOME_KEYRING_ITEM_GENERIC_SECRET, &found, + "application", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING, "Falkon", + NULL); + + if (result != GNOME_KEYRING_RESULT_OK && result != GNOME_KEYRING_RESULT_NO_MATCH) { + qWarning() << "GnomeKeyringPasswordBackend::initialize Cannot read items from keyring!"; + return; + } + + bool migrate = false; + if (result == GNOME_KEYRING_RESULT_NO_MATCH) { + result = gnome_keyring_find_itemsv_sync(GNOME_KEYRING_ITEM_GENERIC_SECRET, &found, + "application", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING, "QupZilla", + NULL); + + if (result != GNOME_KEYRING_RESULT_OK && result != GNOME_KEYRING_RESULT_NO_MATCH) { + qWarning() << "GnomeKeyringPasswordBackend::initialize Cannot read items from keyring!"; + return; + } + + if (result == GNOME_KEYRING_RESULT_OK) { + migrate = true; + } + } + + GList* tmp = found; + + while (tmp) { + GnomeKeyringFound* item = (GnomeKeyringFound*) tmp->data; + m_allEntries.append(createEntry(item)); + tmp = tmp->next; + } + + gnome_keyring_found_list_free(found); + + if (migrate) { + for (PasswordEntry &entry : m_allEntries) { + storeEntry(entry); + } + } + + m_loaded = true; +} diff --git a/src/plugins/GnomeKeyringPasswords/gnomekeyringpasswordbackend.h b/src/plugins/GnomeKeyringPasswords/gnomekeyringpasswordbackend.h new file mode 100644 index 000000000..68a1c81f1 --- /dev/null +++ b/src/plugins/GnomeKeyringPasswords/gnomekeyringpasswordbackend.h @@ -0,0 +1,50 @@ +/* ============================================================ +* GnomeKeyringPasswords - gnome-keyring support plugin for Falkon +* Copyright (C) 2013-2014 David Rosca +* +* 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 . +* ============================================================ */ +#ifndef GNOMEKEYRINGPASSWORDBACKEND_H +#define GNOMEKEYRINGPASSWORDBACKEND_H + +#include + +#include "passwordbackends/passwordbackend.h" +#include "passwordmanager.h" + +class FALKON_EXPORT GnomeKeyringPasswordBackend : public PasswordBackend +{ +public: + explicit GnomeKeyringPasswordBackend(); + + QString name() const; + + QVector getEntries(const QUrl &url); + QVector getAllEntries(); + + void addEntry(const PasswordEntry &entry); + bool updateEntry(const PasswordEntry &entry); + void updateLastUsed(PasswordEntry &entry); + + void removeEntry(const PasswordEntry &entry); + void removeAll(); + +private: + void initialize(); + + bool m_loaded; + QVector m_allEntries; +}; + +#endif // GNOMEKEYRINGPASSWORDBACKEND_H diff --git a/src/plugins/GnomeKeyringPasswords/gnomekeyringpasswords.json b/src/plugins/GnomeKeyringPasswords/gnomekeyringpasswords.json new file mode 100644 index 000000000..aaea29937 --- /dev/null +++ b/src/plugins/GnomeKeyringPasswords/gnomekeyringpasswords.json @@ -0,0 +1,54 @@ +{ + "Comment": "Provides support for storing passwords in gnome-keyring", + "Comment[ca@valencia]": "Proporciona suport per emmagatzemar les contrasenyes a l'anell de claus de Gnome", + "Comment[ca]": "Proporciona suport per emmagatzemar les contrasenyes a l'anell de claus de Gnome", + "Comment[cs]": "Poskytuje podporu pro ukládání hesel pomocí gnome-keyring", + "Comment[da]": "Giver understøttelse af lagring af adgangskoder i gnome-nøglring", + "Comment[de]": "Unterstützung für die Speicherung von Passwörtern in gnome-keyring", + "Comment[en_GB]": "Provides support for storing passwords in gnome-keyring", + "Comment[es]": "Implementa el almacenamiento de contraseñas en el anillo de claves de Gnome", + "Comment[fi]": "Tarjoaa tuen salasanojen tallentamiseksi Gnomen avainrenkaaseen", + "Comment[fr]": "Prise en charge de l'enregistrement de mots de passe au sein de gnome-keyring", + "Comment[gl]": "Permite almacenar contrasinais en gnome-keyring", + "Comment[id]": "Menyediakan dukungan untuk menyimpan sandi dalam gnome-keyring", + "Comment[it]": "Fornisce un supporto all'immagazzinamento delle password nel portachiavi di Gnome", + "Comment[nl]": "Biedt ondersteuning voor opslaan van GNOME-sleutelbos wachtwoorden", + "Comment[nn]": "Gjev støtte for lagring av passord i Gnome-nøkkelringen", + "Comment[pl]": "Zapewnia obsługę przechowywania haseł w pęku kluczy gnome", + "Comment[pt]": "Oferece o suporte para gravar as senhas no 'gnome-keyring'", + "Comment[pt_BR]": "Fornece suporte para armazenar senhas no gnome-keyring", + "Comment[sk]": "Poskytuje podporu pre ukladanie hesiel do Gnome kľúčenky", + "Comment[sv]": "Tillhandahåller stöd för att lagra lösenord i Gnome-nyckelring", + "Comment[uk]": "Забезпечує підтримку зберігання паролів у gnome-keyring", + "Comment[x-test]": "xxProvides support for storing passwords in gnome-keyringxx", + "Comment[zh_CN]": "提供在 gnome-keyring 中保存密码的支持", + "Icon": "base64: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", + "Name": "Gnome Keyring Passwords", + "Name[ca@valencia]": "Contrasenyes a l'anell de claus de Gnome", + "Name[ca]": "Contrasenyes a l'anell de claus de Gnome", + "Name[cs]": "Hesla z klíčenky Gnome", + "Name[da]": "Adgangskoder til Gnome-nøglering", + "Name[de]": "Passwörter für Gnome Keyring", + "Name[en_GB]": "Gnome Keyring Passwords", + "Name[es]": "Anillo de contraseñas de Gnome", + "Name[fi]": "Gnomen avainrenkaan salasankaat", + "Name[fr]": "Trousseau de clés de GNOME", + "Name[gl]": "Contrasinais do chaveiro de Gnome", + "Name[id]": "Gnome Keyring Passwords", + "Name[it]": "Portachiavi per le chiavi di Gnome", + "Name[nl]": "GNOME-sleutelbos wachtwoorden", + "Name[nn]": "Passord for Gnome-nøkkelring", + "Name[pl]": "Hasła pęku kluczy Gnome", + "Name[pt]": "Senhas no Porta-Chaves do Gnome", + "Name[pt_BR]": "Senhas do chaveiro do GNOME", + "Name[sk]": "Heslá Gnome kľúčenky", + "Name[sv]": "Gnome-nyckelring lösenord", + "Name[uk]": "Паролі сховища ключів Gnome", + "Name[x-test]": "xxGnome Keyring Passwordsxx", + "Name[zh_CN]": "Gnome 钥匙链密码", + "Name[zh_TW]": "GNOME 鑰匙圈密碼", + "X-Falkon-Author": "David Rosca", + "X-Falkon-Email": "nowrep@gmail.com", + "X-Falkon-Settings": "false", + "X-Falkon-Version": "0.1.0" +} diff --git a/src/plugins/GnomeKeyringPasswords/gnomekeyringplugin.cpp b/src/plugins/GnomeKeyringPasswords/gnomekeyringplugin.cpp new file mode 100644 index 000000000..0e5acb890 --- /dev/null +++ b/src/plugins/GnomeKeyringPasswords/gnomekeyringplugin.cpp @@ -0,0 +1,52 @@ +/* ============================================================ +* GnomeKeyringPasswords - gnome-keyring support plugin for Falkon +* Copyright (C) 2013-2014 David Rosca +* +* 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 "gnomekeyringplugin.h" +#include "gnomekeyringpasswordbackend.h" +#include "pluginproxy.h" +#include "browserwindow.h" +#include "../config.h" +#include "mainapplication.h" +#include "autofill.h" +#include "passwordmanager.h" + +GnomeKeyringPlugin::GnomeKeyringPlugin() + : QObject() + , m_backend(0) +{ +} + +void GnomeKeyringPlugin::init(InitState state, const QString &settingsPath) +{ + Q_UNUSED(state); + Q_UNUSED(settingsPath); + + m_backend = new GnomeKeyringPasswordBackend; + mApp->autoFill()->passwordManager()->registerBackend(QSL("GnomeKeyring"), m_backend); +} + +void GnomeKeyringPlugin::unload() +{ + mApp->autoFill()->passwordManager()->unregisterBackend(m_backend); + delete m_backend; +} + +bool GnomeKeyringPlugin::testPlugin() +{ + // Require the version that the plugin was built with + return (Qz::VERSION == QLatin1String(FALKON_VERSION)); +} diff --git a/src/plugins/GnomeKeyringPasswords/gnomekeyringplugin.h b/src/plugins/GnomeKeyringPasswords/gnomekeyringplugin.h new file mode 100644 index 000000000..9e6dab686 --- /dev/null +++ b/src/plugins/GnomeKeyringPasswords/gnomekeyringplugin.h @@ -0,0 +1,43 @@ +/* ============================================================ +* GnomeKeyringPasswords - gnome-keyring support plugin for Falkon +* Copyright (C) 2013-2014 David Rosca +* +* 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 . +* ============================================================ */ +#ifndef GNOMEKEYRINGPLUGIN_H +#define GNOMEKEYRINGPLUGIN_H + +#include "plugininterface.h" + +class GnomeKeyringPasswordBackend; + +class GnomeKeyringPlugin : public QObject, public PluginInterface +{ + Q_OBJECT + Q_INTERFACES(PluginInterface) + Q_PLUGIN_METADATA(IID "Falkon.Browser.plugin.GnomeKeyringPasswords" FILE "gnomekeyringpasswords.json") + +public: + explicit GnomeKeyringPlugin(); + + void init(InitState state, const QString &settingsPath); + void unload(); + bool testPlugin(); + +private: + GnomeKeyringPasswordBackend* m_backend; + +}; + +#endif // GNOMEKEYRINGPLUGIN_H