Skip to content

Commit 9b25472

Browse files
committed
Merge remote-tracking branch 'origin/main' into quenting/dynamic-policy-data
2 parents 5a97ec5 + 4a1ec0b commit 9b25472

File tree

41 files changed

+753
-527
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+753
-527
lines changed

Cargo.lock

Lines changed: 15 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ version = "0.3.6"
7676

7777
# Utility to write and implement async traits
7878
[workspace.dependencies.async-trait]
79-
version = "0.1.86"
79+
version = "0.1.87"
8080

8181
# High-level error handling
8282
[workspace.dependencies.anyhow]
@@ -275,7 +275,7 @@ version = "0.5.0"
275275

276276
# JSON Schema generation
277277
[workspace.dependencies.schemars]
278-
version = "0.8.21"
278+
version = "0.8.22"
279279
features = ["url", "chrono", "preserve_order"]
280280

281281
# Query builder
@@ -316,7 +316,7 @@ features = ["derive"] # Most of the time, if we need serde, we need derive
316316

317317
# JSON serialization and deserialization
318318
[workspace.dependencies.serde_json]
319-
version = "1.0.139"
319+
version = "1.0.140"
320320
features = ["preserve_order"]
321321

322322
# SQL database support

crates/cli/src/app_state.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@ use mas_handlers::{
1515
};
1616
use mas_i18n::Translator;
1717
use mas_keystore::{Encrypter, Keystore};
18-
use mas_matrix::BoxHomeserverConnection;
19-
use mas_matrix_synapse::SynapseConnection;
18+
use mas_matrix::HomeserverConnection;
2019
use mas_policy::{Policy, PolicyFactory};
2120
use mas_router::UrlBuilder;
2221
use mas_storage::{BoxClock, BoxRepository, BoxRng, SystemClock};
@@ -37,7 +36,7 @@ pub struct AppState {
3736
pub cookie_manager: CookieManager,
3837
pub encrypter: Encrypter,
3938
pub url_builder: UrlBuilder,
40-
pub homeserver_connection: SynapseConnection,
39+
pub homeserver_connection: Arc<dyn HomeserverConnection>,
4140
pub policy_factory: Arc<PolicyFactory>,
4241
pub graphql_schema: GraphQLSchema,
4342
pub http_client: reqwest::Client,
@@ -210,9 +209,9 @@ impl FromRef<AppState> for Arc<PolicyFactory> {
210209
}
211210
}
212211

