diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-11-22 18:00:02 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-01-24 12:06:32 +0000 |
commit | eb2076b5e3ac9cdbe05342da60a18760440b52c7 (patch) | |
tree | 6df2f3f2587fb74601327c9391cfe11bc420f443 /src/core/client_cert_select_controller.cpp | |
parent | be0fb77baf98f773928b4ff9d08a13c83f189564 (diff) |
Add support for client-certificate selection to QML
Task-number: QTBUG-69363
Change-Id: I54d1df17d82bf2297f43762b0ba86a080bafee23
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'src/core/client_cert_select_controller.cpp')
-rw-r--r-- | src/core/client_cert_select_controller.cpp | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/src/core/client_cert_select_controller.cpp b/src/core/client_cert_select_controller.cpp index 7d08d57c1..580dae826 100644 --- a/src/core/client_cert_select_controller.cpp +++ b/src/core/client_cert_select_controller.cpp @@ -76,17 +76,40 @@ ClientCertSelectController::~ClientCertSelectController() void ClientCertSelectController::selectNone() { if (m_selected) { - qWarning() << "ClientCertSelectController::selectNone() certicate already selected"; + qWarning() << "ClientCertSelectController::selectNone() certificate already selected"; return; } m_selected = true; m_delegate->ContinueWithCertificate(nullptr, nullptr); } +void ClientCertSelectController::select(int index) +{ + if (m_selected) { + qWarning() << "ClientCertSelectController::select() certificate already selected"; + return; + } + for (auto &certInfo : m_clientCerts) { + if (index == 0) { + m_selected = true; + scoped_refptr<net::X509Certificate> cert = certInfo->certificate(); + net::ClientCertIdentity::SelfOwningAcquirePrivateKey( + std::move(certInfo), + base::Bind(&content::ClientCertificateDelegate::ContinueWithCertificate, + base::Passed(std::move(m_delegate)), std::move(cert))); + return; + } + std::vector<std::string> pem_encoded; + if (certInfo->certificate()->GetPEMEncodedChain(&pem_encoded)) + --index; + } + qWarning() << "ClientCertSelectController::select() index out of range:" << index; +} + void ClientCertSelectController::select(const QSslCertificate &certificate) { if (m_selected) { - qWarning() << "ClientCertSelectController::select() certicate already selected"; + qWarning() << "ClientCertSelectController::select() certificate already selected"; return; } QByteArray derCertificate = certificate.toDer(); @@ -109,13 +132,14 @@ void ClientCertSelectController::select(const QSslCertificate &certificate) QVector<QSslCertificate> ClientCertSelectController::certificates() const { - QVector<QSslCertificate> out; + if (!m_certificates.isEmpty()) + return m_certificates; for (auto &cert : m_clientCerts) { std::vector<std::string> pem_encoded; if (cert->certificate()->GetPEMEncodedChain(&pem_encoded)) - out.append(QSslCertificate(QByteArray::fromStdString(pem_encoded.front()))); + m_certificates.append(QSslCertificate(QByteArray::fromStdString(pem_encoded.front()))); } - return out; + return m_certificates; } #endif // !defined(QT_NO_SSL) || QT_VERSION >= QT_VERSION_CHECK(5, 12, 0) |