diff options
Diffstat (limited to 'matrix-api.c')
-rw-r--r-- | matrix-api.c | 41 |
1 files changed, 35 insertions, 6 deletions
diff --git a/matrix-api.c b/matrix-api.c index 7d1b6f1..2eae2a9 100644 --- a/matrix-api.c +++ b/matrix-api.c @@ -601,14 +601,20 @@ void matrix_api_cancel(MatrixApiRequestData *data) gchar *_build_login_body(const gchar *username, const gchar *password, const gchar *device_id) { - JsonObject *body; + JsonObject *body, *ident; JsonNode *node; JsonGenerator *generator; gchar *result; body = json_object_new(); json_object_set_string_member(body, "type", "m.login.password"); - json_object_set_string_member(body, "user", username); + + ident = json_object_new(); + /* TODO: Support 3pid rather than username */ + json_object_set_string_member(ident, "type", "m.id.user"); + json_object_set_string_member(ident, "user", username); + json_object_set_object_member(body, "identifier", ident); + json_object_set_string_member(body, "password", password); json_object_set_string_member(body, "initial_device_display_name", "purple-matrix"); if (device_id != NULL) @@ -638,9 +644,7 @@ MatrixApiRequestData *matrix_api_password_login(MatrixConnectionData *conn, purple_debug_info("matrixprpl", "logging in %s\n", username); - // As per https://github.com/matrix-org/synapse/pull/459, synapse - // didn't expose login at 'r0'. - url = g_strconcat(conn->homeserver, "_matrix/client/api/v1/login", + url = g_strconcat(conn->homeserver, "_matrix/client/r0/login", NULL); json = _build_login_body(username, password, device_id); @@ -1007,6 +1011,31 @@ MatrixApiRequestData *matrix_api_download_thumb(MatrixConnectionData *conn, return fetch_data; } +/** + * Returns the userid for our access token, mostly as a check our token + * is valid. + */ +MatrixApiRequestData *matrix_api_whoami(MatrixConnectionData *conn, + MatrixApiCallback callback, + MatrixApiErrorCallback error_callback, + MatrixApiBadResponseCallback bad_response_callback, + gpointer user_data) +{ + GString *url; + MatrixApiRequestData *fetch_data; + + url = g_string_new(conn->homeserver); + g_string_append_printf(url, + "_matrix/client/r0/account/whoami?access_token=%s", + purple_url_encode(conn->access_token)); + + fetch_data = matrix_api_start(url->str, "GET", NULL, conn, callback, + error_callback, bad_response_callback, user_data, 10*1024); + g_string_free(url, TRUE); + + return fetch_data; +} + MatrixApiRequestData *matrix_api_upload_keys(MatrixConnectionData *conn, JsonObject *device_keys, JsonObject *one_time_keys, MatrixApiCallback callback, @@ -1045,7 +1074,7 @@ MatrixApiRequestData *matrix_api_upload_keys(MatrixConnectionData *conn, fetch_data = matrix_api_start_full(url->str, "POST", "Content-Type: application/json", json, NULL, 0, conn, callback, error_callback, bad_response_callback, - user_data, 1024); + user_data, 10*1024); g_free(json); g_string_free(url, TRUE); |