aboutsummaryrefslogtreecommitdiff
path: root/lib/csapi/admin.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/csapi/admin.h')
-rw-r--r--lib/csapi/admin.h177
1 files changed, 96 insertions, 81 deletions
diff --git a/lib/csapi/admin.h b/lib/csapi/admin.h
index d35f3ee3..c53ddd7e 100644
--- a/lib/csapi/admin.h
+++ b/lib/csapi/admin.h
@@ -6,93 +6,108 @@
#include "jobs/basejob.h"
-#include <QtCore/QVector>
-#include <QtCore/QHash>
-#include "converters.h"
+namespace Quotient {
+
+/*! \brief Gets information about a particular user.
+ *
+ * Gets information about a particular user.
+ *
+ * This API may be restricted to only be called by the user being looked
+ * up, or by a server admin. Server-local administrator privileges are not
+ * specified in this document.
+ */
+class QUOTIENT_API GetWhoIsJob : public BaseJob {
+public:
+ // Inner data structures
-namespace QMatrixClient
-{
- // Operations
+ /// Gets information about a particular user.
+ ///
+ /// This API may be restricted to only be called by the user being looked
+ /// up, or by a server admin. Server-local administrator privileges are not
+ /// specified in this document.
+ struct ConnectionInfo {
+ /// Most recently seen IP address of the session.
+ QString ip;
+ /// Unix timestamp that the session was last active.
+ Omittable<qint64> lastSeen;
+ /// User agent string last seen in the session.
+ QString userAgent;
+ };
/// Gets information about a particular user.
///
+ /// This API may be restricted to only be called by the user being looked
+ /// up, or by a server admin. Server-local administrator privileges are not
+ /// specified in this document.
+ struct SessionInfo {
+ /// Information particular connections in the session.
+ QVector<ConnectionInfo> connections;
+ };
+
/// Gets information about a particular user.
- ///
+ ///
/// This API may be restricted to only be called by the user being looked
/// up, or by a server admin. Server-local administrator privileges are not
/// specified in this document.
- class GetWhoIsJob : public BaseJob
- {
- public:
- // Inner data structures
-
- /// Gets information about a particular user.
- ///
- /// This API may be restricted to only be called by the user being looked
- /// up, or by a server admin. Server-local administrator privileges are not
- /// specified in this document.
- struct ConnectionInfo
- {
- /// Most recently seen IP address of the session.
- QString ip;
- /// Unix timestamp that the session was last active.
- Omittable<qint64> lastSeen;
- /// User agent string last seen in the session.
- QString userAgent;
- };
-
- /// Gets information about a particular user.
- ///
- /// This API may be restricted to only be called by the user being looked
- /// up, or by a server admin. Server-local administrator privileges are not
- /// specified in this document.
- struct SessionInfo
- {
- /// Information particular connections in the session.
- QVector<ConnectionInfo> connections;
- };
-
- /// Gets information about a particular user.
- ///
- /// This API may be restricted to only be called by the user being looked
- /// up, or by a server admin. Server-local administrator privileges are not
- /// specified in this document.
- struct DeviceInfo
- {
- /// A user's sessions (i.e. what they did with an access token from one login).
- QVector<SessionInfo> sessions;
- };
-
- // Construction/destruction
-
- /*! Gets information about a particular user.
- * \param userId
- * The user to look up.
- */
- explicit GetWhoIsJob(const QString& userId);
-
- /*! Construct a URL without creating a full-fledged job object
- *
- * This function can be used when a URL for
- * GetWhoIsJob is necessary but the job
- * itself isn't.
- */
- static QUrl makeRequestUrl(QUrl baseUrl, const QString& userId);
-
- ~GetWhoIsJob() override;
-
- // Result properties
-
- /// The Matrix user ID of the user.
- const QString& userId() const;
- /// Each key is an identitfier for one of the user's devices.
- const QHash<QString, DeviceInfo>& devices() const;
-
- protected:
- Status parseJson(const QJsonDocument& data) override;
-
- private:
- class Private;
- QScopedPointer<Private> d;
+ struct DeviceInfo {
+ /// A user's sessions (i.e. what they did with an access token from one
+ /// login).
+ QVector<SessionInfo> sessions;
};
-} // namespace QMatrixClient
+
+ // Construction/destruction
+
+ /*! \brief Gets information about a particular user.
+ *
+ * \param userId
+ * The user to look up.
+ */
+ explicit GetWhoIsJob(const QString& userId);
+
+ /*! \brief Construct a URL without creating a full-fledged job object
+ *
+ * This function can be used when a URL for GetWhoIsJob
+ * is necessary but the job itself isn't.
+ */
+ static QUrl makeRequestUrl(QUrl baseUrl, const QString& userId);
+
+ // Result properties
+
+ /// The Matrix user ID of the user.
+ QString userId() const { return loadFromJson<QString>("user_id"_ls); }
+
+ /// Each key is an identifier for one of the user's devices.
+ QHash<QString, DeviceInfo> devices() const
+ {
+ return loadFromJson<QHash<QString, DeviceInfo>>("devices"_ls);
+ }
+};
+
+template <>
+struct JsonObjectConverter<GetWhoIsJob::ConnectionInfo> {
+ static void fillFrom(const QJsonObject& jo,
+ GetWhoIsJob::ConnectionInfo& result)
+ {
+ fromJson(jo.value("ip"_ls), result.ip);
+ fromJson(jo.value("last_seen"_ls), result.lastSeen);
+ fromJson(jo.value("user_agent"_ls), result.userAgent);
+ }
+};
+
+template <>
+struct JsonObjectConverter<GetWhoIsJob::SessionInfo> {
+ static void fillFrom(const QJsonObject& jo, GetWhoIsJob::SessionInfo& result)
+ {
+ fromJson(jo.value("connections"_ls), result.connections);
+ }
+};
+
+template <>
+struct JsonObjectConverter<GetWhoIsJob::DeviceInfo> {
+ static void fillFrom(const QJsonObject& jo, GetWhoIsJob::DeviceInfo& result)
+ {
+ fromJson(jo.value("sessions"_ls), result.sessions);
+ }
+};
+
+} // namespace Quotient