summaryrefslogtreecommitdiff
blob: 760a1674015f50a66ca238e6b842acb266de560f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
From 127efedd1668b546d0ac8c83655a2056d0439f29 Mon Sep 17 00:00:00 2001
From: Valentin Rusu <kde@rusu.info>
Date: Fri, 7 Aug 2015 18:59:04 +0200
Subject: [PATCH] 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.
---
 src/runtime/kwalletd/main.cpp            |  2 +-
 src/runtime/kwalletd/migrationagent.cpp  | 42 ++++++++++++++++++++++++++------
 src/runtime/kwalletd/migrationagent.h    |  5 ++--
 src/runtime/kwalletd/migrationwizard.cpp |  2 +-
 4 files changed, 39 insertions(+), 12 deletions(-)

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();
     }
 
-- 
2.4.6