[network/ruqola] src/rocketchatrestapi-qt: Extract info in encryptedinfo
Laurent Montel <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git commit 8d21937e3392047388347bd56c912fc95ca9a409 by Laurent Montel.
Committed on 06/08/2026 at 11:27.
Pushed by mlaurent into branch 'master'.
Extract info in encryptedinfo
M +9 -3 src/rocketchatrestapi-qt/autotests/sendmessagejobtest.cpp
A +25 -0 src/rocketchatrestapi-qt/chat/encryptedinfo.cpp [License: LGPL(v2.0+)]
A +23 -0 src/rocketchatrestapi-qt/chat/encryptedinfo.h [License: LGPL(v2.0+)]
M +16 -1 src/rocketchatrestapi-qt/chat/postmessagejob.cpp
M +5 -0 src/rocketchatrestapi-qt/chat/postmessagejob.h
M +1 -11 src/rocketchatrestapi-qt/chat/sendmessagejob.cpp
M +1 -11 src/rocketchatrestapi-qt/chat/sendmessagejob.h
https://invent.kde.org/network/ruqola/-/commit/8d21937e3392047388347bd56c912fc95ca9a409
diff --git a/src/rocketchatrestapi-qt/autotests/sendmessagejobtest.cpp b/src/rocketchatrestapi-qt/autotests/sendmessagejobtest.cpp
index 1baf6dfd50..966dcc85e1 100644
--- a/src/rocketchatrestapi-qt/autotests/sendmessagejobtest.cpp
+++ b/src/rocketchatrestapi-qt/autotests/sendmessagejobtest.cpp
@@ -31,7 +31,7 @@ void SendMessageJobTest::shouldHaveDefaultValue()
QVERIFY(args.message.isEmpty());
QVERIFY(args.threadMessageId.isEmpty());
QVERIFY(args.messageId.isEmpty());
- QVERIFY(!args.encrypted);
+ QVERIFY(!args.info.isValid());
QVERIFY(!job.hasQueryParameterSupport());
}
@@ -75,10 +75,16 @@ void SendMessageJobTest::shouldGenerateJsonEncrypted()
const QString text = u"topic1"_s;
SendMessageJob::SendMessageArguments args;
args.roomId = roomId;
- args.encrypted = true;
+ const EncryptedInfo info{
+ .algorithm = "bla",
+ .keyId = "blo",
+ .ciphertext = u"foo"_s,
+ .iv = "kde",
+ };
+ args.info = info;
job.setSendMessageArguments(args);
QCOMPARE(job.json().toJson(QJsonDocument::Compact),
- QStringLiteral(R"({"message":{"content":{"algorithm":"","ciphertext":"","iv":"","kid":""},"rid":"foo1","t":"e2e"}})").toLatin1());
+ QStringLiteral(R"({"message":{"content":{"algorithm":"bla","ciphertext":"foo","iv":"kde","kid":"blo"},"rid":"foo1","t":"e2e"}})").toLatin1());
}
void SendMessageJobTest::shouldNotStarting()
diff --git a/src/rocketchatrestapi-qt/chat/encryptedinfo.cpp b/src/rocketchatrestapi-qt/chat/encryptedinfo.cpp
new file mode 100644
index 0000000000..9673b5faf6
--- /dev/null
+++ b/src/rocketchatrestapi-qt/chat/encryptedinfo.cpp
@@ -0,0 +1,25 @@
+/*
+ SPDX-FileCopyrightText: 2026 Laurent Montel <[email protected]>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "encryptedinfo.h"
+#include <QJsonObject>
+
+using namespace RocketChatRestApi;
+using namespace Qt::Literals::StringLiterals;
+QJsonObject EncryptedInfo::generateJson() const
+{
+ QJsonObject o;
+ o["algorithm"_L1] = QString::fromLatin1(algorithm);
+ o["ciphertext"_L1] = ciphertext;
+ o["iv"_L1] = QString::fromLatin1(iv);
+ o["kid"_L1] = QString::fromLatin1(keyId);
+ return o;
+}
+
+bool EncryptedInfo::isValid() const
+{
+ return !algorithm.isEmpty() && !keyId.isEmpty() && !ciphertext.isEmpty() && !iv.isEmpty();
+}
diff --git a/src/rocketchatrestapi-qt/chat/encryptedinfo.h b/src/rocketchatrestapi-qt/chat/encryptedinfo.h
new file mode 100644
index 0000000000..a09ea5c5ca
--- /dev/null
+++ b/src/rocketchatrestapi-qt/chat/encryptedinfo.h
@@ -0,0 +1,23 @@
+/*
+ SPDX-FileCopyrightText: 2026 Laurent Montel <[email protected]>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#pragma once
+
+#include "librocketchatrestapi-qt_export.h"
+#include <QByteArray>
+#include <QString>
+class QJsonObject;
+namespace RocketChatRestApi
+{
+struct LIBROCKETCHATRESTAPI_QT_EXPORT EncryptedInfo {
+ QByteArray algorithm;
+ QByteArray keyId;
+ QString ciphertext; // TODO QByteArray ?
+ QByteArray iv;
+ [[nodiscard]] QJsonObject generateJson() const;
+ [[nodiscard]] bool isValid() const;
+};
+}
diff --git a/src/rocketchatrestapi-qt/chat/postmessagejob.cpp b/src/rocketchatrestapi-qt/chat/postmessagejob.cpp
index baeae1af02..a7c2d2f9ff 100644
--- a/src/rocketchatrestapi-qt/chat/postmessagejob.cpp
+++ b/src/rocketchatrestapi-qt/chat/postmessagejob.cpp
@@ -53,6 +53,16 @@ void PostMessageJob::onPostRequestResponse(const QString &replyErrorString, cons
}
}
+EncryptedInfo PostMessageJob::encryptedInfo() const
+{
+ return mEncryptedInfo;
+}
+
+void PostMessageJob::setEncryptedInfo(const EncryptedInfo &newEncryptedInfo)
+{
+ mEncryptedInfo = newEncryptedInfo;
+}
+
QNetworkRequest PostMessageJob::request() const
{
const QUrl url = mRestApiMethod->generateUrl(RestApiUtil::RestApiUrlType::ChatPostMessage);
@@ -113,7 +123,12 @@ QJsonDocument PostMessageJob::json() const
}
jsonObj["roomId"_L1] = QJsonArray::fromStringList(lst);
}
- jsonObj["text"_L1] = mText;
+ if (mEncryptedInfo.isValid()) {
+ jsonObj["content"_L1] = mEncryptedInfo.generateJson();
+ jsonObj["t"_L1] = u"e2e"_s;
+ } else {
+ jsonObj["text"_L1] = mText;
+ }
const QJsonDocument postData = QJsonDocument(jsonObj);
// qDebug() << " postData " << postData;
diff --git a/src/rocketchatrestapi-qt/chat/postmessagejob.h b/src/rocketchatrestapi-qt/chat/postmessagejob.h
index 64385033b0..a57ff1cabe 100644
--- a/src/rocketchatrestapi-qt/chat/postmessagejob.h
+++ b/src/rocketchatrestapi-qt/chat/postmessagejob.h
@@ -6,6 +6,7 @@
#pragma once
+#include "encryptedinfo.h"
#include "librocketchatrestapi-qt_export.h"
#include "restapiabstractjob.h"
namespace RocketChatRestApi
@@ -30,6 +31,9 @@ public:
[[nodiscard]] QJsonDocument json() const;
+ [[nodiscard]] EncryptedInfo encryptedInfo() const;
+ void setEncryptedInfo(const EncryptedInfo &newEncryptedInfo);
+
Q_SIGNALS:
void postMessageDone(const QJsonObject &replyObject);
@@ -41,5 +45,6 @@ protected:
private:
QList<QByteArray> mRoomIds;
QString mText;
+ EncryptedInfo mEncryptedInfo;
};
}
diff --git a/src/rocketchatrestapi-qt/chat/sendmessagejob.cpp b/src/rocketchatrestapi-qt/chat/sendmessagejob.cpp
index f5a5a794a2..3b9bda05ab 100644
--- a/src/rocketchatrestapi-qt/chat/sendmessagejob.cpp
+++ b/src/rocketchatrestapi-qt/chat/sendmessagejob.cpp
@@ -97,7 +97,7 @@ QJsonDocument SendMessageJob::json() const
jsonObj["tmid"_L1] = mSendMessageArguments.threadMessageId;
}
jsonObj["rid"_L1] = mSendMessageArguments.roomId;
- if (mSendMessageArguments.encrypted) {
+ if (mSendMessageArguments.info.isValid()) {
jsonObj["content"_L1] = mSendMessageArguments.info.generateJson();
jsonObj["t"_L1] = u"e2e"_s;
} else {
@@ -108,14 +108,4 @@ QJsonDocument SendMessageJob::json() const
return postData;
}
-QJsonObject SendMessageJob::EncryptedInfo::generateJson() const
-{
- QJsonObject o;
- o["algorithm"_L1] = QString::fromLatin1(algorithm);
- o["ciphertext"_L1] = ciphertext;
- o["iv"_L1] = QString::fromLatin1(iv);
- o["kid"_L1] = QString::fromLatin1(keyId);
- return o;
-}
-
#include "moc_sendmessagejob.cpp"
diff --git a/src/rocketchatrestapi-qt/chat/sendmessagejob.h b/src/rocketchatrestapi-qt/chat/sendmessagejob.h
index 6dcff4ff80..88618fe19c 100644
--- a/src/rocketchatrestapi-qt/chat/sendmessagejob.h
+++ b/src/rocketchatrestapi-qt/chat/sendmessagejob.h
@@ -6,6 +6,7 @@
#pragma once
+#include "encryptedinfo.h"
#include "librocketchatrestapi-qt_export.h"
#include "restapiabstractjob.h"
namespace RocketChatRestApi
@@ -17,20 +18,11 @@ public:
explicit SendMessageJob(QObject *parent = nullptr);
~SendMessageJob() override;
- struct EncryptedInfo {
- QByteArray algorithm;
- QByteArray keyId;
- QString ciphertext; // TODO QByteArray ?
- QByteArray iv;
- [[nodiscard]] QJsonObject generateJson() const;
- };
-
struct SendMessageArguments {
QString messageId;
QString roomId;
QString threadMessageId;
QString message;
- bool encrypted = false;
EncryptedInfo info;
};
@@ -52,7 +44,5 @@ private:
SendMessageArguments mSendMessageArguments;
};
}
-Q_DECLARE_METATYPE(RocketChatRestApi::SendMessageJob::EncryptedInfo)
-Q_DECLARE_TYPEINFO(RocketChatRestApi::SendMessageJob::EncryptedInfo, Q_RELOCATABLE_TYPE);
Q_DECLARE_METATYPE(RocketChatRestApi::SendMessageJob::SendMessageArguments)
Q_DECLARE_TYPEINFO(RocketChatRestApi::SendMessageJob::SendMessageArguments, Q_RELOCATABLE_TYPE);