Forráskód Böngészése

1.8 Migration: Fix password overwrite #3539

Markus Goetz 10 éve
szülő
commit
aee20e0ed3
4 módosított fájl, 14 hozzáadás és 8 törlés
  1. 10 4
      src/gui/accountmanager.cpp
  2. 2 2
      src/gui/accountmanager.h
  3. 1 1
      src/gui/folderman.cpp
  4. 1 1
      test/stub.cpp

+ 10 - 4
src/gui/accountmanager.cpp

@@ -119,21 +119,27 @@ bool AccountManager::restoreFromLegacySettings()
     return false;
 }
 
-void AccountManager::save()
+void AccountManager::save(bool saveCredentials)
 {
     auto settings = Account::settingsWithGroup(QLatin1String(accountsC));
     foreach (const auto &acc, _accounts) {
         settings->beginGroup(acc->account()->id());
-        save(acc->account(), *settings);
+        save(acc->account(), *settings, saveCredentials);
         settings->endGroup();
     }
 }
 
-void AccountManager::save(const AccountPtr& acc, QSettings& settings)
+void AccountManager::save(const AccountPtr& acc, QSettings& settings, bool saveCredentials)
 {
     settings.setValue(QLatin1String(urlC), acc->_url.toString());
     if (acc->_credentials) {
-        acc->_credentials->persist();
+        if (saveCredentials) {
+            // Only persist the credentials if the parameter is set, on migration from 1.8.x
+            // we want to save the accounts but not overwrite the credentials
+            // (This is easier than asynchronously fetching the credentials from keychain and then
+            // re-persisting them)
+            acc->_credentials->persist();
+        }
         Q_FOREACH(QString key, acc->_settingsMap.keys()) {
             settings.setValue(key, acc->_settingsMap.value(key));
         }

+ 2 - 2
src/gui/accountmanager.h

@@ -33,7 +33,7 @@ public:
     /**
      * Saves the accounts to a given settings file
      */
-    void save();
+    void save(bool saveCredentials = true);
 
     /**
      * Creates account objects from from a given settings file.
@@ -71,7 +71,7 @@ public:
     static AccountPtr createAccount();
 
 private:
-    void save(const AccountPtr& account, QSettings& settings);
+    void save(const AccountPtr& account, QSettings& settings, bool saveCredentials = true);
     AccountPtr load(QSettings& settings);
     bool restoreFromLegacySettings();
 

+ 1 - 1
src/gui/folderman.cpp

@@ -200,7 +200,7 @@ int FolderMan::setupFolders()
     if (accountsWithSettings.isEmpty()) {
         int r = setupFoldersMigration();
         if (r > 0) {
-            AccountManager::instance()->save();
+            AccountManager::instance()->save(false); // don't save credentials, they had not been loaded from keychain
         }
         return r;
     }

+ 1 - 1
test/stub.cpp

@@ -2,4 +2,4 @@
 #include "accountmanager.h"
 OCC::AccountManager *OCC::AccountManager::instance() { return 0; }
 
-void OCC::AccountManager::save() {  }
+void OCC::AccountManager::save(bool saveCredentials) { Q_UNUSED(saveCredentials); }