[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);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.