Skip to content

Commit ae2cc31

Browse files
committed
sdk: Ignore the sliding sync proxy value when using SSS.
1 parent e50a580 commit ae2cc31

File tree

1 file changed

+67
-18
lines changed

1 file changed

+67
-18
lines changed

crates/matrix-sdk/src/client/builder.rs

Lines changed: 67 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,7 @@ impl ClientBuilder {
450450

451451
let http_client = HttpClient::new(inner_http_client.clone(), self.request_config);
452452

453+
#[allow(unused_variables)]
453454
let (homeserver, well_known) = match homeserver_cfg {
454455
HomeserverConfig::Url(url) => (url, None),
455456

@@ -471,12 +472,19 @@ impl ClientBuilder {
471472
let mut sliding_sync_proxy =
472473
self.sliding_sync_proxy.as_ref().map(|url| Url::parse(url)).transpose()?;
473474

474-
#[allow(unused_variables)]
475-
if let Some(well_known) = well_known {
476-
#[cfg(feature = "experimental-sliding-sync")]
477-
if sliding_sync_proxy.is_none() {
478-
sliding_sync_proxy =
479-
well_known.sliding_sync_proxy.and_then(|p| Url::parse(&p.url).ok())
475+
#[cfg(feature = "experimental-sliding-sync")]
476+
if self.is_simplified_sliding_sync_enabled {
477+
// When using Simplified MSC3575, don't use a sliding sync proxy, allow the
478+
// requests to be sent directly to the homeserver.
479+
tracing::info!("Simplified MSC3575 is enabled, ignoring any sliding sync proxy.");
480+
sliding_sync_proxy = None;
481+
} else {
482+
// Otherwise, if a proxy wasn't set, use the one discovered from the well-known.
483+
if let Some(well_known) = well_known {
484+
if sliding_sync_proxy.is_none() {
485+
sliding_sync_proxy =
486+
well_known.sliding_sync_proxy.and_then(|p| Url::parse(&p.url).ok())
487+
}
480488
}
481489
}
482490

@@ -879,7 +887,7 @@ pub(crate) mod tests {
879887
#[async_test]
880888
async fn test_discovery_invalid_server() {
881889
// Given a new client builder.
882-
let mut builder = ClientBuilder::new();
890+
let mut builder = make_non_sss_client_builder();
883891

884892
// When building a client with an invalid server name.
885893
builder = builder.server_name_or_homeserver_url("⚠️ This won't work 🚫");
@@ -892,7 +900,7 @@ pub(crate) mod tests {
892900
#[async_test]
893901
async fn test_discovery_no_server() {
894902
// Given a new client builder.
895-
let mut builder = ClientBuilder::new();
903+
let mut builder = make_non_sss_client_builder();
896904

897905
// When building a client with a valid server name that doesn't exist.
898906
builder = builder.server_name_or_homeserver_url("localhost:3456");
@@ -908,7 +916,7 @@ pub(crate) mod tests {
908916
// Given a random web server that isn't a Matrix homeserver or hosting the
909917
// well-known file for one.
910918
let server = MockServer::start().await;
911-
let mut builder = ClientBuilder::new();
919+
let mut builder = make_non_sss_client_builder();
912920

913921
// When building a client with the server's URL.
914922
builder = builder.server_name_or_homeserver_url(server.uri());
@@ -922,7 +930,7 @@ pub(crate) mod tests {
922930
async fn test_discovery_direct_legacy() {
923931
// Given a homeserver without a well-known file.
924932
let homeserver = make_mock_homeserver().await;
925-
let mut builder = ClientBuilder::new();
933+
let mut builder = make_non_sss_client_builder();
926934

927935
// When building a client with the server's URL.
928936
builder = builder.server_name_or_homeserver_url(homeserver.uri());
@@ -938,7 +946,7 @@ pub(crate) mod tests {
938946
// Given a homeserver without a well-known file and with a custom sliding sync
939947
// proxy injected.
940948
let homeserver = make_mock_homeserver().await;
941-
let mut builder = ClientBuilder::new();
949+
let mut builder = make_non_sss_client_builder();
942950
#[cfg(feature = "experimental-sliding-sync")]
943951
{
944952
builder = builder.sliding_sync_proxy("https://localhost:1234");
@@ -958,7 +966,7 @@ pub(crate) mod tests {
958966
// Given a base server with a well-known file that has errors.
959967
let server = MockServer::start().await;
960968
let homeserver = make_mock_homeserver().await;
961-
let mut builder = ClientBuilder::new();
969+
let mut builder = make_non_sss_client_builder();
962970

963971
let well_known = make_well_known_json(&homeserver.uri(), None);
964972
let bad_json = well_known.to_string().replace(',', "");
@@ -985,7 +993,7 @@ pub(crate) mod tests {
985993
// doesn't support sliding sync.
986994
let server = MockServer::start().await;
987995
let homeserver = make_mock_homeserver().await;
988-
let mut builder = ClientBuilder::new();
996+
let mut builder = make_non_sss_client_builder();
989997

990998
Mock::given(method("GET"))
991999
.and(path("/.well-known/matrix/client"))
@@ -1011,7 +1019,7 @@ pub(crate) mod tests {
10111019
// sliding sync proxy.
10121020
let server = MockServer::start().await;
10131021
let homeserver = make_mock_homeserver().await;
1014-
let mut builder = ClientBuilder::new();
1022+
let mut builder = make_non_sss_client_builder();
10151023

10161024
Mock::given(method("GET"))
10171025
.and(path("/.well-known/matrix/client"))
@@ -1038,7 +1046,7 @@ pub(crate) mod tests {
10381046
// sliding sync proxy.
10391047
let server = MockServer::start().await;
10401048
let homeserver = make_mock_homeserver().await;
1041-
let mut builder = ClientBuilder::new();
1049+
let mut builder = make_non_sss_client_builder();
10421050

10431051
Mock::given(method("GET"))
10441052
.and(path("/.well-known/matrix/client"))
@@ -1061,6 +1069,33 @@ pub(crate) mod tests {
10611069
assert_eq!(client.sliding_sync_proxy(), Some("https://localhost:9012".parse().unwrap()));
10621070
}
10631071

1072+
#[async_test]
1073+
#[cfg(feature = "experimental-sliding-sync")]
1074+
async fn test_discovery_well_known_with_simplified_sliding_sync() {
1075+
// Given a base server with a well-known file that points to a homeserver with a
1076+
// sliding sync proxy.
1077+
let server = MockServer::start().await;
1078+
let homeserver = make_mock_homeserver().await;
1079+
let mut builder = make_non_sss_client_builder();
1080+
1081+
Mock::given(method("GET"))
1082+
.and(path("/.well-known/matrix/client"))
1083+
.respond_with(ResponseTemplate::new(200).set_body_json(make_well_known_json(
1084+
&homeserver.uri(),
1085+
Some("https://localhost:1234"),
1086+
)))
1087+
.mount(&server)
1088+
.await;
1089+
1090+
// When building a client for simplified sliding sync with the base server.
1091+
builder = builder.simplified_sliding_sync(true);
1092+
builder = builder.server_name_or_homeserver_url(server.uri());
1093+
let client = builder.build().await.unwrap();
1094+
1095+
// Then a client should not use the discovered sliding sync proxy.
1096+
assert!(client.sliding_sync_proxy().is_none());
1097+
}
1098+
10641099
/* Requires sliding sync */
10651100

10661101
#[async_test]
@@ -1070,7 +1105,7 @@ pub(crate) mod tests {
10701105
// doesn't support sliding sync.
10711106
let server = MockServer::start().await;
10721107
let homeserver = make_mock_homeserver().await;
1073-
let mut builder = ClientBuilder::new();
1108+
let mut builder = make_non_sss_client_builder();
10741109

10751110
Mock::given(method("GET"))
10761111
.and(path("/.well-known/matrix/client"))
@@ -1096,7 +1131,7 @@ pub(crate) mod tests {
10961131
// sliding sync proxy.
10971132
let server = MockServer::start().await;
10981133
let homeserver = make_mock_homeserver().await;
1099-
let mut builder = ClientBuilder::new();
1134+
let mut builder = make_non_sss_client_builder();
11001135

11011136
Mock::given(method("GET"))
11021137
.and(path("/.well-known/matrix/client"))
@@ -1121,7 +1156,7 @@ pub(crate) mod tests {
11211156
// Given a homeserver without a well-known file and with a custom sliding sync
11221157
// proxy injected.
11231158
let homeserver = make_mock_homeserver().await;
1124-
let mut builder = ClientBuilder::new();
1159+
let mut builder = make_non_sss_client_builder();
11251160
builder = builder.sliding_sync_proxy("https://localhost:1234");
11261161

11271162
// When building a client that requires sliding sync with the server's URL.
@@ -1174,4 +1209,18 @@ pub(crate) mod tests {
11741209
object
11751210
})
11761211
}
1212+
1213+
/// These tests were built with regular sliding sync in mind so until
1214+
/// we remove it and update the tests, this makes a builder with SSS
1215+
/// disabled.
1216+
fn make_non_sss_client_builder() -> ClientBuilder {
1217+
let mut builder = ClientBuilder::new();
1218+
1219+
#[cfg(feature = "experimental-sliding-sync")]
1220+
{
1221+
builder = builder.simplified_sliding_sync(false);
1222+
}
1223+
1224+
builder
1225+
}
11771226
}

0 commit comments

Comments
 (0)