aboutsummaryrefslogtreecommitdiff
path: root/lib/csapi
diff options
context:
space:
mode:
authorKitsune Ral <Kitsune-Ral@users.sf.net>2018-06-08 17:07:33 +0900
committerKitsune Ral <Kitsune-Ral@users.sf.net>2018-06-08 17:07:33 +0900
commitc5ebff775e71b5d32a3b2af8f666e3f13f8970c2 (patch)
treef9eb65490277da58e5aab367ca4af35220d24f72 /lib/csapi
parentb28e2d697842f58e2994ead62635b31f48162cdc (diff)
downloadlibquotient-c5ebff775e71b5d32a3b2af8f666e3f13f8970c2.tar.gz
libquotient-c5ebff775e71b5d32a3b2af8f666e3f13f8970c2.zip
csapi: add jobs for keys management
This concludes the Great Income of Jobs to libQMatrixClient - all CS API calls are now covered with job classes, yay!
Diffstat (limited to 'lib/csapi')
-rw-r--r--lib/csapi/definitions/device_keys.cpp37
-rw-r--r--lib/csapi/definitions/device_keys.h32
-rw-r--r--lib/csapi/keys.cpp206
-rw-r--r--lib/csapi/keys.h115
4 files changed, 390 insertions, 0 deletions
diff --git a/lib/csapi/definitions/device_keys.cpp b/lib/csapi/definitions/device_keys.cpp
new file mode 100644
index 00000000..24357993
--- /dev/null
+++ b/lib/csapi/definitions/device_keys.cpp
@@ -0,0 +1,37 @@
+/******************************************************************************
+ * THIS FILE IS GENERATED - ANY EDITS WILL BE OVERWRITTEN
+ */
+
+#include "device_keys.h"
+
+using namespace QMatrixClient;
+
+QJsonObject QMatrixClient::toJson(const DeviceKeys& pod)
+{
+ QJsonObject _json;
+ addToJson<>(_json, "user_id", pod.userId);
+ addToJson<>(_json, "device_id", pod.deviceId);
+ addToJson<>(_json, "algorithms", pod.algorithms);
+ addToJson<>(_json, "keys", pod.keys);
+ addToJson<>(_json, "signatures", pod.signatures);
+ return _json;
+}
+
+DeviceKeys FromJson<DeviceKeys>::operator()(const QJsonValue& jv)
+{
+ const auto& _json = jv.toObject();
+ DeviceKeys result;
+ result.userId =
+ fromJson<QString>(_json.value("user_id"));
+ result.deviceId =
+ fromJson<QString>(_json.value("device_id"));
+ result.algorithms =
+ fromJson<QStringList>(_json.value("algorithms"));
+ result.keys =
+ fromJson<QHash<QString, QString>>(_json.value("keys"));
+ result.signatures =
+ fromJson<QHash<QString, QHash<QString, QString>>>(_json.value("signatures"));
+
+ return result;
+}
+
diff --git a/lib/csapi/definitions/device_keys.h b/lib/csapi/definitions/device_keys.h
new file mode 100644
index 00000000..895700c1
--- /dev/null
+++ b/lib/csapi/definitions/device_keys.h
@@ -0,0 +1,32 @@
+/******************************************************************************
+ * THIS FILE IS GENERATED - ANY EDITS WILL BE OVERWRITTEN
+ */
+
+#pragma once
+
+
+#include <QtCore/QHash>
+
+#include "converters.h"
+
+namespace QMatrixClient
+{
+ // Data structures
+
+ struct DeviceKeys
+ {
+ QString userId;
+ QString deviceId;
+ QStringList algorithms;
+ QHash<QString, QString> keys;
+ QHash<QString, QHash<QString, QString>> signatures;
+ };
+
+ QJsonObject toJson(const DeviceKeys& pod);
+
+ template <> struct FromJson<DeviceKeys>
+ {
+ DeviceKeys operator()(const QJsonValue& jv);
+ };
+
+} // namespace QMatrixClient
diff --git a/lib/csapi/keys.cpp b/lib/csapi/keys.cpp
new file mode 100644
index 00000000..2d6885dd
--- /dev/null
+++ b/lib/csapi/keys.cpp
@@ -0,0 +1,206 @@
+/******************************************************************************
+ * THIS FILE IS GENERATED - ANY EDITS WILL BE OVERWRITTEN
+ */
+
+#include "keys.h"
+
+#include "converters.h"
+
+#include <QtCore/QStringBuilder>
+
+using namespace QMatrixClient;
+
+static const auto basePath = QStringLiteral("/_matrix/client/r0");
+
+class UploadKeysJob::Private
+{
+ public:
+ QHash<QString, int> oneTimeKeyCounts;
+};
+
+UploadKeysJob::UploadKeysJob(const Omittable<DeviceKeys>& deviceKeys, const QHash<QString, QVariant>& oneTimeKeys)
+ : BaseJob(HttpVerb::Post, "UploadKeysJob",
+ basePath % "/keys/upload")
+ , d(new Private)
+{
+ QJsonObject _data;
+ addToJson<IfNotEmpty>(_data, "device_keys", deviceKeys);
+ addToJson<IfNotEmpty>(_data, "one_time_keys", oneTimeKeys);
+ setRequestData(_data);
+}
+
+UploadKeysJob::~UploadKeysJob() = default;
+
+const QHash<QString, int>& UploadKeysJob::oneTimeKeyCounts() const
+{
+ return d->oneTimeKeyCounts;
+}
+
+BaseJob::Status UploadKeysJob::parseJson(const QJsonDocument& data)
+{
+ auto json = data.object();
+ if (!json.contains("one_time_key_counts"))
+ return { JsonParseError,
+ "The key 'one_time_key_counts' not found in the response" };
+ d->oneTimeKeyCounts = fromJson<QHash<QString, int>>(json.value("one_time_key_counts"));
+ return Success;
+}
+
+namespace QMatrixClient
+{
+ // Converters
+
+ template <> struct FromJson<QueryKeysJob::UnsignedDeviceInfo>
+ {
+ QueryKeysJob::UnsignedDeviceInfo operator()(const QJsonValue& jv)
+ {
+ const auto& _json = jv.toObject();
+ QueryKeysJob::UnsignedDeviceInfo result;
+ result.deviceDisplayName =
+ fromJson<QString>(_json.value("device_display_name"));
+
+ return result;
+ }
+ };
+
+ template <> struct FromJson<QueryKeysJob::DeviceInformation>
+ {
+ QueryKeysJob::DeviceInformation operator()(const QJsonValue& jv)
+ {
+ const auto& _json = jv.toObject();
+ QueryKeysJob::DeviceInformation result;
+ result.unsignedData =
+ fromJson<QueryKeysJob::UnsignedDeviceInfo>(_json.value("unsigned"));
+
+ return result;
+ }
+ };
+} // namespace QMatrixClient
+
+class QueryKeysJob::Private
+{
+ public:
+ QHash<QString, QJsonObject> failures;
+ QHash<QString, QHash<QString, DeviceInformation>> deviceKeys;
+};
+
+QueryKeysJob::QueryKeysJob(const QHash<QString, QStringList>& deviceKeys, Omittable<int> timeout, const QString& token)
+ : BaseJob(HttpVerb::Post, "QueryKeysJob",
+ basePath % "/keys/query")
+ , d(new Private)
+{
+ QJsonObject _data;
+ addToJson<IfNotEmpty>(_data, "timeout", timeout);
+ addToJson<>(_data, "device_keys", deviceKeys);
+ addToJson<IfNotEmpty>(_data, "token", token);
+ setRequestData(_data);
+}
+
+QueryKeysJob::~QueryKeysJob() = default;
+
+const QHash<QString, QJsonObject>& QueryKeysJob::failures() const
+{
+ return d->failures;
+}
+
+const QHash<QString, QHash<QString, QueryKeysJob::DeviceInformation>>& QueryKeysJob::deviceKeys() const
+{
+ return d->deviceKeys;
+}
+
+BaseJob::Status QueryKeysJob::parseJson(const QJsonDocument& data)
+{
+ auto json = data.object();
+ d->failures = fromJson<QHash<QString, QJsonObject>>(json.value("failures"));
+ d->deviceKeys = fromJson<QHash<QString, QHash<QString, DeviceInformation>>>(json.value("device_keys"));
+ return Success;
+}
+
+class ClaimKeysJob::Private
+{
+ public:
+ QHash<QString, QJsonObject> failures;
+ QHash<QString, QHash<QString, QVariant>> oneTimeKeys;
+};
+
+ClaimKeysJob::ClaimKeysJob(const QHash<QString, QHash<QString, QString>>& oneTimeKeys, Omittable<int> timeout)
+ : BaseJob(HttpVerb::Post, "ClaimKeysJob",
+ basePath % "/keys/claim")
+ , d(new Private)
+{
+ QJsonObject _data;
+ addToJson<IfNotEmpty>(_data, "timeout", timeout);
+ addToJson<>(_data, "one_time_keys", oneTimeKeys);
+ setRequestData(_data);
+}
+
+ClaimKeysJob::~ClaimKeysJob() = default;
+
+const QHash<QString, QJsonObject>& ClaimKeysJob::failures() const
+{
+ return d->failures;
+}
+
+const QHash<QString, QHash<QString, QVariant>>& ClaimKeysJob::oneTimeKeys() const
+{
+ return d->oneTimeKeys;
+}
+
+BaseJob::Status ClaimKeysJob::parseJson(const QJsonDocument& data)
+{
+ auto json = data.object();
+ d->failures = fromJson<QHash<QString, QJsonObject>>(json.value("failures"));
+ d->oneTimeKeys = fromJson<QHash<QString, QHash<QString, QVariant>>>(json.value("one_time_keys"));
+ return Success;
+}
+
+class GetKeysChangesJob::Private
+{
+ public:
+ QStringList changed;
+ QStringList left;
+};
+
+BaseJob::Query queryToGetKeysChanges(const QString& from, const QString& to)
+{
+ BaseJob::Query _q;
+ _q.addQueryItem("from", from);
+ _q.addQueryItem("to", to);
+ return _q;
+}
+
+QUrl GetKeysChangesJob::makeRequestUrl(QUrl baseUrl, const QString& from, const QString& to)
+{
+ return BaseJob::makeRequestUrl(std::move(baseUrl),
+ basePath % "/keys/changes",
+ queryToGetKeysChanges(from, to));
+}
+
+GetKeysChangesJob::GetKeysChangesJob(const QString& from, const QString& to)
+ : BaseJob(HttpVerb::Get, "GetKeysChangesJob",
+ basePath % "/keys/changes",
+ queryToGetKeysChanges(from, to))
+ , d(new Private)
+{
+}
+
+GetKeysChangesJob::~GetKeysChangesJob() = default;
+
+const QStringList& GetKeysChangesJob::changed() const
+{
+ return d->changed;
+}
+
+const QStringList& GetKeysChangesJob::left() const
+{
+ return d->left;
+}
+
+BaseJob::Status GetKeysChangesJob::parseJson(const QJsonDocument& data)
+{
+ auto json = data.object();
+ d->changed = fromJson<QStringList>(json.value("changed"));
+ d->left = fromJson<QStringList>(json.value("left"));
+ return Success;
+}
+
diff --git a/lib/csapi/keys.h b/lib/csapi/keys.h
new file mode 100644
index 00000000..d4b0f62f
--- /dev/null
+++ b/lib/csapi/keys.h
@@ -0,0 +1,115 @@
+/******************************************************************************
+ * THIS FILE IS GENERATED - ANY EDITS WILL BE OVERWRITTEN
+ */
+
+#pragma once
+
+#include "jobs/basejob.h"
+
+#include "csapi/definitions/device_keys.h"
+#include <QtCore/QHash>
+#include "converters.h"
+#include <QtCore/QVariant>
+#include <QtCore/QJsonObject>
+
+namespace QMatrixClient
+{
+ // Operations
+
+ class UploadKeysJob : public BaseJob
+ {
+ public:
+ explicit UploadKeysJob(const Omittable<DeviceKeys>& deviceKeys = none, const QHash<QString, QVariant>& oneTimeKeys = {});
+ ~UploadKeysJob() override;
+
+ // Result properties
+
+ const QHash<QString, int>& oneTimeKeyCounts() const;
+
+ protected:
+ Status parseJson(const QJsonDocument& data) override;
+
+ private:
+ class Private;
+ QScopedPointer<Private> d;
+ };
+
+ class QueryKeysJob : public BaseJob
+ {
+ public:
+ // Inner data structures
+
+ struct UnsignedDeviceInfo
+ {
+ QString deviceDisplayName;
+ };
+
+ struct DeviceInformation : DeviceKeys
+ {
+ Omittable<UnsignedDeviceInfo> unsignedData;
+ };
+
+ // Construction/destruction
+
+ explicit QueryKeysJob(const QHash<QString, QStringList>& deviceKeys, Omittable<int> timeout = none, const QString& token = {});
+ ~QueryKeysJob() override;
+
+ // Result properties
+
+ const QHash<QString, QJsonObject>& failures() const;
+ const QHash<QString, QHash<QString, DeviceInformation>>& deviceKeys() const;
+
+ protected:
+ Status parseJson(const QJsonDocument& data) override;
+
+ private:
+ class Private;
+ QScopedPointer<Private> d;
+ };
+
+ class ClaimKeysJob : public BaseJob
+ {
+ public:
+ explicit ClaimKeysJob(const QHash<QString, QHash<QString, QString>>& oneTimeKeys, Omittable<int> timeout = none);
+ ~ClaimKeysJob() override;
+
+ // Result properties
+
+ const QHash<QString, QJsonObject>& failures() const;
+ const QHash<QString, QHash<QString, QVariant>>& oneTimeKeys() const;
+
+ protected:
+ Status parseJson(const QJsonDocument& data) override;
+
+ private:
+ class Private;
+ QScopedPointer<Private> d;
+ };
+
+ class GetKeysChangesJob : public BaseJob
+ {
+ public:
+ explicit GetKeysChangesJob(const QString& from, const QString& to);
+
+ /** Construct a URL out of baseUrl and usual parameters passed to
+ * GetKeysChangesJob. This function can be used when
+ * a URL for GetKeysChangesJob is necessary but the job
+ * itself isn't.
+ */
+ static QUrl makeRequestUrl(QUrl baseUrl, const QString& from, const QString& to);
+
+ ~GetKeysChangesJob() override;
+
+ // Result properties
+
+ const QStringList& changed() const;
+ const QStringList& left() const;
+
+ protected:
+ Status parseJson(const QJsonDocument& data) override;
+
+ private:
+ class Private;
+ QScopedPointer<Private> d;
+ };
+} // namespace QMatrixClient