[network/ruqola] src/rocketchatrestapi-qt: Generate encryption info

Laurent Montel <[email protected]> Tue, 4 Aug 2026 11:54:24 +0000 (UTC)
Newsgroups gmane.comp.kde.cvs
Message-ID <[email protected]>
Git commit fe3848f9ad066676e7a4e943b59814d27b8482e5 by Laurent Montel.
Committed on 04/08/2026 at 11:43.
Pushed by mlaurent into branch 'master'.

Generate encryption info

M  +13   -0    src/rocketchatrestapi-qt/autotests/sendmessagejobtest.cpp
M  +1    -0    src/rocketchatrestapi-qt/autotests/sendmessagejobtest.h
M  +16   -1    src/rocketchatrestapi-qt/chat/sendmessagejob.cpp
M  +11   -0    src/rocketchatrestapi-qt/chat/sendmessagejob.h

https://invent.kde.org/network/ruqola/-/commit/fe3848f9ad066676e7a4e943b59814d27b8482e5

diff --git a/src/rocketchatrestapi-qt/autotests/sendmessagejobtest.cpp b/src/rocketchatrestapi-qt/autotests/sendmessagejobtest.cpp
index 6a72521b28..95abae6ff3 100644
--- a/src/rocketchatrestapi-qt/autotests/sendmessagejobtest.cpp
+++ b/src/rocketchatrestapi-qt/autotests/sendmessagejobtest.cpp
@@ -68,6 +68,19 @@ void SendMessageJobTest::shouldGenerateJson()
              QStringLiteral(R"({"message":{"_id":"%4","msg":"%2","rid":"%1","tmid":"%3"}})").arg(roomId, text, threadId, messageId).toLatin1());
 }
 
+void SendMessageJobTest::shouldGenerateJsonEncrypted()
+{
+    SendMessageJob job;
+    const QString roomId = u"foo1"_s;
+    const QString text = u"topic1"_s;
+    SendMessageJob::SendMessageArguments args;
+    args.roomId = roomId;
+    args.encrypted = true;
+    job.setSendMessageArguments(args);
+    QCOMPARE(job.json().toJson(QJsonDocument::Compact),
+             QStringLiteral(R"({"content":{"algorithm":"","ciphertext":"","iv":"","kid":""},"message":{"rid":"foo1"},"t":"e2e"})").toLatin1());
+}
+
 void SendMessageJobTest::shouldNotStarting()
 {
     SendMessageJob job;
diff --git a/src/rocketchatrestapi-qt/autotests/sendmessagejobtest.h b/src/rocketchatrestapi-qt/autotests/sendmessagejobtest.h
index a9dcfe9f71..2caa73162f 100644
--- a/src/rocketchatrestapi-qt/autotests/sendmessagejobtest.h
+++ b/src/rocketchatrestapi-qt/autotests/sendmessagejobtest.h
@@ -18,5 +18,6 @@ private Q_SLOTS:
     void shouldHaveDefaultValue();
     void shouldGenerateRequest();
     void shouldGenerateJson();
+    void shouldGenerateJsonEncrypted();
     void shouldNotStarting();
 };
diff --git a/src/rocketchatrestapi-qt/chat/sendmessagejob.cpp b/src/rocketchatrestapi-qt/chat/sendmessagejob.cpp
index 66251ecfc8..f692c6f625 100644
--- a/src/rocketchatrestapi-qt/chat/sendmessagejob.cpp
+++ b/src/rocketchatrestapi-qt/chat/sendmessagejob.cpp
@@ -97,10 +97,25 @@ QJsonDocument SendMessageJob::json() const
         jsonObj["tmid"_L1] = mSendMessageArguments.threadMessageId;
     }
     jsonObj["rid"_L1] = mSendMessageArguments.roomId;
-    jsonObj["msg"_L1] = mSendMessageArguments.message;
+    if (mSendMessageArguments.encrypted) {
+        message["content"_L1] = mSendMessageArguments.info.generateJson();
+        message["t"_L1] = u"e2e"_s;
+    } else {
+        jsonObj["msg"_L1] = mSendMessageArguments.message;
+    }
     message["message"_L1] = jsonObj;
     const QJsonDocument postData = QJsonDocument(message);
     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 c1719715bb..6dcff4ff80 100644
--- a/src/rocketchatrestapi-qt/chat/sendmessagejob.h
+++ b/src/rocketchatrestapi-qt/chat/sendmessagejob.h
@@ -17,12 +17,21 @@ 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;
     };
 
     [[nodiscard]] bool start() override;
@@ -43,5 +52,7 @@ 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);