From f0899f17bd3af94c3d5bce370337e5a7e5fea908 Mon Sep 17 00:00:00 2001 From: Quentin Gliech Date: Fri, 29 Mar 2024 13:06:58 +0100 Subject: [PATCH] Move the SiteConfig to the data-model crate --- crates/cli/src/util.rs | 2 +- crates/data-model/src/lib.rs | 2 ++ crates/data-model/src/site_config.rs | 54 ++++++++++++++++++++++++++++ crates/handlers/src/lib.rs | 2 +- crates/handlers/src/site_config.rs | 30 +++++----------- crates/handlers/src/test_utils.rs | 2 +- 6 files changed, 67 insertions(+), 25 deletions(-) create mode 100644 crates/data-model/src/site_config.rs diff --git a/crates/cli/src/util.rs b/crates/cli/src/util.rs index 8f1d9fb3..0fb27e7e 100644 --- a/crates/cli/src/util.rs +++ b/crates/cli/src/util.rs @@ -20,7 +20,7 @@ use mas_config::{ ExperimentalConfig, MatrixConfig, PasswordsConfig, PolicyConfig, TemplatesConfig, }; use mas_email::{MailTransport, Mailer}; -use mas_handlers::{passwords::PasswordManager, ActivityTracker, SiteConfig}; +use mas_handlers::{passwords::PasswordManager, ActivityTracker, SiteConfig, SiteConfigExt}; use mas_policy::PolicyFactory; use mas_router::UrlBuilder; use mas_templates::{TemplateLoadingError, Templates}; diff --git a/crates/data-model/src/lib.rs b/crates/data-model/src/lib.rs index c79bbe2b..3a5b82e7 100644 --- a/crates/data-model/src/lib.rs +++ b/crates/data-model/src/lib.rs @@ -18,6 +18,7 @@ use thiserror::Error; pub(crate) mod compat; pub(crate) mod oauth2; +mod site_config; pub(crate) mod tokens; pub(crate) mod upstream_oauth2; pub(crate) mod user_agent; @@ -39,6 +40,7 @@ pub use self::{ AuthorizationCode, AuthorizationGrant, AuthorizationGrantStage, Client, DeviceCodeGrant, DeviceCodeGrantState, InvalidRedirectUriError, JwksOrJwksUri, Pkce, Session, SessionState, }, + site_config::SiteConfig, tokens::{ AccessToken, AccessTokenState, RefreshToken, RefreshTokenState, TokenFormatError, TokenType, }, diff --git a/crates/data-model/src/site_config.rs b/crates/data-model/src/site_config.rs new file mode 100644 index 00000000..cf36237d --- /dev/null +++ b/crates/data-model/src/site_config.rs @@ -0,0 +1,54 @@ +// Copyright 2023, 2024 The Matrix.org Foundation C.I.C. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use chrono::Duration; +use url::Url; + +/// Random site configuration we want accessible in various places. +#[allow(clippy::struct_excessive_bools)] +#[derive(Debug, Clone)] +pub struct SiteConfig { + /// Time-to-live of access tokens. + pub access_token_ttl: Duration, + + /// Time-to-live of compatibility access tokens. + pub compat_token_ttl: Duration, + + /// The server name, e.g. "matrix.org". + pub server_name: String, + + /// The URL to the privacy policy. + pub policy_uri: Option, + + /// The URL to the terms of service. + pub tos_uri: Option, + + /// Imprint to show in the footer. + pub imprint: Option, + + /// Whether password login is enabled. + pub password_login_enabled: bool, + + /// Whether password registration is enabled. + pub password_registration_enabled: bool, + + /// Whether users can change their email. + pub email_change_allowed: bool, + + /// Whether users can change their display name. + pub displayname_change_allowed: bool, + + /// Whether users can change their password. + pub password_change_allowed: bool, +} diff --git a/crates/handlers/src/lib.rs b/crates/handlers/src/lib.rs index 2fbf39ed..05bc1f41 100644 --- a/crates/handlers/src/lib.rs +++ b/crates/handlers/src/lib.rs @@ -91,7 +91,7 @@ pub use self::{ activity_tracker::{ActivityTracker, Bound as BoundActivityTracker}, graphql::schema as graphql_schema, preferred_language::PreferredLanguage, - site_config::SiteConfig, + site_config::{SiteConfig, SiteConfigExt}, upstream_oauth2::cache::MetadataCache, }; diff --git a/crates/handlers/src/site_config.rs b/crates/handlers/src/site_config.rs index 29d00191..46769433 100644 --- a/crates/handlers/src/site_config.rs +++ b/crates/handlers/src/site_config.rs @@ -12,30 +12,17 @@ // See the License for the specific language governing permissions and // limitations under the License. -use chrono::Duration; +pub use mas_data_model::SiteConfig; use mas_templates::{SiteBranding, SiteFeatures}; -use url::Url; -/// Random site configuration we don't now where to put yet. -#[allow(clippy::struct_excessive_bools)] -#[derive(Debug, Clone)] -pub struct SiteConfig { - pub access_token_ttl: Duration, - pub compat_token_ttl: Duration, - pub server_name: String, - pub policy_uri: Option, - pub tos_uri: Option, - pub imprint: Option, - pub password_login_enabled: bool, - pub password_registration_enabled: bool, - pub email_change_allowed: bool, - pub displayname_change_allowed: bool, - pub password_change_allowed: bool, +#[allow(clippy::module_name_repetitions)] +pub trait SiteConfigExt { + fn templates_branding(&self) -> SiteBranding; + fn templates_features(&self) -> SiteFeatures; } -impl SiteConfig { - #[must_use] - pub fn templates_branding(&self) -> SiteBranding { +impl SiteConfigExt for SiteConfig { + fn templates_branding(&self) -> SiteBranding { let mut branding = SiteBranding::new(self.server_name.clone()); if let Some(policy_uri) = &self.policy_uri { @@ -53,8 +40,7 @@ impl SiteConfig { branding } - #[must_use] - pub fn templates_features(&self) -> SiteFeatures { + fn templates_features(&self) -> SiteFeatures { SiteFeatures { password_registration: self.password_registration_enabled, password_login: self.password_login_enabled, diff --git a/crates/handlers/src/test_utils.rs b/crates/handlers/src/test_utils.rs index ea677a50..d0a81c5a 100644 --- a/crates/handlers/src/test_utils.rs +++ b/crates/handlers/src/test_utils.rs @@ -56,7 +56,7 @@ use crate::{ passwords::{Hasher, PasswordManager}, site_config::SiteConfig, upstream_oauth2::cache::MetadataCache, - ActivityTracker, BoundActivityTracker, + ActivityTracker, BoundActivityTracker, SiteConfigExt, }; // This might fail if it's not the first time it's being called, which is fine,