aboutsummaryrefslogtreecommitdiff
path: root/lib/csapi/registration.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/csapi/registration.h')
-rw-r--r--lib/csapi/registration.h911
1 files changed, 464 insertions, 447 deletions
diff --git a/lib/csapi/registration.h b/lib/csapi/registration.h
index 02f4ddaf..40f1caa6 100644
--- a/lib/csapi/registration.h
+++ b/lib/csapi/registration.h
@@ -4,463 +4,480 @@
#pragma once
-#include "jobs/basejob.h"
-
#include "converters.h"
+
#include "csapi/../identity/definitions/sid.h"
#include "csapi/definitions/auth_data.h"
-namespace QMatrixClient {
- // Operations
+#include "jobs/basejob.h"
- /// Register for an account on this homeserver.
- ///
- /// This API endpoint uses the `User-Interactive Authentication API`_.
- ///
- /// Register for an account on this homeserver.
- ///
- /// There are two kinds of user account:
- ///
- /// - `user` accounts. These accounts may use the full API described in this
- /// specification.
- ///
- /// - `guest` accounts. These accounts may have limited permissions and may
- /// not be supported by all servers.
- ///
- /// If registration is successful, this endpoint will issue an access token
- /// the client can use to authorize itself in subsequent requests.
- ///
- /// If the client does not supply a ``device_id``, the server must
- /// auto-generate one.
- ///
- /// The server SHOULD register an account with a User ID based on the
- /// ``username`` provided, if any. Note that the grammar of Matrix User ID
- /// localparts is restricted, so the server MUST either map the provided
- /// ``username`` onto a ``user_id`` in a logical manner, or reject
- /// ``username``\s which do not comply to the grammar, with
- /// ``M_INVALID_USERNAME``.
- ///
- /// Matrix clients MUST NOT assume that localpart of the registered
- /// ``user_id`` matches the provided ``username``.
- ///
- /// The returned access token must be associated with the ``device_id``
- /// supplied by the client or generated by the server. The server may
- /// invalidate any access token previously associated with that device. See
- /// `Relationship between access tokens and devices`_.
- class RegisterJob : public BaseJob
- {
- public:
- /*! Register for an account on this homeserver.
- * \param kind
- * The kind of account to register. Defaults to `user`.
- * \param auth
- * Additional authentication information for the
- * user-interactive authentication API. Note that this
- * information is *not* used to define how the registered user
- * should be authenticated, but is instead used to
- * authenticate the ``register`` call itself. It should be
- * left empty, or omitted, unless an earlier call returned an
- * response with status code 401.
- * \param bindEmail
- * If true, the server binds the email used for authentication to
- * the Matrix ID with the identity server.
- * \param username
- * The basis for the localpart of the desired Matrix ID. If omitted,
- * the homeserver MUST generate a Matrix ID local part.
- * \param password
- * The desired password for the account.
- * \param deviceId
- * ID of the client device. If this does not correspond to a
- * known client device, a new device will be created. The server
- * will auto-generate a device_id if this is not specified.
- * \param initialDeviceDisplayName
- * A display name to assign to the newly-created device. Ignored
- * if ``device_id`` corresponds to a known device.
- * \param inhibitLogin
- * If true, an ``access_token`` and ``device_id`` should not be
- * returned from this call, therefore preventing an automatic
- * login. Defaults to false.
- */
- explicit RegisterJob(const QString& kind = QStringLiteral("user"),
- const Omittable<AuthenticationData>& auth = none,
- Omittable<bool> bindEmail = none,
- const QString& username = {},
- const QString& password = {},
- const QString& deviceId = {},
- const QString& initialDeviceDisplayName = {},
- Omittable<bool> inhibitLogin = none);
- ~RegisterJob() override;
-
- // Result properties
-
- /// The fully-qualified Matrix user ID (MXID) that has been registered.
- ///
- /// Any user ID returned by this API must conform to the grammar given
- /// in the `Matrix specification
- /// <https://matrix.org/docs/spec/appendices.html#user-identifiers>`_.
- const QString& userId() const;
- /// An access token for the account.
- /// This access token can then be used to authorize other requests.
- /// Required if the ``inhibit_login`` option is false.
- const QString& accessToken() const;
- /// The server_name of the homeserver on which the account has
- /// been registered.
- ///
- /// **Deprecated**. Clients should extract the server_name from
- /// ``user_id`` (by splitting at the first colon) if they require
- /// it. Note also that ``homeserver`` is not spelt this way.
- const QString& homeServer() const;
- /// ID of the registered device. Will be the same as the
- /// corresponding parameter in the request, if one was specified.
- /// Required if the ``inhibit_login`` option is false.
- const QString& deviceId() const;
-
- protected:
- Status parseJson(const QJsonDocument& data) override;
-
- private:
- class Private;
- QScopedPointer<Private> d;
- };
-
- /// Begins the validation process for an email to be used during
- /// registration.
+namespace QMatrixClient
+{
+
+// Operations
+
+/// Register for an account on this homeserver.
+/*!
+ * This API endpoint uses the `User-Interactive Authentication API`_.
+ *
+ * Register for an account on this homeserver.
+ *
+ * There are two kinds of user account:
+ *
+ * - `user` accounts. These accounts may use the full API described in this
+ * specification.
+ *
+ * - `guest` accounts. These accounts may have limited permissions and may not
+ * be supported by all servers.
+ *
+ * If registration is successful, this endpoint will issue an access token
+ * the client can use to authorize itself in subsequent requests.
+ *
+ * If the client does not supply a ``device_id``, the server must
+ * auto-generate one.
+ *
+ * The server SHOULD register an account with a User ID based on the
+ * ``username`` provided, if any. Note that the grammar of Matrix User ID
+ * localparts is restricted, so the server MUST either map the provided
+ * ``username`` onto a ``user_id`` in a logical manner, or reject
+ * ``username``\s which do not comply to the grammar, with
+ * ``M_INVALID_USERNAME``.
+ *
+ * Matrix clients MUST NOT assume that localpart of the registered
+ * ``user_id`` matches the provided ``username``.
+ *
+ * The returned access token must be associated with the ``device_id``
+ * supplied by the client or generated by the server. The server may
+ * invalidate any access token previously associated with that device. See
+ * `Relationship between access tokens and devices`_.
+ */
+class RegisterJob : public BaseJob
+{
+public:
+ /*! Register for an account on this homeserver.
+ * \param kind
+ * The kind of account to register. Defaults to `user`.
+ * \param auth
+ * Additional authentication information for the
+ * user-interactive authentication API. Note that this
+ * information is *not* used to define how the registered user
+ * should be authenticated, but is instead used to
+ * authenticate the ``register`` call itself. It should be
+ * left empty, or omitted, unless an earlier call returned an
+ * response with status code 401.
+ * \param bindEmail
+ * If true, the server binds the email used for authentication to
+ * the Matrix ID with the identity server.
+ * \param username
+ * The basis for the localpart of the desired Matrix ID. If omitted,
+ * the homeserver MUST generate a Matrix ID local part.
+ * \param password
+ * The desired password for the account.
+ * \param deviceId
+ * ID of the client device. If this does not correspond to a
+ * known client device, a new device will be created. The server
+ * will auto-generate a device_id if this is not specified.
+ * \param initialDeviceDisplayName
+ * A display name to assign to the newly-created device. Ignored
+ * if ``device_id`` corresponds to a known device.
+ * \param inhibitLogin
+ * If true, an ``access_token`` and ``device_id`` should not be
+ * returned from this call, therefore preventing an automatic
+ * login. Defaults to false.
+ */
+ explicit RegisterJob(const QString& kind = QStringLiteral("user"),
+ const Omittable<AuthenticationData>& auth = none,
+ Omittable<bool> bindEmail = none,
+ const QString& username = {},
+ const QString& password = {},
+ const QString& deviceId = {},
+ const QString& initialDeviceDisplayName = {},
+ Omittable<bool> inhibitLogin = none);
+
+ ~RegisterJob() override;
+
+ // Result properties
+
+ /// The fully-qualified Matrix user ID (MXID) that has been registered.
///
- /// 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. See the Identity Service API for
- /// further information.
- class RequestTokenToRegisterEmailJob : public BaseJob
- {
- public:
- /*! Begins the validation process for an email to be used during registration.
- * \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 RequestTokenToRegisterEmailJob(const QString& clientSecret,
- const QString& email,
- int sendAttempt,
- const QString& idServer,
- const QString& nextLink = {});
- ~RequestTokenToRegisterEmailJob() override;
-
- // Result properties
-
- /// An email has been sent to the specified address.
- /// Note that this may be an email containing the validation token or it
- /// may be informing the user of an error.
- const Sid& data() const;
-
- protected:
- Status parseJson(const QJsonDocument& data) override;
-
- private:
- class Private;
- QScopedPointer<Private> d;
- };
-
- /// Requests a validation token be sent to the given phone number for the
- /// purpose of registering an account
+ /// Any user ID returned by this API must conform to the grammar given in
+ /// the `Matrix specification
+ /// <https://matrix.org/docs/spec/appendices.html#user-identifiers>`_.
+ const QString& userId() const;
+ /// An access token for the account.
+ /// This access token can then be used to authorize other requests.
+ /// Required if the ``inhibit_login`` option is false.
+ const QString& accessToken() const;
+ /// The server_name of the homeserver on which the account has
+ /// been registered.
///
- /// 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. See the Identity Service API for
- /// further information.
- class RequestTokenToRegisterMSISDNJob : public BaseJob
- {
- public:
- /*! Requests a validation token be sent to the given phone number for the purpose of registering an 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 RequestTokenToRegisterMSISDNJob(const QString& clientSecret,
- const QString& country,
- const QString& phoneNumber,
+ /// **Deprecated**. Clients should extract the server_name from
+ /// ``user_id`` (by splitting at the first colon) if they require
+ /// it. Note also that ``homeserver`` is not spelt this way.
+ const QString& homeServer() const;
+ /// ID of the registered device. Will be the same as the
+ /// corresponding parameter in the request, if one was specified.
+ /// Required if the ``inhibit_login`` option is false.
+ const QString& deviceId() const;
+
+protected:
+ Status parseJson(const QJsonDocument& data) override;
+
+private:
+ class Private;
+ QScopedPointer<Private> d;
+};
+
+/// Begins the validation process for an email to be used during registration.
+/*!
+ * 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. See the Identity Service API for
+ * further information.
+ */
+class RequestTokenToRegisterEmailJob : public BaseJob
+{
+public:
+ /*! Begins the validation process for an email to be used during
+ * registration. \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 RequestTokenToRegisterEmailJob(const QString& clientSecret,
+ const QString& email,
+ int sendAttempt,
+ const QString& idServer,
+ const QString& nextLink = {});
+
+ ~RequestTokenToRegisterEmailJob() override;
+
+ // Result properties
+
+ /// An email has been sent to the specified address.
+ /// Note that this may be an email containing the validation token or it may
+ /// be informing the user of an error.
+ const Sid& data() const;
+
+protected:
+ Status parseJson(const QJsonDocument& data) override;
+
+private:
+ class Private;
+ QScopedPointer<Private> d;
+};
+
+/// Requests a validation token be sent to the given phone number for the
+/// purpose of registering an 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. See the Identity Service API for
+ * further information.
+ */
+class RequestTokenToRegisterMSISDNJob : public BaseJob
+{
+public:
+ /*! Requests a validation token be sent to the given phone number for the
+ * purpose of registering an 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 RequestTokenToRegisterMSISDNJob(const QString& clientSecret,
+ const QString& country,
+ const QString& phoneNumber,
+ int sendAttempt,
+ const QString& idServer,
+ const QString& nextLink = {});
+
+ ~RequestTokenToRegisterMSISDNJob() override;
+
+ // Result properties
+
+ /// An SMS message has been sent to the specified phone number.
+ /// Note that this may be an SMS message containing the validation token or
+ /// it may be informing the user of an error.
+ const Sid& data() const;
+
+protected:
+ Status parseJson(const QJsonDocument& data) override;
+
+private:
+ class Private;
+ QScopedPointer<Private> d;
+};
+
+/// Changes a user's password.
+/*!
+ * Changes the password for an account on this homeserver.
+ *
+ * This API endpoint uses the `User-Interactive Authentication API`_.
+ *
+ * An access token should be submitted to this endpoint if the client has
+ * an active session.
+ *
+ * The homeserver may change the flows available depending on whether a
+ * valid access token is provided.
+ */
+class ChangePasswordJob : public BaseJob
+{
+public:
+ /*! Changes a user's password.
+ * \param newPassword
+ * The new password for the account.
+ * \param auth
+ * Additional authentication information for the user-interactive
+ * authentication API.
+ */
+ explicit ChangePasswordJob(const QString& newPassword,
+ const Omittable<AuthenticationData>& auth = none);
+};
+
+/// Requests a validation token be sent to the given email address for the
+/// purpose of resetting a user's password
+/*!
+ * Proxies the Identity Service API ``validate/email/requestToken``, but
+ * first checks that the given email address **is** associated with an account
+ * on this homeserver. This API should be used to request
+ * validation tokens when authenticating for the
+ * `account/password` endpoint. This API's parameters and response are
+ * identical to that of the HS API |/register/email/requestToken|_ except that
+ * `M_THREEPID_NOT_FOUND` may be returned if no account matching the
+ * given email address could be found. The server may instead send an
+ * email to the given address prompting the user to create an account.
+ * `M_THREEPID_IN_USE` may not be returned.
+ *
+ * .. |/register/email/requestToken| replace:: ``/register/email/requestToken``
+ *
+ * .. _/register/email/requestToken:
+ * #post-matrix-client-r0-register-email-requesttoken
+ */
+class RequestTokenToResetPasswordEmailJob : public BaseJob
+{
+public:
+ /*! Requests a validation token be sent to the given email address for the
+ * purpose of resetting a user's password \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 RequestTokenToResetPasswordEmailJob(const QString& clientSecret,
+ const QString& email,
int sendAttempt,
const QString& idServer,
const QString& nextLink = {});
- ~RequestTokenToRegisterMSISDNJob() override;
-
- // Result properties
-
- /// An SMS message has been sent to the specified phone number.
- /// Note that this may be an SMS message containing the validation token
- /// or it may be informing the user of an error.
- const Sid& data() const;
- protected:
- Status parseJson(const QJsonDocument& data) override;
-
- private:
- class Private;
- QScopedPointer<Private> d;
- };
+ ~RequestTokenToResetPasswordEmailJob() 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;
+};
+
+/// Requests a validation token be sent to the given phone number for the
+/// purpose of resetting a user's password.
+/*!
+ * Proxies the Identity Service API ``validate/msisdn/requestToken``, but
+ * first checks that the given phone number **is** associated with an account
+ * on this homeserver. This API should be used to request
+ * validation tokens when authenticating for the
+ * `account/password` endpoint. This API's parameters and response are
+ * identical to that of the HS API |/register/msisdn/requestToken|_ except that
+ * `M_THREEPID_NOT_FOUND` may be returned if no account matching the
+ * given phone number could be found. The server may instead send an
+ * SMS message to the given address prompting the user to create an account.
+ * `M_THREEPID_IN_USE` may not be returned.
+ *
+ * .. |/register/msisdn/requestToken| replace:: ``/register/msisdn/requestToken``
+ *
+ * .. _/register/msisdn/requestToken:
+ * #post-matrix-client-r0-register-email-requesttoken
+ */
+class RequestTokenToResetPasswordMSISDNJob : public BaseJob
+{
+public:
+ /*! Requests a validation token be sent to the given phone number for the
+ * purpose of resetting a user's password. \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 RequestTokenToResetPasswordMSISDNJob(const QString& clientSecret,
+ const QString& country,
+ const QString& phoneNumber,
+ int sendAttempt,
+ const QString& idServer,
+ const QString& nextLink = {});
+
+ ~RequestTokenToResetPasswordMSISDNJob() 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;
+};
+
+/// Deactivate a user's account.
+/*!
+ * Deactivate the user's account, removing all ability for the user to
+ * login again.
+ *
+ * This API endpoint uses the `User-Interactive Authentication API`_.
+ *
+ * An access token should be submitted to this endpoint if the client has
+ * an active session.
+ *
+ * The homeserver may change the flows available depending on whether a
+ * valid access token is provided.
+ */
+class DeactivateAccountJob : public BaseJob
+{
+public:
+ /*! Deactivate a user's account.
+ * \param auth
+ * Additional authentication information for the user-interactive
+ * authentication API.
+ */
+ explicit DeactivateAccountJob(
+ const Omittable<AuthenticationData>& auth = none);
+};
+
+/// Checks to see if a username is available on the server.
+/*!
+ * Checks to see if a username is available, and valid, for the server.
+ *
+ * The server should check to ensure that, at the time of the request, the
+ * username requested is available for use. This includes verifying that an
+ * application service has not claimed the username and that the username
+ * fits the server's desired requirements (for example, a server could dictate
+ * that it does not permit usernames with underscores).
+ *
+ * Matrix clients may wish to use this API prior to attempting registration,
+ * however the clients must also be aware that using this API does not normally
+ * reserve the username. This can mean that the username becomes unavailable
+ * between checking its availability and attempting to register it.
+ */
+class CheckUsernameAvailabilityJob : public BaseJob
+{
+public:
+ /*! Checks to see if a username is available on the server.
+ * \param username
+ * The username to check the availability of.
+ */
+ explicit CheckUsernameAvailabilityJob(const QString& username);
+
+ /*! Construct a URL without creating a full-fledged job object
+ *
+ * This function can be used when a URL for
+ * CheckUsernameAvailabilityJob is necessary but the job
+ * itself isn't.
+ */
+ static QUrl makeRequestUrl(QUrl baseUrl, const QString& username);
+
+ ~CheckUsernameAvailabilityJob() override;
+
+ // Result properties
+
+ /// A flag to indicate that the username is available. This should always
+ /// be ``true`` when the server replies with 200 OK.
+ Omittable<bool> available() const;
+
+protected:
+ Status parseJson(const QJsonDocument& data) override;
+
+private:
+ class Private;
+ QScopedPointer<Private> d;
+};
- /// Changes a user's password.
- ///
- /// Changes the password for an account on this homeserver.
- ///
- /// This API endpoint uses the `User-Interactive Authentication API`_.
- ///
- /// An access token should be submitted to this endpoint if the client has
- /// an active session.
- ///
- /// The homeserver may change the flows available depending on whether a
- /// valid access token is provided.
- class ChangePasswordJob : public BaseJob
- {
- public:
- /*! Changes a user's password.
- * \param newPassword
- * The new password for the account.
- * \param auth
- * Additional authentication information for the user-interactive
- * authentication API.
- */
- explicit ChangePasswordJob(
- const QString& newPassword,
- const Omittable<AuthenticationData>& auth = none);
- };
-
- /// Requests a validation token be sent to the given email address for the
- /// purpose of resetting a user's password
- ///
- /// Proxies the Identity Service API ``validate/email/requestToken``, but
- /// first checks that the given email address **is** associated with an
- /// account on this homeserver. This API should be used to request
- /// validation tokens when authenticating for the
- /// `account/password` endpoint. This API's parameters and response are
- /// identical to that of the HS API |/register/email/requestToken|_ except
- /// that `M_THREEPID_NOT_FOUND` may be returned if no account matching the
- /// given email address could be found. The server may instead send an
- /// email to the given address prompting the user to create an account.
- /// `M_THREEPID_IN_USE` may not be returned.
- ///
- /// .. |/register/email/requestToken| replace::
- /// ``/register/email/requestToken``
- ///
- /// .. _/register/email/requestToken:
- /// #post-matrix-client-r0-register-email-requesttoken
- class RequestTokenToResetPasswordEmailJob : public BaseJob
- {
- public:
- /*! Requests a validation token be sent to the given email address for the purpose of resetting a user's password
- * \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 RequestTokenToResetPasswordEmailJob(
- const QString& clientSecret, const QString& email,
- int sendAttempt, const QString& idServer,
- const QString& nextLink = {});
- ~RequestTokenToResetPasswordEmailJob() 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;
- };
-
- /// Requests a validation token be sent to the given phone number for the
- /// purpose of resetting a user's password.
- ///
- /// Proxies the Identity Service API ``validate/msisdn/requestToken``, but
- /// first checks that the given phone number **is** associated with an
- /// account on this homeserver. This API should be used to request
- /// validation tokens when authenticating for the
- /// `account/password` endpoint. This API's parameters and response are
- /// identical to that of the HS API |/register/msisdn/requestToken|_ except
- /// that `M_THREEPID_NOT_FOUND` may be returned if no account matching the
- /// given phone number could be found. The server may instead send an
- /// SMS message to the given address prompting the user to create an
- /// account. `M_THREEPID_IN_USE` may not be returned.
- ///
- /// .. |/register/msisdn/requestToken| replace::
- /// ``/register/msisdn/requestToken``
- ///
- /// .. _/register/msisdn/requestToken:
- /// #post-matrix-client-r0-register-email-requesttoken
- class RequestTokenToResetPasswordMSISDNJob : public BaseJob
- {
- public:
- /*! Requests a validation token be sent to the given phone number for the purpose of resetting a user's password.
- * \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 RequestTokenToResetPasswordMSISDNJob(
- const QString& clientSecret, const QString& country,
- const QString& phoneNumber, int sendAttempt,
- const QString& idServer, const QString& nextLink = {});
- ~RequestTokenToResetPasswordMSISDNJob() 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;
- };
-
- /// Deactivate a user's account.
- ///
- /// Deactivate the user's account, removing all ability for the user to
- /// login again.
- ///
- /// This API endpoint uses the `User-Interactive Authentication API`_.
- ///
- /// An access token should be submitted to this endpoint if the client has
- /// an active session.
- ///
- /// The homeserver may change the flows available depending on whether a
- /// valid access token is provided.
- class DeactivateAccountJob : public BaseJob
- {
- public:
- /*! Deactivate a user's account.
- * \param auth
- * Additional authentication information for the user-interactive
- * authentication API.
- */
- explicit DeactivateAccountJob(
- const Omittable<AuthenticationData>& auth = none);
- };
-
- /// Checks to see if a username is available on the server.
- ///
- /// Checks to see if a username is available, and valid, for the server.
- ///
- /// The server should check to ensure that, at the time of the request, the
- /// username requested is available for use. This includes verifying that an
- /// application service has not claimed the username and that the username
- /// fits the server's desired requirements (for example, a server could
- /// dictate that it does not permit usernames with underscores).
- ///
- /// Matrix clients may wish to use this API prior to attempting
- /// registration, however the clients must also be aware that using this API
- /// does not normally reserve the username. This can mean that the username
- /// becomes unavailable between checking its availability and attempting to
- /// register it.
- class CheckUsernameAvailabilityJob : public BaseJob
- {
- public:
- /*! Checks to see if a username is available on the server.
- * \param username
- * The username to check the availability of.
- */
- explicit CheckUsernameAvailabilityJob(const QString& username);
-
- /*! Construct a URL without creating a full-fledged job object
- *
- * This function can be used when a URL for
- * CheckUsernameAvailabilityJob is necessary but the job
- * itself isn't.
- */
- static QUrl makeRequestUrl(QUrl baseUrl, const QString& username);
-
- ~CheckUsernameAvailabilityJob() override;
-
- // Result properties
-
- /// A flag to indicate that the username is available. This should
- /// always be ``true`` when the server replies with 200 OK.
- Omittable<bool> available() const;
-
- protected:
- Status parseJson(const QJsonDocument& data) override;
-
- private:
- class Private;
- QScopedPointer<Private> d;
- };
} // namespace QMatrixClient