[Pkg-owncloud-commits] [qtkeychain] 39/63: Added libsecret support.

Sandro Knauß hefee at debian.org
Sat Jun 10 14:39:30 UTC 2017


This is an automated email from the git hooks/post-receive script.

hefee pushed a commit to branch master
in repository qtkeychain.

commit 14f7df29793d38b1d6b1d00eeee935892d71c7e7
Author: Armin Novak <armin.novak at thincast.com>
Date:   Thu Jan 14 14:13:36 2016 +0100

    Added libsecret support.
---
 CMakeLists.txt    | 15 +++++++++++++--
 keychain.h        |  7 ++++---
 keychain_p.h      |  4 ++--
 keychain_unix.cpp | 28 +++++++++++++++++++++++++++-
 4 files changed, 46 insertions(+), 8 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 167081e..423c69a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,8 @@
 cmake_minimum_required(VERSION 2.8.11)
 project(qtkeychain)
 
+include(FindPkgConfig)
+
 ###
 
 set(QTKEYCHAIN_VERSION 0.7.90)
@@ -24,7 +26,7 @@ if (WIN32)
     option(USE_CREDENTIAL_STORE "Build with windows CredentialStore support" ON)
 
     if (USE_CREDENTIAL_STORE)
-	add_definitions(-DUSE_CREDENTIAL_STORE=1)
+        add_definitions(-DUSE_CREDENTIAL_STORE=1)
     endif()
 endif()
 
@@ -148,7 +150,16 @@ if(APPLE)
 endif()
 
 if(UNIX AND NOT APPLE AND NOT ANDROID)
-    list(APPEND qtkeychain_SOURCES keychain_unix.cpp gnomekeyring.cpp plaintextstore.cpp)
+    option(LIBSECRET_SUPPORT "Build with libsecret support" ON)
+
+    if(LIBSECRET_SUPPORT)
+        pkg_check_modules(LIBSECRET libsecret-1)
+
+        add_definitions(-DHAVE_LIBSECRET=${LIBSECRET_FOUND})
+        INCLUDE_DIRECTORIES(${LIBSECRET_INCLUDE_DIRS})
+    endif()
+
+    list(APPEND qtkeychain_SOURCES keychain_unix.cpp gnomekeyring.cpp libsecret.cpp plaintextstore.cpp)
     qt_add_dbus_interface(qtkeychain_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/org.kde.KWallet.xml kwallet_interface KWalletInterface)
     list(APPEND qtkeychain_LIBRARIES ${QTDBUS_LIBRARIES} )
 endif()
diff --git a/keychain.h b/keychain.h
index c2840de..aafaa57 100644
--- a/keychain.h
+++ b/keychain.h
@@ -42,7 +42,7 @@ class JobPrivate;
  */
 class QKEYCHAIN_EXPORT Job : public QObject {
     Q_OBJECT
-public:    
+public:
     ~Job();
 
     /**
@@ -134,6 +134,9 @@ public:
      */
     void setKey( const QString& key );
 
+    void emitFinished();
+    void emitFinishedWithError(Error, const QString& errorString);
+
 Q_SIGNALS:
     /**
      * Emitted when this job is finished.
@@ -149,8 +152,6 @@ protected:
 private:
     void setError( Error error );
     void setErrorString( const QString& errorString );
-    void emitFinished();
-    void emitFinishedWithError(Error, const QString& errorString);
 
     void scheduledStart();
 
diff --git a/keychain_p.h b/keychain_p.h
index d6a2f10..dc66d12 100644
--- a/keychain_p.h
+++ b/keychain_p.h
@@ -46,6 +46,8 @@ public:
     static Mode stringToMode(const QString& s);
 
     Mode mode;
+    Job* const q;
+    QByteArray data;
 
 #if defined(Q_OS_UNIX) && !defined(Q_OS_DARWIN) && !defined(Q_OS_ANDROID)
     org::kde::KWallet* iface;
@@ -77,8 +79,6 @@ protected:
     bool insecureFallback;
     QPointer<QSettings> settings;
     QString key;
-    Job* const q;
-    QByteArray data;
 
 friend class Job;
 friend class JobExecutor;
diff --git a/keychain_unix.cpp b/keychain_unix.cpp
index d2e275d..925d262 100644
--- a/keychain_unix.cpp
+++ b/keychain_unix.cpp
@@ -8,11 +8,15 @@
  *****************************************************************************/
 #include "keychain_p.h"
 #include "gnomekeyring_p.h"
+#include "libsecret_p.h"
 #include "plaintextstore_p.h"
 
+#include <QScopedPointer>
+
 using namespace QKeychain;
 
 enum KeyringBackend {
+    Backend_LibSecretKeyring,
     Backend_GnomeKeyring,
     Backend_Kwallet4,
     Backend_Kwallet5
@@ -74,6 +78,12 @@ static DesktopEnvironment detectDesktopEnvironment() {
 
 static KeyringBackend detectKeyringBackend()
 {
+    /* Libsecret unifies access to KDE and GNOME
+     * password services. */
+    if (LibSecretKeyring::isAvailable()) {
+        return Backend_LibSecretKeyring;
+    }
+
     switch (detectDesktopEnvironment()) {
     case DesktopEnv_Kde4:
         return Backend_Kwallet4;
@@ -87,7 +97,7 @@ static KeyringBackend detectKeyringBackend()
     case DesktopEnv_Xfce:
     case DesktopEnv_Other:
     default:
-        if ( GnomeKeyring::isAvailable() ) {
+         if ( GnomeKeyring::isAvailable() ) {
             return Backend_GnomeKeyring;
         } else {
             return Backend_Kwallet4;
@@ -120,6 +130,11 @@ static void kwalletReadPasswordScheduledStartImpl(const char * service, const ch
 
 void ReadPasswordJobPrivate::scheduledStart() {
     switch ( getKeyringBackend() ) {
+    case Backend_LibSecretKeyring: {
+        if ( !LibSecretKeyring::findPassword(key, q->service(), this) ) {
+            q->emitFinishedWithError( OtherError, tr("Unknown error") );
+        }
+    } break;
     case Backend_GnomeKeyring:
         this->mode = JobPrivate::Text;
         if ( !GnomeKeyring::find_network_password( key.toUtf8().constData(),
@@ -352,6 +367,12 @@ static void kwalletWritePasswordScheduledStart( const char * service, const char
 
 void WritePasswordJobPrivate::scheduledStart() {
     switch ( getKeyringBackend() ) {
+    case Backend_LibSecretKeyring: {
+        if ( !LibSecretKeyring::writePassword(service, key, service, mode,
+                                              data, this) ) {
+            q->emitFinishedWithError( OtherError, tr("Unknown error") );
+        }
+    } break;
     case Backend_GnomeKeyring: {
         QString type;
         QByteArray password;
@@ -470,6 +491,11 @@ void JobPrivate::kwalletFinished( QDBusPendingCallWatcher* watcher ) {
 
 void DeletePasswordJobPrivate::scheduledStart() {
     switch ( getKeyringBackend() ) {
+    case Backend_LibSecretKeyring: {
+        if ( !LibSecretKeyring::deletePassword(key, q->service(), this) ) {
+            q->emitFinishedWithError( OtherError, tr("Unknown error") );
+        }
+    } break;
     case Backend_GnomeKeyring: {
         if ( !GnomeKeyring::delete_network_password(
                  key.toUtf8().constData(), q->service().toUtf8().constData(),

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/qtkeychain.git



More information about the Pkg-owncloud-commits mailing list