diff options
| author | Melvin Keskin <melvo@olomono.de> | 2021-09-17 01:35:59 +0200 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2021-09-25 15:50:45 +0200 |
| commit | d071f033c8298fb159eb8f2fb24462e4d0371dc4 (patch) | |
| tree | 2218e7f22773447a5605325820e631bbff5c4364 | |
| parent | ceff219b2b7fec21a5feac0b9606a2ebad8c4822 (diff) | |
| download | qxmpp-d071f033c8298fb159eb8f2fb24462e4d0371dc4.tar.gz | |
TrustMemoryStorage: Add security policies
| -rw-r--r-- | src/client/QXmppTrustMemoryStorage.cpp | 21 | ||||
| -rw-r--r-- | src/client/QXmppTrustMemoryStorage.h | 3 | ||||
| -rw-r--r-- | tests/qxmpptrustmemorystorage/tst_qxmpptrustmemorystorage.cpp | 36 |
3 files changed, 60 insertions, 0 deletions
diff --git a/src/client/QXmppTrustMemoryStorage.cpp b/src/client/QXmppTrustMemoryStorage.cpp index 1d9d1909..c6d80179 100644 --- a/src/client/QXmppTrustMemoryStorage.cpp +++ b/src/client/QXmppTrustMemoryStorage.cpp @@ -72,6 +72,9 @@ struct UnprocessedKey class QXmppTrustMemoryStoragePrivate { public: + // encryption protocols mapped to security policies + QMap<QString, QXmppTrustStorage::SecurityPolicy> securityPolicies; + // encryption protocols mapped to keys of this client instance QMap<QString, QString> ownKeys; @@ -94,6 +97,24 @@ QXmppTrustMemoryStorage::QXmppTrustMemoryStorage() QXmppTrustMemoryStorage::~QXmppTrustMemoryStorage() = default; /// \cond +QFuture<void> QXmppTrustMemoryStorage::setSecurityPolicies(const QString &encryption, const QXmppTrustStorage::SecurityPolicy securityPolicy) +{ + if (encryption.isEmpty()) { + d->securityPolicies.clear(); + } else if (securityPolicy == QXmppTrustStorage::NoSecurityPolicy) { + d->securityPolicies.remove(encryption); + } else { + d->securityPolicies.insert(encryption, securityPolicy); + } + + return makeReadyFuture(); +} + +QFuture<QXmppTrustStorage::SecurityPolicy> QXmppTrustMemoryStorage::securityPolicy(const QString &encryption) +{ + return makeReadyFuture(std::move(d->securityPolicies.value(encryption))); +} + QFuture<void> QXmppTrustMemoryStorage::addOwnKey(const QString &encryption, const QString &keyId) { d->ownKeys.insert(encryption, keyId); diff --git a/src/client/QXmppTrustMemoryStorage.h b/src/client/QXmppTrustMemoryStorage.h index 6c1eb668..eecbaa33 100644 --- a/src/client/QXmppTrustMemoryStorage.h +++ b/src/client/QXmppTrustMemoryStorage.h @@ -38,6 +38,9 @@ public: ~QXmppTrustMemoryStorage(); /// \cond + QFuture<void> setSecurityPolicies(const QString &encryption = {}, SecurityPolicy securityPolicy = QXmppTrustStorage::NoSecurityPolicy) override; + QFuture<SecurityPolicy> securityPolicy(const QString &encryption) override; + QFuture<void> addOwnKey(const QString &encryption, const QString &keyId) override; QFuture<void> removeOwnKey(const QString &encryption) override; QFuture<QString> ownKey(const QString &encryption) const override; diff --git a/tests/qxmpptrustmemorystorage/tst_qxmpptrustmemorystorage.cpp b/tests/qxmpptrustmemorystorage/tst_qxmpptrustmemorystorage.cpp index 63932f07..9d803752 100644 --- a/tests/qxmpptrustmemorystorage/tst_qxmpptrustmemorystorage.cpp +++ b/tests/qxmpptrustmemorystorage/tst_qxmpptrustmemorystorage.cpp @@ -33,6 +33,7 @@ class tst_QXmppTrustMemoryStorage : public QObject Q_OBJECT private slots: + void testSecurityPolicies(); void testOwnKeys(); void testKeys(); void testTrustLevels(); @@ -42,6 +43,41 @@ private: QXmppTrustMemoryStorage m_trustStorage; }; +void tst_QXmppTrustMemoryStorage::testSecurityPolicies() +{ + auto future = m_trustStorage.securityPolicy(ns_ox); + QVERIFY(future.isFinished()); + auto result = future.result(); + QCOMPARE(result, QXmppTrustStorage::NoSecurityPolicy); + + m_trustStorage.setSecurityPolicies(ns_ox, QXmppTrustStorage::Toakafa); + m_trustStorage.setSecurityPolicies(ns_omemo, QXmppTrustStorage::Toakafa); + + future = m_trustStorage.securityPolicy(ns_ox); + QVERIFY(future.isFinished()); + result = future.result(); + QCOMPARE(result, QXmppTrustStorage::Toakafa); + + future = m_trustStorage.securityPolicy(ns_omemo); + QVERIFY(future.isFinished()); + result = future.result(); + QCOMPARE(result, QXmppTrustStorage::Toakafa); + + m_trustStorage.setSecurityPolicies(ns_ox); + + future = m_trustStorage.securityPolicy(ns_ox); + QVERIFY(future.isFinished()); + result = future.result(); + QCOMPARE(result, QXmppTrustStorage::NoSecurityPolicy); + + m_trustStorage.setSecurityPolicies(); + + future = m_trustStorage.securityPolicy(ns_omemo); + QVERIFY(future.isFinished()); + result = future.result(); + QCOMPARE(result, QXmppTrustStorage::NoSecurityPolicy); +} + void tst_QXmppTrustMemoryStorage::testOwnKeys() { m_trustStorage.addOwnKey(ns_ox, QStringLiteral("6850019d7ed0feb6d3823072498ceb4f616c6025586f8f666dc6b9c81ef7e0a4")); |
