Files
qt-creator/src/plugins/axivion/credentialquery.cpp
Jarek Kobus 5b48d23a0a Axivion: Fix CredentialOperation::Get
Don't report an error on non-existing key read.
Finish with success and provide empty optional data in this case.

Change-Id: I7c4ea50c0f05e13ce793384ec57d50dfff600c9a
Reviewed-by: hjk <hjk@qt.io>
2024-02-19 18:44:32 +00:00

54 lines
1.5 KiB
C++

// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "credentialquery.h"
#include <qtkeychain/keychain.h>
using namespace QKeychain;
using namespace Tasking;
namespace Axivion::Internal {
CredentialQueryTaskAdapter::~CredentialQueryTaskAdapter() = default;
void CredentialQueryTaskAdapter::start()
{
Job *job = nullptr;
ReadPasswordJob *reader = nullptr;
switch (task()->m_operation) {
case CredentialOperation::Get: {
job = reader = new ReadPasswordJob(task()->m_service);
break;
}
case CredentialOperation::Set: {
WritePasswordJob *writer = new WritePasswordJob(task()->m_service);
if (task()->m_data)
writer->setBinaryData(*task()->m_data);
job = writer;
break;
}
case CredentialOperation::Delete:
job = new DeletePasswordJob(task()->m_service);
break;
}
job->setAutoDelete(false);
job->setKey(task()->m_key);
m_guard.reset(job);
connect(job, &Job::finished, this, [this, reader](Job *job) {
const bool success = job->error() == NoError || job->error() == EntryNotFound;
if (!success)
task()->m_errorString = job->errorString();
else if (reader && job->error() == NoError)
task()->m_data = reader->binaryData();
emit done(toDoneResult(success));
m_guard.release()->deleteLater();
});
job->start();
}
} // Axivion::Internal