[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kwallet] src/runtime/kwalletd: Stop showing the migration wizard by default
From:       Valentin Rusu <kde () rusu ! info>
Date:       2015-08-07 17:03:59
Message-ID: E1ZNl3n-0002DT-KH () scm ! kde ! org
[Download RAW message or body]

Git commit 127efedd1668b546d0ac8c83655a2056d0439f29 by Valentin Rusu.
Committed on 07/08/2015 at 16:59.
Pushed by vrusu into branch 'master'.

Stop showing the migration wizard by default

BUG:351056

If the migration wizard is needed, then add this to kwalletrc
[Migration]
showMigrationWizard=true

On systems having kwallet-pam the migration agent would also merge all the old
wallets into the default LocalWallet, as a side effect. This would avoid
wallet creation prompts, though.

M  +1    -1    src/runtime/kwalletd/main.cpp
M  +34   -8    src/runtime/kwalletd/migrationagent.cpp
M  +3    -2    src/runtime/kwalletd/migrationagent.h
M  +1    -1    src/runtime/kwalletd/migrationwizard.cpp

http://commits.kde.org/kwallet-framework/127efedd1668b546d0ac8c83655a2056d0439f29

diff --git a/src/runtime/kwalletd/main.cpp b/src/runtime/kwalletd/main.cpp
index c0fecaa..62fcd3a 100644
--- a/src/runtime/kwalletd/main.cpp
+++ b/src/runtime/kwalletd/main.cpp
@@ -186,7 +186,7 @@ int main(int argc, char **argv)
     aboutdata.addAuthor(i18n("Thiago Maceira"), i18n("D-Bus Interface"), "thiago@kde.org");
 
     KWalletD walletd;
-    MigrationAgent migrationAgent(&walletd);
+    MigrationAgent migrationAgent(&walletd, hash);
     KDBusService dbusUniqueInstance(KDBusService::Unique | KDBusService::NoExitOnFailure);
 
     // NOTE: the command should be parsed only after KDBusService instantiation
diff --git a/src/runtime/kwalletd/migrationagent.cpp b/src/runtime/kwalletd/migrationagent.cpp
index 6eaeb12..192a871 100644
--- a/src/runtime/kwalletd/migrationagent.cpp
+++ b/src/runtime/kwalletd/migrationagent.cpp
@@ -34,10 +34,12 @@
 
 #define SERVICE_KWALLETD4 "org.kde.kwalletd"
 #define ENTRY_ALREADY_MIGRATED "alreadyMigrated"
+#define ENTRY_SHOW_MIGRATION_WIZARD "showMigrationWizard"
 
-MigrationAgent::MigrationAgent(KWalletD* kd) :
+MigrationAgent::MigrationAgent(KWalletD* kd, const char *hash) :
   _kf5_daemon(kd)
   , _kde4_daemon(0)
+  , _pam_hash(hash)
 {
   QTimer::singleShot(100, this, SLOT(migrateWallets()));
 }
@@ -118,11 +120,27 @@ bool MigrationAgent::isMigrationWizardOk()
 {
     bool ok = false;
 
-    MigrationWizard *wizard = new MigrationWizard(this);
-    int result = wizard->exec();
-    if (QDialog::Accepted == result) {
-        // the user either migrated the wallets, or choose not to be prompted again
-        ok = true;
+    // The migration wizard would no longer been shown by default.
+    // see BUG 351056
+    // NOTE if user wants to show the migration wizard, then he should add the
+    // following setting to the kwalletrc:
+    // [Migration]
+    // showMigrationWizard=true
+    KConfig kwalletrc("kwalletrc");
+    KConfigGroup cfg(&kwalletrc, "Migration");
+    bool showMigrationWizard = cfg.readEntry<bool>(ENTRY_SHOW_MIGRATION_WIZARD, false);
+
+    if (showMigrationWizard) {
+        MigrationWizard *wizard = new MigrationWizard(this);
+        int result = wizard->exec();
+        if (QDialog::Accepted == result) {
+            // the user either migrated the wallets, or choose not to be prompted again
+            ok = true;
+        }
+    } else {
+        if (performMigration(0, true)) {
+            qDebug() << "Migration failed.";
+        }
     }
 
     return ok;
@@ -162,7 +180,7 @@ bool MigrationAgent::isEmptyOldWallet() const {
     return wallets.length() == 0;
 }
 
-bool MigrationAgent::performMigration(WId wid)
+bool MigrationAgent::performMigration(WId wid, bool withoutWizard)
 {
     auto appId = i18n("KDE Wallet Migration Agent");
     try {
@@ -174,7 +192,15 @@ bool MigrationAgent::performMigration(WId wid)
             emit progressMessage(i18n("Migrating wallet: %1", wallet));
             emit progressMessage(i18n("* Creating KF5 wallet: %1", wallet));
 
-            int handle5 = _kf5_daemon->internalOpen(appId, wallet, false, 0, true, QString());
+            int handle5 = -1;
+            if (withoutWizard && (_pam_hash != nullptr)) {
+                // see BUG 351056 for why this hacky code
+                // If the user has several wallets, all the values will be
+                // merged into the single LocalWallet
+                handle5 = _kf5_daemon->pamOpen(KWallet::Wallet::LocalWallet(), _pam_hash, 0);
+            } else {
+                handle5 = _kf5_daemon->internalOpen(appId, wallet, false, 0, true, QString());
+            }
             if (handle5 <0) {
                 emit progressMessage(i18n("ERROR when attempting new wallet creation. Aborting."));
                 return false;
diff --git a/src/runtime/kwalletd/migrationagent.h b/src/runtime/kwalletd/migrationagent.h
index 55a251d..c52509e 100644
--- a/src/runtime/kwalletd/migrationagent.h
+++ b/src/runtime/kwalletd/migrationagent.h
@@ -32,10 +32,10 @@ class KWalletD;
 class MigrationAgent : public QObject {
     Q_OBJECT
 public:
-    MigrationAgent(KWalletD* kd);
+    MigrationAgent(KWalletD* kd, const char* hash);
 
     bool isEmptyOldWallet() const;
-    bool performMigration(WId wid);
+    bool performMigration(WId wid, bool withoutWizard);
 
 private Q_SLOTS:
     void migrateWallets();
@@ -52,6 +52,7 @@ Q_SIGNALS:
 private:
     KWalletD		*_kf5_daemon;
     org::kde::KWallet 	*_kde4_daemon;
+    const char  *_pam_hash;
 };
 
 #endif // _MIGRATIONAGENT_H_
diff --git a/src/runtime/kwalletd/migrationwizard.cpp b/src/runtime/kwalletd/migrationwizard.cpp
index b7d3f70..cdd2a92 100644
--- a/src/runtime/kwalletd/migrationwizard.cpp
+++ b/src/runtime/kwalletd/migrationwizard.cpp
@@ -58,7 +58,7 @@ public:
 
     virtual void initializePage() {
         connect(_agent, SIGNAL(progressMessage(QString)), _ui._report, SLOT(append(QString)));
-        _migrationCompleted = _agent->performMigration(winId());
+        _migrationCompleted = _agent->performMigration(winId(), false);
         emit completeChanged();
     }
 
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic