mirror of
https://invent.kde.org/network/falkon.git
synced 2024-11-11 01:22:10 +01:00
Revert "Remove GnomeKeyringPasswords plugin"
This reverts commit b9fb89a31c
.
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.
This commit is contained in:
parent
1781ea1fae
commit
b6131a2de9
|
@ -98,6 +98,15 @@ if (EXISTS "${CMAKE_SOURCE_DIR}/po")
|
||||||
find_package(KF5I18n REQUIRED)
|
find_package(KF5I18n REQUIRED)
|
||||||
endif()
|
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
|
# Optional: KWallet, KIO, KCrash, KCoreAddons
|
||||||
set(KF5_MIN_VERSION "5.54.0")
|
set(KF5_MIN_VERSION "5.54.0")
|
||||||
find_package(KF5Wallet ${KF5_MIN_VERSION} CONFIG)
|
find_package(KF5Wallet ${KF5_MIN_VERSION} CONFIG)
|
||||||
|
|
|
@ -9,6 +9,10 @@ add_subdirectory(StatusBarIcons)
|
||||||
add_subdirectory(TabManager)
|
add_subdirectory(TabManager)
|
||||||
add_subdirectory(VerticalTabs)
|
add_subdirectory(VerticalTabs)
|
||||||
|
|
||||||
|
if (GNOME_KEYRING_FOUND)
|
||||||
|
add_subdirectory(GnomeKeyringPasswords)
|
||||||
|
endif()
|
||||||
|
|
||||||
if (ENABLE_KDE_FRAMEWORKS_INTEGRATION_PLUGIN)
|
if (ENABLE_KDE_FRAMEWORKS_INTEGRATION_PLUGIN)
|
||||||
add_subdirectory(KDEFrameworksIntegration)
|
add_subdirectory(KDEFrameworksIntegration)
|
||||||
endif()
|
endif()
|
||||||
|
|
13
src/plugins/GnomeKeyringPasswords/CMakeLists.txt
Normal file
13
src/plugins/GnomeKeyringPasswords/CMakeLists.txt
Normal file
|
@ -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)
|
||||||
|
|
2
src/plugins/GnomeKeyringPasswords/Messages.sh
Normal file
2
src/plugins/GnomeKeyringPasswords/Messages.sh
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
#! /bin/sh
|
||||||
|
$EXTRACT_TR_STRINGS `find . -name '*.cpp' -o -name '*.h' -o -name '*.ui'` -o $podir/falkon_gnomekeyringpasswords_qt.pot
|
|
@ -0,0 +1,304 @@
|
||||||
|
/* ============================================================
|
||||||
|
* GnomeKeyringPasswords - gnome-keyring support plugin for Falkon
|
||||||
|
* Copyright (C) 2013-2014 David Rosca <nowrep@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 "gnomekeyringpasswordbackend.h"
|
||||||
|
#include "gnomekeyringplugin.h"
|
||||||
|
|
||||||
|
#include <QDateTime>
|
||||||
|
|
||||||
|
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<PasswordEntry> GnomeKeyringPasswordBackend::getEntries(const QUrl &url)
|
||||||
|
{
|
||||||
|
initialize();
|
||||||
|
|
||||||
|
const QString host = PasswordManager::createHost(url);
|
||||||
|
|
||||||
|
QVector<PasswordEntry> 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<PasswordEntry> 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;
|
||||||
|
}
|
|
@ -0,0 +1,50 @@
|
||||||
|
/* ============================================================
|
||||||
|
* GnomeKeyringPasswords - gnome-keyring support plugin for Falkon
|
||||||
|
* Copyright (C) 2013-2014 David Rosca <nowrep@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 GNOMEKEYRINGPASSWORDBACKEND_H
|
||||||
|
#define GNOMEKEYRINGPASSWORDBACKEND_H
|
||||||
|
|
||||||
|
#include <QVector>
|
||||||
|
|
||||||
|
#include "passwordbackends/passwordbackend.h"
|
||||||
|
#include "passwordmanager.h"
|
||||||
|
|
||||||
|
class FALKON_EXPORT GnomeKeyringPasswordBackend : public PasswordBackend
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit GnomeKeyringPasswordBackend();
|
||||||
|
|
||||||
|
QString name() const;
|
||||||
|
|
||||||
|
QVector<PasswordEntry> getEntries(const QUrl &url);
|
||||||
|
QVector<PasswordEntry> 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<PasswordEntry> m_allEntries;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // GNOMEKEYRINGPASSWORDBACKEND_H
|
54
src/plugins/GnomeKeyringPasswords/gnomekeyringpasswords.json
Normal file
54
src/plugins/GnomeKeyringPasswords/gnomekeyringpasswords.json
Normal file
|
@ -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"
|
||||||
|
}
|
52
src/plugins/GnomeKeyringPasswords/gnomekeyringplugin.cpp
Normal file
52
src/plugins/GnomeKeyringPasswords/gnomekeyringplugin.cpp
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
/* ============================================================
|
||||||
|
* GnomeKeyringPasswords - gnome-keyring support plugin for Falkon
|
||||||
|
* Copyright (C) 2013-2014 David Rosca <nowrep@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 "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));
|
||||||
|
}
|
43
src/plugins/GnomeKeyringPasswords/gnomekeyringplugin.h
Normal file
43
src/plugins/GnomeKeyringPasswords/gnomekeyringplugin.h
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
/* ============================================================
|
||||||
|
* GnomeKeyringPasswords - gnome-keyring support plugin for Falkon
|
||||||
|
* Copyright (C) 2013-2014 David Rosca <nowrep@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 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
|
Loading…
Reference in New Issue
Block a user