aboutsummaryrefslogtreecommitdiff
path: root/lib/csapi/third_party_lookup.h
blob: d25c1cf3a1561f7fc3bf850328a60dfb577cacb6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
/******************************************************************************
 * THIS FILE IS GENERATED - ANY EDITS WILL BE OVERWRITTEN
 */

#pragma once

#include "converters.h"

#include "csapi/../application-service/definitions/location.h"
#include "csapi/../application-service/definitions/protocol.h"
#include "csapi/../application-service/definitions/user.h"

#include "jobs/basejob.h"

#include <QtCore/QHash>
#include <QtCore/QVector>

namespace QMatrixClient
{

// Operations

/// Retrieve metadata about all protocols that a homeserver supports.
/*!
 * Fetches the overall metadata about protocols supported by the
 * homeserver. Includes both the available protocols and all fields
 * required for queries against each protocol.
 */
class GetProtocolsJob : public BaseJob
{
public:
    explicit GetProtocolsJob();

    /*! Construct a URL without creating a full-fledged job object
     *
     * This function can be used when a URL for
     * GetProtocolsJob is necessary but the job
     * itself isn't.
     */
    static QUrl makeRequestUrl(QUrl baseUrl);

    ~GetProtocolsJob() override;

    // Result properties

    /// The protocols supported by the homeserver.
    const QHash<QString, ThirdPartyProtocol>& data() const;

protected:
    Status parseJson(const QJsonDocument& data) override;

private:
    class Private;
    QScopedPointer<Private> d;
};

/// Retrieve metadata about a specific protocol that the homeserver supports.
/*!
 * Fetches the metadata from the homeserver about a particular third party
 * protocol.
 */
class GetProtocolMetadataJob : public BaseJob
{
public:
    /*! Retrieve metadata about a specific protocol that the homeserver
     * supports. \param protocol The name of the protocol.
     */
    explicit GetProtocolMetadataJob(const QString& protocol);

    /*! Construct a URL without creating a full-fledged job object
     *
     * This function can be used when a URL for
     * GetProtocolMetadataJob is necessary but the job
     * itself isn't.
     */
    static QUrl makeRequestUrl(QUrl baseUrl, const QString& protocol);

    ~GetProtocolMetadataJob() override;

    // Result properties

    /// The protocol was found and metadata returned.
    const ThirdPartyProtocol& data() const;

protected:
    Status parseJson(const QJsonDocument& data) override;

private:
    class Private;
    QScopedPointer<Private> d;
};

/// Retrieve Matrix-side portals rooms leading to a third party location.
/*!
 * Requesting this endpoint with a valid protocol name results in a list
 * of successful mapping results in a JSON array. Each result contains
 * objects to represent the Matrix room or rooms that represent a portal
 * to this third party network. Each has the Matrix room alias string,
 * an identifier for the particular third party network protocol, and an
 * object containing the network-specific fields that comprise this
 * identifier. It should attempt to canonicalise the identifier as much
 * as reasonably possible given the network type.
 */
class QueryLocationByProtocolJob : public BaseJob
{
public:
    /*! Retrieve Matrix-side portals rooms leading to a third party location.
     * \param protocol
     *   The protocol used to communicate to the third party network.
     * \param searchFields
     *   One or more custom fields to help identify the third party
     *   location.
     */
    explicit QueryLocationByProtocolJob(const QString& protocol,
                                        const QString& searchFields = {});

    /*! Construct a URL without creating a full-fledged job object
     *
     * This function can be used when a URL for
     * QueryLocationByProtocolJob is necessary but the job
     * itself isn't.
     */
    static QUrl makeRequestUrl(QUrl baseUrl, const QString& protocol,
                               const QString& searchFields = {});

    ~QueryLocationByProtocolJob() override;

    // Result properties

    /// At least one portal room was found.
    const QVector<ThirdPartyLocation>& data() const;

protected:
    Status parseJson(const QJsonDocument& data) override;

private:
    class Private;
    QScopedPointer<Private> d;
};

/// Retrieve the Matrix User ID of a corresponding third party user.
/*!
 * Retrieve a Matrix User ID linked to a user on the third party service, given
 * a set of user parameters.
 */
class QueryUserByProtocolJob : public BaseJob
{
public:
    /*! Retrieve the Matrix User ID of a corresponding third party user.
     * \param protocol
     *   The name of the protocol.
     * \param fields
     *   One or more custom fields that are passed to the AS to help identify
     * the user.
     */
    explicit QueryUserByProtocolJob(const QString& protocol,
                                    const QString& fields = {});

    /*! Construct a URL without creating a full-fledged job object
     *
     * This function can be used when a URL for
     * QueryUserByProtocolJob is necessary but the job
     * itself isn't.
     */
    static QUrl makeRequestUrl(QUrl baseUrl, const QString& protocol,
                               const QString& fields = {});

    ~QueryUserByProtocolJob() override;

    // Result properties

    /// The Matrix User IDs found with the given parameters.
    const QVector<ThirdPartyUser>& data() const;

protected:
    Status parseJson(const QJsonDocument& data) override;

private:
    class Private;
    QScopedPointer<Private> d;
};

/// Reverse-lookup third party locations given a Matrix room alias.
/*!
 * Retrieve an array of third party network locations from a Matrix room
 * alias.
 */
class QueryLocationByAliasJob : public BaseJob
{
public:
    /*! Reverse-lookup third party locations given a Matrix room alias.
     * \param alias
     *   The Matrix room alias to look up.
     */
    explicit QueryLocationByAliasJob(const QString& alias);

    /*! Construct a URL without creating a full-fledged job object
     *
     * This function can be used when a URL for
     * QueryLocationByAliasJob is necessary but the job
     * itself isn't.
     */
    static QUrl makeRequestUrl(QUrl baseUrl, const QString& alias);

    ~QueryLocationByAliasJob() override;

    // Result properties

    /// All found third party locations.
    const QVector<ThirdPartyLocation>& data() const;

protected:
    Status parseJson(const QJsonDocument& data) override;

private:
    class Private;
    QScopedPointer<Private> d;
};

/// Reverse-lookup third party users given a Matrix User ID.
/*!
 * Retrieve an array of third party users from a Matrix User ID.
 */
class QueryUserByIDJob : public BaseJob
{
public:
    /*! Reverse-lookup third party users given a Matrix User ID.
     * \param userid
     *   The Matrix User ID to look up.
     */
    explicit QueryUserByIDJob(const QString& userid);

    /*! Construct a URL without creating a full-fledged job object
     *
     * This function can be used when a URL for
     * QueryUserByIDJob is necessary but the job
     * itself isn't.
     */
    static QUrl makeRequestUrl(QUrl baseUrl, const QString& userid);

    ~QueryUserByIDJob() override;

    // Result properties

    /// An array of third party users.
    const QVector<ThirdPartyUser>& data() const;

protected:
    Status parseJson(const QJsonDocument& data) override;

private:
    class Private;
    QScopedPointer<Private> d;
};

} // namespace QMatrixClient