diff --git a/manifest b/manifest index 20fa945..349979a 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fixed\sQt\sruntime\swarning\scaused\sby\sautomatic\ssingals -D 2015-07-23T18:04:18.950 +C -\sKeychain\sdata\sis\snow\sstored\swithin\sa\ssettings\sgroup\son\sWindows\n-\sDo\snot\sattempt\smake\sFossil's\sdefault\surl\sthe\sdefault\sif\sone\sexists\salready\n +D 2015-07-23T18:46:47.815 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -226,7 +226,7 @@ F src/FslSettingsDialog.cpp 2531d3709f0eab66651671e3edead2ca720d07d5 F src/FslSettingsDialog.h dfe2a61884a55a74cbb9206b6f6b482b979725e7 F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 70decdfee231618e4abbd60c06f89965dd228165 +F src/MainWindow.cpp 18b42607bf9d87615f96df9bb320e6dcefbb480b F src/MainWindow.h c4518a0ba8d5ba2a128449bd8a50adff8402049d F src/RemoteDialog.cpp 8540cc5e2e41c4127ed8a028d84691604fa6ecac F src/RemoteDialog.h 5e0438c2bd7c79b1bb44bfbd58c2181b544a9e5d @@ -238,9 +238,9 @@ F src/Settings.cpp 258d3f466f6a125ce2b8519d6d57a312cbc44a3f F src/Settings.h 0a10b0b83fe804bdc7dac58eed06b5b6ee422055 F src/SettingsDialog.cpp 55fac64ae4f779c01c6e18911fe97c55fd396939 F src/SettingsDialog.h 5eb3ae2cbb00ab5544e1889860f5376f69fe47cd -F src/Utils.cpp 6d9a08603f40fff3cb237259ecc6b1e534472d8f -F src/Utils.h aa7a91ef3b4b9b0d873b2c9675403bbe928892bc -F src/Workspace.cpp ae92217f5f7625375440151a804748547ddc8de4 +F src/Utils.cpp 567bf2ba68ee0d6fbad39000fcecd1aaa04168b8 +F src/Utils.h c6341ee49a8fc35f215facb196d70bf9b1f2fc0f +F src/Workspace.cpp 8bcbfcda28f3ae8244c29b5f2b6e6eae171bf6ca F src/Workspace.h 842c195cf830422f2066c7190156e7c8b82a93a1 F src/main.cpp d8c65ea5e54102e4989fef9fd8cfd4f13ef8a8f0 F tools/git-push.sh 62cc58434cae5b7bcd6bd9d4cce8b08739f31cd7 x @@ -254,7 +254,7 @@ F ui/MainWindow.ui 10181826a25056ed5aba2b23a7d110159be7c043 F ui/RemoteDialog.ui 95a4750d972ed8c49bb10b95db91ff16cfe2dd0b F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd F ui/SettingsDialog.ui 47b9a31e28ad523f14a1c4cd361270b6babbdf7d -P 51d26d1e0912e6da939e9a48f0357847acd1501a -R d1dbf4f92c90f8a90e2f7898e933a55c +P 193d2c862c9eda6235b4360da1130411ee619766 +R 5066466164c7d0d064b5a51cfc4a7452 U kostas -Z 4b21b92c6fa99b4f079e970f5db5f61b +Z a76cf33fddd0a4e353d5d7d4755686c5 diff --git a/manifest.uuid b/manifest.uuid index c1673b6..a9c6cc5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -193d2c862c9eda6235b4360da1130411ee619766 \ No newline at end of file +15f5fde7bf2f69a76b9f8b1e1a7a0530856210bc \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index c0cdc81..8692d39 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -554,9 +554,9 @@ void MainWindow::on_actionCloneRepository_triggered() // Store credentials if(!url.isLocalFile()) { - KeychainDelete(this, url); + KeychainDelete(this, url, *settings.GetStore()); - if(!KeychainSet(this, url)) + if(!KeychainSet(this, url, *settings.GetStore())) QMessageBox::critical(this, tr("Error"), tr("Could not store information to keychain."), QMessageBox::Ok ); } @@ -2639,7 +2639,7 @@ void MainWindow::on_actionEditRemote_triggered() if(remote) name = remote->name; - bool exists = KeychainGet(this, old_url); + bool exists = KeychainGet(this, old_url, *settings.GetStore()); QUrl new_url = old_url; if(!RemoteDialog::run(this, new_url, name)) @@ -2648,9 +2648,9 @@ void MainWindow::on_actionEditRemote_triggered() if(!new_url.isLocalFile()) { if(exists) - KeychainDelete(this, new_url); + KeychainDelete(this, new_url, *settings.GetStore()); - if(!KeychainSet(this, new_url)) + if(!KeychainSet(this, new_url, *settings.GetStore())) QMessageBox::critical(this, tr("Error"), tr("Could not store information to keychain."), QMessageBox::Ok ); } @@ -2681,7 +2681,7 @@ void MainWindow::on_actionPushRemote_triggered() // Retrieve password from keychain if(!url.isLocalFile()) - KeychainGet(this, url); + KeychainGet(this, url, *settings.GetStore()); fossil().pushRepository(url); } @@ -2698,7 +2698,7 @@ void MainWindow::on_actionPullRemote_triggered() // Retrieve password from keychain if(!url.isLocalFile()) - KeychainGet(this, url); + KeychainGet(this, url, *settings.GetStore()); fossil().pullRepository(url); } @@ -2716,7 +2716,7 @@ void MainWindow::on_actionPush_triggered() // Retrieve password from keychain if(!url.isLocalFile()) - KeychainGet(this, url); + KeychainGet(this, url, *settings.GetStore()); fossil().pushRepository(url); } @@ -2734,7 +2734,7 @@ void MainWindow::on_actionPull_triggered() // Retrieve password from keychain if(!url.isLocalFile()) - KeychainGet(this, url); + KeychainGet(this, url, *settings.GetStore()); fossil().pullRepository(url); } @@ -2763,9 +2763,9 @@ void MainWindow::on_actionAddRemote_triggered() if(!url.isLocalFile()) { - KeychainDelete(this, url); + KeychainDelete(this, url, *settings.GetStore()); - if(!KeychainSet(this, url)) + if(!KeychainSet(this, url, *settings.GetStore())) QMessageBox::critical(this, tr("Error"), tr("Could not store information to keychain."), QMessageBox::Ok ); } diff --git a/src/Utils.cpp b/src/Utils.cpp index 0e9455d..d18dca6 100644 --- a/src/Utils.cpp +++ b/src/Utils.cpp @@ -396,10 +396,16 @@ void BuildNameToModelIndex(name_modelindex_map_t &map, const QStandardItemModel } //------------------------------------------------------------------------------ -bool KeychainSet(QObject *parent, const QUrl &url) +bool KeychainSet(QObject *parent, const QUrl &url, QSettings &settings) { QEventLoop loop(parent); QKeychain::WritePasswordJob job(UrlToStringNoCredentials(url)); + +#ifdef Q_OS_WIN + settings.beginGroup("Keychain"); + job.setSettings(&settings); +#endif + job.connect( &job, SIGNAL(finished(QKeychain::Job*)), &loop, SLOT(quit()) ); job.setAutoDelete( false ); job.setInsecureFallback(false); @@ -407,14 +413,25 @@ bool KeychainSet(QObject *parent, const QUrl &url) job.setTextData(url.password()); job.start(); loop.exec(); + +#ifdef Q_OS_WIN + settings.endGroup(); +#endif + return job.error() == QKeychain::NoError; } //------------------------------------------------------------------------------ -bool KeychainGet(QObject *parent, QUrl &url) +bool KeychainGet(QObject *parent, QUrl &url, QSettings &settings) { QEventLoop loop(parent); QKeychain::ReadPasswordJob job(UrlToStringNoCredentials(url)); + +#ifdef Q_OS_WIN + settings.beginGroup("Keychain"); + job.setSettings(&settings); +#endif + job.connect( &job, SIGNAL(finished(QKeychain::Job*)), &loop, SLOT(quit())); job.setAutoDelete( false ); job.setInsecureFallback(false); @@ -423,6 +440,10 @@ bool KeychainGet(QObject *parent, QUrl &url) job.start(); loop.exec(); +#ifdef Q_OS_WIN + settings.endGroup(); +#endif + if(job.error() != QKeychain::NoError) return false; @@ -432,10 +453,16 @@ bool KeychainGet(QObject *parent, QUrl &url) } //------------------------------------------------------------------------------ -bool KeychainDelete(QObject* parent, const QUrl& url) +bool KeychainDelete(QObject* parent, const QUrl& url, QSettings &settings) { QEventLoop loop(parent); QKeychain::DeletePasswordJob job(UrlToStringNoCredentials(url)); + +#ifdef Q_OS_WIN + settings.beginGroup("Keychain"); + job.setSettings(&settings); +#endif + job.connect( &job, SIGNAL(finished(QKeychain::Job*)), &loop, SLOT(quit())); job.setAutoDelete( false ); job.setInsecureFallback(false); @@ -444,6 +471,10 @@ bool KeychainDelete(QObject* parent, const QUrl& url) job.start(); loop.exec(); +#ifdef Q_OS_WIN + settings.endGroup(); +#endif + return job.error() == QKeychain::NoError; } diff --git a/src/Utils.h b/src/Utils.h index 04c6ee5..2a92ad8 100644 --- a/src/Utils.h +++ b/src/Utils.h @@ -6,6 +6,7 @@ #include #include #include +#include #define COUNTOF(array) (sizeof(array)/sizeof(array[0])) #define FOSSIL_CHECKOUT1 "_FOSSIL_" @@ -55,9 +56,9 @@ typedef QMap name_modelindex_map_t; void GetStandardItemTextRecursive(QString &name, const QStandardItem &item, const QChar &separator='/'); void BuildNameToModelIndex(name_modelindex_map_t &map, const QStandardItem &item); void BuildNameToModelIndex(name_modelindex_map_t &map, const QStandardItemModel &model); -bool KeychainSet(QObject* parent, const QUrl& url); -bool KeychainGet(QObject* parent, QUrl& url); -bool KeychainDelete(QObject* parent, const QUrl& url); +bool KeychainSet(QObject* parent, const QUrl& url, QSettings &settings); +bool KeychainGet(QObject* parent, QUrl& url, QSettings &settings); +bool KeychainDelete(QObject* parent, const QUrl& url, QSettings &settings); QString HashString(const QString &str); QString UrlToStringDisplay(const QUrl &url); QString UrlToStringNoCredentials(const QUrl& url); diff --git a/src/Workspace.cpp b/src/Workspace.cpp index 6aac17c..071ee10 100644 --- a/src/Workspace.cpp +++ b/src/Workspace.cpp @@ -109,7 +109,8 @@ bool Workspace::switchWorkspace(const QString& workspace, QSettings &store) if(findRemote(default_remote)==NULL) { addRemote(default_remote, UrlToStringDisplay(default_remote)); - setRemoteDefault(default_remote); + if(getRemoteDefault().isEmpty()) + setRemoteDefault(default_remote); } }