Fix windows even more
This commit is contained in:
parent
61e19f601b
commit
6f567175b9
@ -436,6 +436,19 @@ void Sync::clearSettings()
|
|||||||
Q_EMIT syncProgressChanged();
|
Q_EMIT syncProgressChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Sync::onWritePasswordJobFinished(QKeychain::WritePasswordJob *job, const QString &username, const QString &password)
|
||||||
|
{
|
||||||
|
if (job->error()) {
|
||||||
|
qCDebug(kastsSync) << "Could not save password to the keychain: " << qPrintable(job->errorString());
|
||||||
|
// fall back to file
|
||||||
|
savePasswordToFile(username, password);
|
||||||
|
} else {
|
||||||
|
qCDebug(kastsSync) << "Password saved to keychain";
|
||||||
|
Q_EMIT passwordSaveFinished(true);
|
||||||
|
}
|
||||||
|
job->deleteLater();
|
||||||
|
}
|
||||||
|
|
||||||
void Sync::savePasswordToKeyChain(const QString &username, const QString &password)
|
void Sync::savePasswordToKeyChain(const QString &username, const QString &password)
|
||||||
{
|
{
|
||||||
qCDebug(kastsSync) << "Save the password to the keychain for" << username;
|
qCDebug(kastsSync) << "Save the password to the keychain for" << username;
|
||||||
@ -446,16 +459,8 @@ void Sync::savePasswordToKeyChain(const QString &username, const QString &passwo
|
|||||||
job->setKey(username);
|
job->setKey(username);
|
||||||
job->setTextData(password);
|
job->setTextData(password);
|
||||||
|
|
||||||
QKeychain::WritePasswordJob::connect(job, &QKeychain::Job::finished, this, [=]() {
|
QKeychain::WritePasswordJob::connect(job, &QKeychain::Job::finished, this, [this, username, password, job]() {
|
||||||
if (job->error()) {
|
onWritePasswordJobFinished(job, username, password);
|
||||||
qCDebug(kastsSync) << "Could not save password to the keychain: " << qPrintable(job->errorString());
|
|
||||||
// fall back to file
|
|
||||||
savePasswordToFile(username, password);
|
|
||||||
} else {
|
|
||||||
qCDebug(kastsSync) << "Password saved to keychain";
|
|
||||||
Q_EMIT passwordSaveFinished(true);
|
|
||||||
}
|
|
||||||
job->deleteLater();
|
|
||||||
});
|
});
|
||||||
job->start();
|
job->start();
|
||||||
#endif
|
#endif
|
||||||
@ -566,58 +571,66 @@ QString Sync::retrievePasswordFromFile(const QString &username)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Sync::onDeleteJobFinished(QKeychain::DeletePasswordJob *deleteJob, const QString &username)
|
||||||
|
{
|
||||||
|
if (deleteJob->error() == QKeychain::Error::NoError) {
|
||||||
|
qCDebug(kastsSync) << "Password for username" << username << "successfully deleted from keychain";
|
||||||
|
|
||||||
|
// now also delete the dummy entry
|
||||||
|
QKeychain::DeletePasswordJob *deleteDummyJob = new QKeychain::DeletePasswordJob(qAppName());
|
||||||
|
deleteDummyJob->setAutoDelete(true);
|
||||||
|
deleteDummyJob->setKey(QStringLiteral("dummy"));
|
||||||
|
|
||||||
|
QKeychain::DeletePasswordJob::connect(deleteDummyJob, &QKeychain::Job::finished, this, [=]() {
|
||||||
|
if (deleteDummyJob->error()) {
|
||||||
|
qCDebug(kastsSync) << "Deleting dummy from keychain unsuccessful";
|
||||||
|
} else {
|
||||||
|
qCDebug(kastsSync) << "Deleting dummy from keychain successful";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
deleteDummyJob->start();
|
||||||
|
} else if (deleteJob->error() == QKeychain::Error::EntryNotFound) {
|
||||||
|
qCDebug(kastsSync) << "No password for username" << username << "found in keychain";
|
||||||
|
} else {
|
||||||
|
qCDebug(kastsSync) << "Could not access keychain to delete password for username" << username;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Sync::onWriteDummyJobFinished(QKeychain::WritePasswordJob *writeDummyJob, const QString &username)
|
||||||
|
{
|
||||||
|
if (writeDummyJob->error()) {
|
||||||
|
qCDebug(kastsSync) << "Could not open keychain: " << qPrintable(writeDummyJob->errorString());
|
||||||
|
} else {
|
||||||
|
// opening keychain succeeded, let's try to delete the password
|
||||||
|
|
||||||
|
QFile(StorageManager::instance().passwordFilePath(username)).remove();
|
||||||
|
|
||||||
|
QKeychain::DeletePasswordJob *deleteJob = new QKeychain::DeletePasswordJob(qAppName());
|
||||||
|
deleteJob->setAutoDelete(true);
|
||||||
|
deleteJob->setKey(username);
|
||||||
|
|
||||||
|
QKeychain::DeletePasswordJob::connect(deleteJob, &QKeychain::Job::finished, this, [this, deleteJob, username]() {
|
||||||
|
onDeleteJobFinished(deleteJob, username);
|
||||||
|
});
|
||||||
|
deleteJob->start();
|
||||||
|
}
|
||||||
|
writeDummyJob->deleteLater();
|
||||||
|
}
|
||||||
|
|
||||||
void Sync::deletePasswordFromKeychain(const QString &username)
|
void Sync::deletePasswordFromKeychain(const QString &username)
|
||||||
{
|
{
|
||||||
// Workaround: first try and store a dummy entry to the keychain to ensure
|
// Workaround: first try and store a dummy entry to the keychain to ensure
|
||||||
// that the keychain is unlocked before we try to delete the real password
|
// that the keychain is unlocked before we try to delete the real password
|
||||||
|
|
||||||
#ifndef Q_OS_WINDOWS
|
|
||||||
QKeychain::WritePasswordJob *writeDummyJob = new QKeychain::WritePasswordJob(qAppName(), this);
|
QKeychain::WritePasswordJob *writeDummyJob = new QKeychain::WritePasswordJob(qAppName(), this);
|
||||||
writeDummyJob->setAutoDelete(false);
|
writeDummyJob->setAutoDelete(false);
|
||||||
writeDummyJob->setKey(QStringLiteral("dummy"));
|
writeDummyJob->setKey(QStringLiteral("dummy"));
|
||||||
writeDummyJob->setTextData(QStringLiteral("dummy"));
|
writeDummyJob->setTextData(QStringLiteral("dummy"));
|
||||||
|
|
||||||
QKeychain::WritePasswordJob::connect(writeDummyJob, &QKeychain::Job::finished, this, [=]() {
|
QKeychain::WritePasswordJob::connect(writeDummyJob, &QKeychain::Job::finished, this, [this, writeDummyJob, username]() {
|
||||||
if (writeDummyJob->error()) {
|
onWriteDummyJobFinished(writeDummyJob, username);
|
||||||
qCDebug(kastsSync) << "Could not open keychain: " << qPrintable(writeDummyJob->errorString());
|
|
||||||
} else {
|
|
||||||
// opening keychain succeeded, let's try to delete the password
|
|
||||||
|
|
||||||
QFile(StorageManager::instance().passwordFilePath(username)).remove();
|
|
||||||
|
|
||||||
QKeychain::DeletePasswordJob *deleteJob = new QKeychain::DeletePasswordJob(qAppName());
|
|
||||||
deleteJob->setAutoDelete(true);
|
|
||||||
deleteJob->setKey(username);
|
|
||||||
|
|
||||||
QKeychain::DeletePasswordJob::connect(deleteJob, &QKeychain::Job::finished, this, [=]() {
|
|
||||||
if (deleteJob->error() == QKeychain::Error::NoError) {
|
|
||||||
qCDebug(kastsSync) << "Password for username" << username << "successfully deleted from keychain";
|
|
||||||
|
|
||||||
// now also delete the dummy entry
|
|
||||||
QKeychain::DeletePasswordJob *deleteDummyJob = new QKeychain::DeletePasswordJob(qAppName());
|
|
||||||
deleteDummyJob->setAutoDelete(true);
|
|
||||||
deleteDummyJob->setKey(QStringLiteral("dummy"));
|
|
||||||
|
|
||||||
QKeychain::DeletePasswordJob::connect(deleteDummyJob, &QKeychain::Job::finished, this, [=]() {
|
|
||||||
if (deleteDummyJob->error()) {
|
|
||||||
qCDebug(kastsSync) << "Deleting dummy from keychain unsuccessful";
|
|
||||||
} else {
|
|
||||||
qCDebug(kastsSync) << "Deleting dummy from keychain successful";
|
|
||||||
}
|
|
||||||
});
|
|
||||||
deleteDummyJob->start();
|
|
||||||
} else if (deleteJob->error() == QKeychain::Error::EntryNotFound) {
|
|
||||||
qCDebug(kastsSync) << "No password for username" << username << "found in keychain";
|
|
||||||
} else {
|
|
||||||
qCDebug(kastsSync) << "Could not access keychain to delete password for username" << username;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
deleteJob->start();
|
|
||||||
}
|
|
||||||
writeDummyJob->deleteLater();
|
|
||||||
});
|
});
|
||||||
writeDummyJob->start();
|
writeDummyJob->start();
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sync::registerNewDevice(const QString &id, const QString &caption, const QString &type)
|
void Sync::registerNewDevice(const QString &id, const QString &caption, const QString &type)
|
||||||
|
@ -14,6 +14,12 @@
|
|||||||
#include "error.h"
|
#include "error.h"
|
||||||
#include "sync/syncutils.h"
|
#include "sync/syncutils.h"
|
||||||
|
|
||||||
|
namespace QKeychain
|
||||||
|
{
|
||||||
|
class WritePasswordJob;
|
||||||
|
class DeletePasswordJob;
|
||||||
|
}
|
||||||
|
|
||||||
class GPodder;
|
class GPodder;
|
||||||
|
|
||||||
class Sync : public QObject
|
class Sync : public QObject
|
||||||
@ -119,6 +125,9 @@ private:
|
|||||||
void deletePasswordFromKeychain(const QString &username);
|
void deletePasswordFromKeychain(const QString &username);
|
||||||
|
|
||||||
void retrieveAllLocalEpisodeStates();
|
void retrieveAllLocalEpisodeStates();
|
||||||
|
void onWriteDummyJobFinished(QKeychain::WritePasswordJob *writeDummyJob, const QString &username);
|
||||||
|
void onWritePasswordJobFinished(QKeychain::WritePasswordJob *job, const QString &username, const QString &password);
|
||||||
|
void onDeleteJobFinished(QKeychain::DeletePasswordJob *deleteJob, const QString &username);
|
||||||
|
|
||||||
GPodder *m_gpodder = nullptr;
|
GPodder *m_gpodder = nullptr;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user