File indexing completed on 2024-05-12 05:06:12
0001 /* 0002 SPDX-FileCopyrightText: 2021 Igor Bugaev <freedbrt@gmail.com> 0003 SPDX-FileCopyrightText: 2022 Dawid Wróbel <me@dawidwrobel.com> 0004 SPDX-License-Identifier: BSD-3-Clause 0005 */ 0006 0007 #include <QDebug> 0008 #include <QEventLoop> 0009 0010 #include "kmmkeychain.h" 0011 0012 KMMKeychain::KMMKeychain(QObject* parent) 0013 : QObject(parent) 0014 , m_readCredentialJob(QLatin1String("org.kde.kmymoney")) 0015 , m_writeCredentialJob(QLatin1String("org.kde.kmymoney")) 0016 , m_deleteCredentialJob(QLatin1String("org.kde.kmymoney")) 0017 { 0018 m_readCredentialJob.setAutoDelete(false); 0019 m_writeCredentialJob.setAutoDelete(false); 0020 m_deleteCredentialJob.setAutoDelete(false); 0021 } 0022 0023 void KMMKeychain::readKey(const QString& key) 0024 { 0025 m_readCredentialJob.setKey(key); 0026 0027 QObject::connect(&m_readCredentialJob, &QKeychain::ReadPasswordJob::finished, this, [=]() { 0028 if (m_readCredentialJob.error()) { 0029 auto errorMessage = 0030 QString("%1/%2 key read failed: %2").arg(m_readCredentialJob.service(), m_readCredentialJob.key(), m_readCredentialJob.errorString()); 0031 0032 qDebug() << errorMessage; 0033 Q_EMIT error(errorMessage); 0034 } else { 0035 qDebug() << QString("%1/%2 key read succeeded").arg(m_readCredentialJob.service(), m_readCredentialJob.key()); 0036 Q_EMIT keyRestored(key, m_readCredentialJob.textData()); 0037 } 0038 }); 0039 0040 m_readCredentialJob.start(); 0041 } 0042 0043 QString KMMKeychain::readKeySynchronous(const QString& key) 0044 { 0045 QString value = QString(""); 0046 0047 QEventLoop loop; 0048 connect(this, &KMMKeychain::keyRestored, this, [&](const QString, const QString textData) { 0049 value = textData; 0050 }); 0051 connect(this, &KMMKeychain::error, &loop, &QEventLoop::quit); 0052 connect(this, &KMMKeychain::keyRestored, &loop, &QEventLoop::quit); 0053 0054 readKey(key); 0055 loop.exec(); 0056 0057 return value; 0058 } 0059 0060 void KMMKeychain::writeKey(const QString& key, const QString& value) 0061 { 0062 m_writeCredentialJob.setKey(key); 0063 0064 QObject::connect(&m_writeCredentialJob, &QKeychain::WritePasswordJob::finished, this, [=]() { 0065 if (m_writeCredentialJob.error()) { 0066 auto errorMessage = 0067 QString("%1/%2 key write failed: %2").arg(m_writeCredentialJob.service(), m_writeCredentialJob.key(), m_writeCredentialJob.errorString()); 0068 0069 qDebug() << errorMessage; 0070 Q_EMIT error(errorMessage); 0071 } else { 0072 Q_EMIT keyStored(key); 0073 } 0074 }); 0075 0076 m_writeCredentialJob.setTextData(value); 0077 m_writeCredentialJob.start(); 0078 } 0079 0080 void KMMKeychain::deleteKey(const QString& key) 0081 { 0082 m_deleteCredentialJob.setKey(key); 0083 0084 QObject::connect(&m_deleteCredentialJob, &QKeychain::DeletePasswordJob::finished, this, [=]() { 0085 if (m_deleteCredentialJob.error()) { 0086 auto errorMessage = 0087 QString("%1/%2 key delete failed: %2").arg(m_deleteCredentialJob.service(), m_deleteCredentialJob.key(), m_deleteCredentialJob.errorString()); 0088 0089 qDebug() << errorMessage; 0090 Q_EMIT error(errorMessage); 0091 } else { 0092 Q_EMIT keyDeleted(key); 0093 } 0094 }); 0095 0096 m_deleteCredentialJob.start(); 0097 }