From 3037b105c7630c9f6c2f0beeccdfb71148caf4ad Mon Sep 17 00:00:00 2001 From: Jimmy Cuadra Date: Wed, 1 May 2019 21:14:59 -0700 Subject: [PATCH] Add homeserver discovery endpoint. --- src/unversioned.rs | 1 + src/unversioned/discover_homeserver.rs | 42 ++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 src/unversioned/discover_homeserver.rs diff --git a/src/unversioned.rs b/src/unversioned.rs index 6e13882c..e77bcd06 100644 --- a/src/unversioned.rs +++ b/src/unversioned.rs @@ -1,3 +1,4 @@ //! Endpoints that cannot change with new versions of the Matrix specification. pub mod get_supported_versions; +pub mod discover_homeserver; diff --git a/src/unversioned/discover_homeserver.rs b/src/unversioned/discover_homeserver.rs new file mode 100644 index 00000000..b6ca5715 --- /dev/null +++ b/src/unversioned/discover_homeserver.rs @@ -0,0 +1,42 @@ +//! [GET /.well-known/matrix/client](https://matrix.org/docs/spec/client_server/r0.4.0.html#get-well-known-matrix-client) + +use ruma_api_macros::ruma_api; +use serde::{Deserialize, Serialize}; +use url::Url; + +/// Information about a discovered homeserver. +#[derive(Clone, Debug, Deserialize, Hash, PartialEq, PartialOrd, Serialize)] +pub struct HomeserverInfo { + /// The base URL for the homeserver for client-server connections. + pub base_url: Url, +} + +/// Information about a discovered identity server. +#[derive(Clone, Debug, Deserialize, Hash, PartialEq, PartialOrd, Serialize)] +pub struct IdentityServerInfo { + /// The base URL for the identity server for client-server connections. + pub base_url: Url, +} + +ruma_api! { + metadata { + description: "Get the versions of the client-server API supported by this homeserver.", + method: GET, + name: "discover_homeserver", + path: "/.well-known/matrix/client", + rate_limited: false, + requires_authentication: false, + } + + request {} + + response { + /// Information about the homeserver to connect to. + #[serde(rename = "m.homeserver")] + pub homeserver: HomeserverInfo, + + /// Information about the identity server to connect to. + #[serde(rename = "m.identity_server")] + pub identity_server: Option, + } +}