aboutsummaryrefslogtreecommitdiff
path: root/lib/csapi/presence.h
blob: 52445205866631e5965bd5a6f4828da8dc875a8a (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
/******************************************************************************
 * THIS FILE IS GENERATED - ANY EDITS WILL BE OVERWRITTEN
 */

#pragma once

#include "csapi/definitions/user_identifier.h"
#include "csapi/definitions/wellknown/full.h"

#include "jobs/basejob.h"

namespace Quotient {

/*! \brief Get the supported login types to authenticate users
 *
 * Gets the homeserver's supported login types to authenticate users. Clients
 * should pick one of these and supply it as the `type` when logging in.
 */
class QUOTIENT_API GetLoginFlowsJob : public BaseJob {
public:
    // Inner data structures

    /// Gets the homeserver's supported login types to authenticate users.
    /// Clients should pick one of these and supply it as the `type` when
    /// logging in.
    struct LoginFlow {
        /// The login type. This is supplied as the `type` when
        /// logging in.
        QString type;
    };

    // Construction/destruction

    /// Get the supported login types to authenticate users
    explicit GetLoginFlowsJob();

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

    // Result properties

    /// The homeserver's supported login types
    QVector<LoginFlow> flows() const
    {
        return loadFromJson<QVector<LoginFlow>>("flows"_ls);
    }
};

template <>
struct JsonObjectConverter<GetLoginFlowsJob::LoginFlow> {
    static void fillFrom(const 
>result) { fromJson(jo.value("type"_ls), result.type); } }; /*! \brief Authenticates the user. * * Authenticates the user, and issues an access token they can * use to authorize themself in subsequent requests. * * If the client does not supply a `device_id`, the server must * auto-generate one. * * 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](/client-server-api/#relationship-between-access-tokens-and-devices). */ class QUOTIENT_API LoginJob : public BaseJob { public: /*! \brief Authenticates the user. * * \param type * The login type being used. * * \param identifier * Authenticates the user, and issues an access token they can * use to authorize themself in subsequent requests. * * If the client does not supply a `device_id`, the server must * auto-generate one. * * 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](/client-server-api/#relationship-between-access-tokens-and-devices). * * \param password * Required when `type` is `m.login.password`. The user's * password. * * \param token * Required when `type` is `m.login.token`. Part of Token-based login. * * \param deviceId * ID of the client device. If this does not correspond to a * known client device, a new device will be created. The given * device ID must not be the same as a * [cross-signing](/client-server-api/#cross-signing) key ID. * 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. */ explicit LoginJob(const QString& type, const Omittable<UserIdentifier>& identifier = none, const QString& password = {}, const QString& token = {}, const QString& deviceId = {}, const QString& initialDeviceDisplayName = {}); // Result properties /// The fully-qualified Matrix ID for the account. QString userId() const { return loadFromJson<QString>("user_id"_ls); } /// An access token for the account. /// This access token can then be used to authorize other requests. QString accessToken() const { return loadFromJson<QString>("access_token"_ls); } /// 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. QString homeServer() const { return loadFromJson<QString>("home_server"_ls); } /// ID of the logged-in device. Will be the same as the /// corresponding parameter in the request, if one was specified. QString deviceId() const { return loadFromJson<QString>("device_id"_ls); } /// Optional client configuration provided by the server. If present, /// clients SHOULD use the provided object to reconfigure themselves, /// optionally validating the URLs within. This object takes the same /// form as the one returned from .well-known autodiscovery. Omittable<DiscoveryInformation> wellKnown() const { return loadFromJson<Omittable<DiscoveryInformation>>("well_known"_ls); } }; } // namespace Quotient