Skip to content

Commit dfdea0c

Browse files
pixlwavebnjbvr
andcommitted
sdk: Ignore the sliding sync proxy value when using SSS.
Update crates/matrix-sdk/src/client/builder.rs Co-authored-by: Benjamin Bouvier <public@benj.me> Signed-off-by: Doug <6060466+pixlwave@users.noreply.github.com>
1 parent 56e3780 commit dfdea0c

1 file changed

Lines changed: 62 additions & 15 deletions

File tree

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

Lines changed: 62 additions & 15 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,9 +472,14 @@ 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")]
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 if let Some(well_known) = well_known {
482+
// Otherwise, if a proxy wasn't set, use the one discovered from the well-known.
477483
if sliding_sync_proxy.is_none() {
478484
sliding_sync_proxy =
479485
well_known.sliding_sync_proxy.and_then(|p| Url::parse(&p.url).ok())
@@ -879,7 +885,7 @@ pub(crate) mod tests {
879885
#[async_test]
880886
async fn test_discovery_invalid_server() {
881887
// Given a new client builder.
882-
let mut builder = ClientBuilder::new();
888+
let mut builder = make_non_sss_client_builder();
883889

884890
// When building a client with an invalid server name.
885891
builder = builder.server_name_or_homeserver_url("⚠️ This won't work 🚫");
@@ -892,7 +898,7 @@ pub(crate) mod tests {
892898
#[async_test]
893899
async fn test_discovery_no_server() {
894900
// Given a new client builder.
895-
let mut builder = ClientBuilder::new();
901+
let mut builder = make_non_sss_client_builder();
896902

897903
// When building a client with a valid server name that doesn't exist.
898904
builder = builder.server_name_or_homeserver_url("localhost:3456");
@@ -908,7 +914,7 @@ pub(crate) mod tests {
908914
// Given a random web server that isn't a Matrix homeserver or hosting the
909915
// well-known file for one.
910916
let server = MockServer::start().await;
911-
let mut builder = ClientBuilder::new();
917+
let mut builder = make_non_sss_client_builder();
912918

913919
// When building a client with the server's URL.
914920
builder = builder.server_name_or_homeserver_url(server.uri());
@@ -922,7 +928,7 @@ pub(crate) mod tests {
922928
async fn test_discovery_direct_legacy() {
923929
// Given a homeserver without a well-known file.
924930
let homeserver = make_mock_homeserver().await;
925-
let mut builder = ClientBuilder::new();
931+
let mut builder = make_non_sss_client_builder();
926932

927933
// When building a client with the server's URL.
928934
builder = builder.server_name_or_homeserver_url(homeserver.uri());
@@ -938,7 +944,7 @@ pub(crate) mod tests {
938944
// Given a homeserver without a well-known file and with a custom sliding sync
939945
// proxy injected.
940946
let homeserver = make_mock_homeserver().await;
941-
let mut builder = ClientBuilder::new();
947+
let mut builder = make_non_sss_client_builder();
942948
#[cfg(feature = "experimental-sliding-sync")]
943949
{
944950
builder = builder.sliding_sync_proxy("https://localhost:1234");
@@ -958,7 +964,7 @@ pub(crate) mod tests {
958964
// Given a base server with a well-known file that has errors.
959965
let server = MockServer::start().await;
960966
let homeserver = make_mock_homeserver().await;
961-
let mut builder = ClientBuilder::new();
967+
let mut builder = make_non_sss_client_builder();
962968

963969
let well_known = make_well_known_json(&homeserver.uri(), None);
964970
let bad_json = well_known.to_string().replace(',', "");
@@ -985,7 +991,7 @@ pub(crate) mod tests {
985991
// doesn't support sliding sync.
986992
let server = MockServer::start().await;
987993
let homeserver = make_mock_homeserver().await;
988-
let mut builder = ClientBuilder::new();
994+
let mut builder = make_non_sss_client_builder();
989995

990996
Mock::given(method("GET"))
991997
.and(path("/.well-known/matrix/client"))
@@ -1011,7 +1017,7 @@ pub(crate) mod tests {
10111017
// sliding sync proxy.
10121018
let server = MockServer::start().await;
10131019
let homeserver = make_mock_homeserver().await;
1014-
let mut builder = ClientBuilder::new();
1020+
let mut builder = make_non_sss_client_builder();
10151021

10161022
Mock::given(method("GET"))
10171023
.and(path("/.well-known/matrix/client"))
@@ -1038,7 +1044,7 @@ pub(crate) mod tests {
10381044
// sliding sync proxy.
10391045
let server = MockServer::start().await;
10401046
let homeserver = make_mock_homeserver().await;
1041-
let mut builder = ClientBuilder::new();
1047+
let mut builder = make_non_sss_client_builder();
10421048

10431049
Mock::given(method("GET"))
10441050
.and(path("/.well-known/matrix/client"))
@@ -1061,6 +1067,33 @@ pub(crate) mod tests {
10611067
assert_eq!(client.sliding_sync_proxy(), Some("https://localhost:9012".parse().unwrap()));
10621068
}
10631069

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

10661099
#[async_test]
@@ -1070,7 +1103,7 @@ pub(crate) mod tests {
10701103
// doesn't support sliding sync.
10711104
let server = MockServer::start().await;
10721105
let homeserver = make_mock_homeserver().await;
1073-
let mut builder = ClientBuilder::new();
1106+
let mut builder = make_non_sss_client_builder();
10741107

10751108
Mock::given(method("GET"))
10761109
.and(path("/.well-known/matrix/client"))
@@ -1096,7 +1129,7 @@ pub(crate) mod tests {
10961129
// sliding sync proxy.
10971130
let server = MockServer::start().await;
10981131
let homeserver = make_mock_homeserver().await;
1099-
let mut builder = ClientBuilder::new();
1132+
let mut builder = make_non_sss_client_builder();
11001133

11011134
Mock::given(method("GET"))
11021135
.and(path("/.well-known/matrix/client"))
@@ -1121,7 +1154,7 @@ pub(crate) mod tests {
11211154
// Given a homeserver without a well-known file and with a custom sliding sync
11221155
// proxy injected.
11231156
let homeserver = make_mock_homeserver().await;
1124-
let mut builder = ClientBuilder::new();
1157+
let mut builder = make_non_sss_client_builder();
11251158
builder = builder.sliding_sync_proxy("https://localhost:1234");
11261159

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

0 commit comments

Comments
 (0)