diff --git a/matrix_sdk/examples/wasm_command_bot/src/lib.rs b/matrix_sdk/examples/wasm_command_bot/src/lib.rs index 40b178d4..a62f3b95 100644 --- a/matrix_sdk/examples/wasm_command_bot/src/lib.rs +++ b/matrix_sdk/examples/wasm_command_bot/src/lib.rs @@ -1,4 +1,4 @@ -#![type_length_limit = "1700984"] +#![type_length_limit = "1702124"] use matrix_sdk::{ api::r0::sync::sync_events::Response as SyncResponse, diff --git a/matrix_sdk/src/client.rs b/matrix_sdk/src/client.rs index fb62ee74..3a33a60a 100644 --- a/matrix_sdk/src/client.rs +++ b/matrix_sdk/src/client.rs @@ -727,11 +727,12 @@ impl Client { /// # Examples /// ```no_run /// use matrix_sdk::Client; + /// # use std::convert::TryInto; /// # use url::Url; /// # let homeserver = Url::parse("http://example.com").unwrap(); /// # let limit = Some(10); /// # let since = Some("since token"); - /// # let server = Some("server name"); + /// # let server = Some("servername.com".try_into().unwrap()); /// /// let mut client = Client::new(homeserver).unwrap(); /// # use futures::executor::block_on; @@ -744,7 +745,7 @@ impl Client { &self, limit: Option, since: Option<&str>, - server: Option<&str>, + server: Option<&ServerName>, ) -> Result { let limit = limit.map(|n| UInt::try_from(n).ok()).flatten(); diff --git a/matrix_sdk/src/error.rs b/matrix_sdk/src/error.rs index d7fd62ca..bdca9912 100644 --- a/matrix_sdk/src/error.rs +++ b/matrix_sdk/src/error.rs @@ -37,6 +37,10 @@ pub enum Error { #[error("the queried endpoint requires authentication but was called before logging in")] AuthenticationRequired, + /// Queried endpoint is not meant for clients. + #[error("the queried endpoint is not meant for clients")] + NotClientRequest, + /// An error at the HTTP layer. #[error(transparent)] Reqwest(#[from] ReqwestError), diff --git a/matrix_sdk/src/http_client.rs b/matrix_sdk/src/http_client.rs index 7ef485c0..67c9fee4 100644 --- a/matrix_sdk/src/http_client.rs +++ b/matrix_sdk/src/http_client.rs @@ -19,7 +19,9 @@ use reqwest::{Client, Response}; use tracing::trace; use url::Url; -use matrix_sdk_common::{api::r0::media::create_content, locks::RwLock, FromHttpResponseError}; +use matrix_sdk_common::{ + api::r0::media::create_content, locks::RwLock, AuthScheme, FromHttpResponseError, +}; use matrix_sdk_common_macros::async_trait; use crate::{ClientConfig, Error, OutgoingRequest, Result, Session}; @@ -91,16 +93,18 @@ impl HttpClient { ) -> Result>> { let mut request = { let read_guard; - let access_token = if Request::METADATA.requires_authentication { - read_guard = session.read().await; + let access_token = match Request::METADATA.authentication { + AuthScheme::AccessToken => { + read_guard = session.read().await; - if let Some(session) = read_guard.as_ref() { - Some(session.access_token.as_str()) - } else { - return Err(Error::AuthenticationRequired); + if let Some(session) = read_guard.as_ref() { + Some(session.access_token.as_str()) + } else { + return Err(Error::AuthenticationRequired); + } } - } else { - None + AuthScheme::None => None, + _ => return Err(Error::NotClientRequest), }; request.try_into_http_request(&self.homeserver.to_string(), access_token)? diff --git a/matrix_sdk_common/Cargo.toml b/matrix_sdk_common/Cargo.toml index 181c199d..6eb38e5d 100644 --- a/matrix_sdk_common/Cargo.toml +++ b/matrix_sdk_common/Cargo.toml @@ -21,7 +21,7 @@ js_int = "0.1.9" [dependencies.ruma] version = "0.0.1" git = "https://github.com/ruma/ruma" -rev = "4a9b1aeb3c87bd8574391d7084ec5bf109f7d363" +rev = "3869d75837b7aab60eef58fc834e498317d1e4a4" features = ["client-api", "unstable-pre-spec", "unstable-exhaustive-types"] [target.'cfg(not(target_arch = "wasm32"))'.dependencies] diff --git a/matrix_sdk_common/src/lib.rs b/matrix_sdk_common/src/lib.rs index bc6430cf..6e718e68 100644 --- a/matrix_sdk_common/src/lib.rs +++ b/matrix_sdk_common/src/lib.rs @@ -5,9 +5,9 @@ pub use ruma::{ api::{ client as api, error::{FromHttpRequestError, FromHttpResponseError, IntoHttpError, ServerError}, - EndpointError, Outgoing, OutgoingRequest, + AuthScheme, EndpointError, OutgoingRequest, }, - directory, encryption, events, identifiers, presence, push, thirdparty, Raw, + directory, encryption, events, identifiers, presence, push, thirdparty, Outgoing, Raw, }; pub use uuid;