1
0
mirror of https://github.com/matrix-org/matrix-authentication-service.git synced 2025-08-07 17:03:01 +03:00

Move the SiteConfig to the data-model crate

This commit is contained in:
Quentin Gliech
2024-03-29 13:06:58 +01:00
parent 90080235da
commit f0899f17bd
6 changed files with 67 additions and 25 deletions

View File

@@ -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};

View File

@@ -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,
},

View File

@@ -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<Url>,
/// The URL to the terms of service.
pub tos_uri: Option<Url>,
/// Imprint to show in the footer.
pub imprint: Option<String>,
/// 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,
}

View File

@@ -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,
};

View File

@@ -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<Url>,
pub tos_uri: Option<Url>,
pub imprint: Option<String>,
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,

View File

@@ -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,