213-
impl FromRef<AppState> for BoxHomeserverConnection {
212+
impl FromRef<AppState> for Arc<dyn HomeserverConnection> {
214213
fn from_ref(input: &AppState) -> Self {
215-
Box::new(input.homeserver_connection.clone())
214+
Arc::clone(&input.homeserver_connection)
216215
}
217216
}
218217

crates/cli/src/commands/manage.rs

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ use mas_config::{
1717
use mas_data_model::{Device, TokenType, Ulid, UpstreamOAuthProvider, User};
1818
use mas_email::Address;
1919
use mas_matrix::HomeserverConnection;
20-
use mas_matrix_synapse::SynapseConnection;
2120
use mas_storage::{
2221
Clock, RepositoryAccess, SystemClock,
2322
compat::{CompatAccessTokenRepository, CompatSessionFilter, CompatSessionRepository},
@@ -33,7 +32,10 @@ use rand::{RngCore, SeedableRng};
3332
use sqlx::{Acquire, types::Uuid};
3433
use tracing::{error, info, info_span, warn};
3534

36-
use crate::util::{database_connection_from_config, password_manager_from_config};
35+
use crate::util::{
36+
database_connection_from_config, homeserver_connection_from_config,
37+
password_manager_from_config,
38+
};
3739

3840
const USER_ATTRIBUTES_HEADING: &str = "User attributes";
3941

@@ -491,12 +493,7 @@ impl Options {
491493
let matrix_config = MatrixConfig::extract(figment)?;
492494

493495
let password_manager = password_manager_from_config(&password_config).await?;
494-
let homeserver = SynapseConnection::new(
495-
matrix_config.homeserver,
496-
matrix_config.endpoint,
497-
matrix_config.secret,
498-
http_client,
499-
);
496+
let homeserver = homeserver_connection_from_config(&matrix_config, http_client);
500497
let mut conn = database_connection_from_config(&database_config).await?;
501498
let txn = conn.begin().await?;
502499
let mut repo = PgRepository::from_conn(txn);
@@ -746,7 +743,7 @@ impl std::fmt::Display for HumanReadable<&UpstreamOAuthProvider> {
746743
async fn check_and_normalize_username<'a>(
747744
localpart_or_mxid: &'a str,
748745
repo: &mut dyn RepositoryAccess<Error = DatabaseError>,
749-
homeserver: &SynapseConnection,
746+
homeserver: &dyn HomeserverConnection,
750747
) -> anyhow::Result<&'a str> {
751748
// XXX: this is a very basic MXID to localpart conversion
752749
// Strip any leading '@'
@@ -828,7 +825,7 @@ impl UserCreationRequest<'_> {
828825
}
829826

830827
/// Show the user creation request in a human-readable format
831-
fn show(&self, term: &Term, homeserver: &SynapseConnection) -> std::io::Result<()> {
828+
fn show(&self, term: &Term, homeserver: &dyn HomeserverConnection) -> std::io::Result<()> {
832829
let value_style = Style::new().green();
833830
let key_style = Style::new().bold();
834831
let warning_style = Style::new().italic().red().bright();

crates/cli/src/commands/server.rs

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ use mas_config::{
1515
};
1616
use mas_handlers::{ActivityTracker, CookieManager, Limiter, MetadataCache};
1717
use mas_listener::server::Server;
18-
use mas_matrix_synapse::SynapseConnection;
1918
use mas_router::UrlBuilder;
2019
use mas_storage::SystemClock;
2120
use mas_storage_pg::MIGRATOR;
@@ -26,9 +25,10 @@ use crate::{
2625
app_state::AppState,
2726
lifecycle::LifecycleManager,
2827
util::{
29-
database_pool_from_config, load_policy_factory_dynamic_data_continuously,
30-
mailer_from_config, password_manager_from_config, policy_factory_from_config,
31-
site_config_from_config, templates_from_config, test_mailer_in_background,
28+
database_pool_from_config, homeserver_connection_from_config,
29+
load_policy_factory_dynamic_data_continuously, mailer_from_config,
30+
password_manager_from_config, policy_factory_from_config, site_config_from_config,
31+
templates_from_config, test_mailer_in_background,
3232
},
3333
};
3434

@@ -161,12 +161,8 @@ impl Options {
161161

162162
let http_client = mas_http::reqwest_client();
163163

164-
let homeserver_connection = SynapseConnection::new(
165-
config.matrix.homeserver.clone(),
166-
config.matrix.endpoint.clone(),
167-
config.matrix.secret.clone(),
168-
http_client.clone(),
169-
);
164+
let homeserver_connection =
165+
homeserver_connection_from_config(&config.matrix, http_client.clone());
170166

171167
if !self.no_worker {
172168
let mailer = mailer_from_config(&config.email, &templates)?;

crates/cli/src/commands/syn2mas.rs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -220,12 +220,12 @@ impl Options {
220220

221221
// TODO how should we handle warnings at this stage?
222222

223-
let mut reader = SynapseReader::new(&mut syn_conn, true).await?;
223+
let reader = SynapseReader::new(&mut syn_conn, true).await?;
224224
let mut writer_mas_connections = Vec::with_capacity(NUM_WRITER_CONNECTIONS);
225225
for _ in 0..NUM_WRITER_CONNECTIONS {
226226
writer_mas_connections.push(database_connection_from_config(&config).await?);
227227
}
228-
let mut writer = MasWriter::new(mas_connection, writer_mas_connections).await?;
228+
let writer = MasWriter::new(mas_connection, writer_mas_connections).await?;
229229

230230
let clock = SystemClock::default();
231231
// TODO is this rng ok?
@@ -235,18 +235,15 @@ impl Options {
235235
// TODO progress reporting
236236
let mas_matrix = MatrixConfig::extract(figment)?;
237237
syn2mas::migrate(
238-
&mut reader,
239-
&mut writer,
238+
reader,
239+
writer,
240240
mas_matrix.homeserver,
241241
&clock,
242242
&mut rng,
243243
provider_id_mappings,
244244
)
245245
.await?;
246246

247-
reader.finish().await?;
248-
writer.finish().await?;
249-
250247
Ok(ExitCode::SUCCESS)
251248
}
252249
}

crates/cli/src/commands/worker.rs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,14 @@ use std::{process::ExitCode, time::Duration};
99
use clap::Parser;
1010
use figment::Figment;
1111
use mas_config::{AppConfig, ConfigurationSection};
12-
use mas_matrix_synapse::SynapseConnection;
1312
use mas_router::UrlBuilder;
1413
use tracing::{info, info_span};
1514

1615
use crate::{
1716
lifecycle::LifecycleManager,
1817
util::{
19-
database_pool_from_config, mailer_from_config, site_config_from_config,
20-
templates_from_config, test_mailer_in_background,
18+
database_pool_from_config, homeserver_connection_from_config, mailer_from_config,
19+
site_config_from_config, templates_from_config, test_mailer_in_background,
2120
},
2221
};
2322

@@ -58,12 +57,7 @@ impl Options {
5857
test_mailer_in_background(&mailer, Duration::from_secs(30));
5958

6059
let http_client = mas_http::reqwest_client();
61-
let conn = SynapseConnection::new(
62-
config.matrix.homeserver.clone(),
63-
config.matrix.endpoint.clone(),
64-
config.matrix.secret.clone(),
65-
http_client,
66-
);
60+
let conn = homeserver_connection_from_config(&config.matrix, http_client);
6761

6862
drop(config);
6963

crates/cli/src/util.rs

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,14 @@ use std::{sync::Arc, time::Duration};
99
use anyhow::Context;
1010
use mas_config::{
1111
AccountConfig, BrandingConfig, CaptchaConfig, DatabaseConfig, EmailConfig, EmailSmtpMode,
12-
EmailTransportKind, ExperimentalConfig, MatrixConfig, PasswordsConfig, PolicyConfig,
13-
TemplatesConfig,
12+
EmailTransportKind, ExperimentalConfig, HomeserverKind, MatrixConfig, PasswordsConfig,
13+
PolicyConfig, TemplatesConfig,
1414
};
1515
use mas_data_model::{SessionExpirationConfig, SiteConfig};
1616
use mas_email::{MailTransport, Mailer};
1717
use mas_handlers::passwords::PasswordManager;
18+
use mas_matrix::{HomeserverConnection, ReadOnlyHomeserverConnection};
19+
use mas_matrix_synapse::SynapseConnection;
1820
use mas_policy::PolicyFactory;
1921
use mas_router::UrlBuilder;
2022
use mas_storage::RepositoryAccess;
@@ -409,6 +411,32 @@ pub async fn load_policy_factory_dynamic_data(
409411
Ok(())
410412
}
411413

414+
/// Create a clonable, type-erased [`HomeserverConnection`] from the
415+
/// configuration
416+
pub fn homeserver_connection_from_config(
417+
config: &MatrixConfig,
418+
http_client: reqwest::Client,
419+
) -> Arc<dyn HomeserverConnection> {
420+
match config.kind {
421+
HomeserverKind::Synapse => Arc::new(SynapseConnection::new(
422+
config.homeserver.clone(),
423+
config.endpoint.clone(),
424+
config.secret.clone(),
425+
http_client,
426+
)),
427+
HomeserverKind::SynapseReadOnly => {
428+
let connection = SynapseConnection::new(
429+
config.homeserver.clone(),
430+
config.endpoint.clone(),
431+
config.secret.clone(),
432+
http_client,
433+
);
434+
let readonly = ReadOnlyHomeserverConnection::new(connection);
435+
Arc::new(readonly)
436+
}
437+
}
438+
}
439+
412440
#[cfg(test)]
413441
mod tests {
414442
use rand::SeedableRng;

0 commit comments

Comments
 (0)