aboutsummaryrefslogtreecommitdiff
path: root/lib/csapi/administrative_contact.h
blob: 4ccd759645cabccdf20ffe8635a51fd29614353d (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
257
258
259
/******************************************************************************
 * THIS FILE IS GENERATED - ANY EDITS WILL BE OVERWRITTEN
 */

#pragma once

#include "converters.h"

#include "csapi/../identity/definitions/sid.h"

#include "jobs/basejob.h"

#include <QtCore/QVector>

namespace Quotient
{

// Operations

/// Gets a list of a user's third party identifiers.
/*!
 * Gets a list of the third party identifiers that the homeserver has
 * associated with the user's account.
 *
 * This is *not* the same as the list of third party identifiers bound to
 * the user's Matrix ID in identity servers.
 *
 * Identifiers in this list may be used by the homeserver as, for example,
 * identifiers that it will accept to reset the user's account password.
 */
class GetAccount3PIDsJob : public BaseJob
{
public:
    // Inner data structures

    /// Gets a list of the third party identifiers that the homeserver
    /// hasassociated with the user's account.This is *not* the same as the list
    /// of third party identifiers bound tothe user's Matrix ID in identity
    /// servers.Identifiers in this list may be used by the homeserver as, for
    /// example,identifiers that it will accept to reset the user's account
    /// password.
    struct ThirdPartyIdentifier
    {
        /// The medium of the third party identifier.
        QString medium;
        /// The third party identifier address.
        QString address;
        /// The timestamp, in milliseconds, when the identifier wasvalidated by
        /// the identity server.
        qint64 validatedAt;
        /// The timestamp, in milliseconds, when the homeserver associated the
        /// third party identifier with the user.
        qint64 addedAt;
    };

    // Construction/destruction

    explicit GetAccount3PIDsJob();

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

    ~GetAccount3PIDsJob() override;

    // Result properties

    /// Gets a list of the third party identifiers that the homeserver has
    /// associated with the user's account.
    ///
    /// This is *not* the same as the list of third party identifiers bound to
    /// the user's Matrix ID in identity servers.
    ///
    /// Identifiers in this list may be used by the homeserver as, for example,
    /// identifiers that it will accept to reset the user's account password.
    const QVector<ThirdPartyIdentifier>& threepids() const;

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

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

/// Adds contact information to the user's account.
/*!
 * Adds contact information to the user's account.
 */
class Post3PIDsJob : public BaseJob
{
public:
    // Inner data structures

    /// The third party credentials to associate with the account.
    struct ThreePidCredentials
    {
        /// The client secret used in the session with the identity server.
        QString clientSecret;
        /// The identity server to use.
        QString idServer;
        /// The session identifier given by the identity server.
        QString sid;
    };

    // Construction/destruction

    /*! Adds contact information to the user's account.
     * \param threePidCreds
     *   The third party credentials to associate with the account.
     * \param bind
     *   Whether the homeserver should also bind this third party
     *   identifier to the account's Matrix ID with the passed identity
     *   server. Default: ``false``.
     */
    explicit Post3PIDsJob(const ThreePidCredentials& threePidCreds,
                          Omittable<bool> bind = none);
};

/// Deletes a third party identifier from the user's account
/*!
 * Removes a third party identifier from the user's account. This might not
 * cause an unbind of the identifier from the identity server.
 */
class Delete3pidFromAccountJob : public BaseJob
{
public:
    /*! Deletes a third party identifier from the user's account
     * \param medium
     *   The medium of the third party identifier being removed.
     * \param address
     *   The third party address being removed.
     */
    explicit Delete3pidFromAccountJob(const QString& medium,
                                      const QString& address);
};

/// Begins the validation process for an email address for association with the
/// user's account.
/*!
 * Proxies the Identity Service API ``validate/email/requestToken``, but
 * first checks that the given email address is **not** already associated
 * with an account on this homeserver. This API should be used to request
 * validation tokens when adding an email address to an account. This API's
 * parameters and response are identical to that of the
 * |/register/email/requestToken|_ endpoint.
 */
class RequestTokenTo3PIDEmailJob : public BaseJob
{
public:
    /*! Begins the validation process for an email address for association with
     * the user's account. \param clientSecret A unique string generated by the
     * client, and used to identify the validation attempt. It must be a string
     * consisting of the characters
     *   ``[0-9a-zA-Z.=_-]``. Its length must not exceed 255 characters and it
     *   must not be empty.
     * \param email
     *   The email address to validate.
     * \param sendAttempt
     *   The server will only send an email if the ``send_attempt``
     *   is a number greater than the most recent one which it has seen,
     *   scoped to that ``email`` + ``client_secret`` pair. This is to
     *   avoid repeatedly sending the same email in the case of request
     *   retries between the POSTing user and the identity server.
     *   The client should increment this value if they desire a new
     *   email (e.g. a reminder) to be sent.
     * \param idServer
     *   The hostname of the identity server to communicate with. May
     *   optionally include a port.
     * \param nextLink
     *   Optional. When the validation is completed, the identity
     *   server will redirect the user to this URL.
     */
    explicit RequestTokenTo3PIDEmailJob(const QString& clientSecret,
                                        const QString& email, int sendAttempt,
                                        const QString& idServer,
                                        const QString& nextLink = {});

    ~RequestTokenTo3PIDEmailJob() override;

    // Result properties

    /// An email was sent to the given address.
    const Sid& data() const;

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

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

/// Begins the validation process for a phone number for association with the
/// user's account.
/*!
 * Proxies the Identity Service API ``validate/msisdn/requestToken``, but
 * first checks that the given phone number is **not** already associated
 * with an account on this homeserver. This API should be used to request
 * validation tokens when adding a phone number to an account. This API's
 * parameters and response are identical to that of the
 * |/register/msisdn/requestToken|_ endpoint.
 */
class RequestTokenTo3PIDMSISDNJob : public BaseJob
{
public:
    /*! Begins the validation process for a phone number for association with
     * the user's account. \param clientSecret A unique string generated by the
     * client, and used to identify the validation attempt. It must be a string
     * consisting of the characters
     *   ``[0-9a-zA-Z.=_-]``. Its length must not exceed 255 characters and it
     *   must not be empty.
     * \param country
     *   The two-letter uppercase ISO country code that the number in
     *   ``phone_number`` should be parsed as if it were dialled from.
     * \param phoneNumber
     *   The phone number to validate.
     * \param sendAttempt
     *   The server will only send an SMS if the ``send_attempt`` is a
     *   number greater than the most recent one which it has seen,
     *   scoped to that ``country`` + ``phone_number`` + ``client_secret``
     *   triple. This is to avoid repeatedly sending the same SMS in
     *   the case of request retries between the POSTing user and the
     *   identity server. The client should increment this value if
     *   they desire a new SMS (e.g. a reminder) to be sent.
     * \param idServer
     *   The hostname of the identity server to communicate with. May
     *   optionally include a port.
     * \param nextLink
     *   Optional. When the validation is completed, the identity
     *   server will redirect the user to this URL.
     */
    explicit RequestTokenTo3PIDMSISDNJob(const QString& clientSecret,
                                         const QString& country,
                                         const QString& phoneNumber,
                                         int sendAttempt,
                                         const QString& idServer,
                                         const QString& nextLink = {});

    ~RequestTokenTo3PIDMSISDNJob() override;

    // Result properties

    /// An SMS message was sent to the given phone number.
    const Sid& data() const;

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

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

} // namespace Quotient