diff --git a/conduwuit-example.toml b/conduwuit-example.toml index 47d31aa7..8212628a 100644 --- a/conduwuit-example.toml +++ b/conduwuit-example.toml @@ -1799,6 +1799,11 @@ # #config_reload_signal = true +# Allow or disallow search engine crawling by adding +# `` to the index page. +# +#index_page_allow_indexing = false + [global.tls] # Path to a valid TLS certificate file. diff --git a/src/core/config/mod.rs b/src/core/config/mod.rs index 975dbb29..d8919291 100644 --- a/src/core/config/mod.rs +++ b/src/core/config/mod.rs @@ -2093,6 +2093,13 @@ pub struct Config { #[serde(default)] pub force_disable_first_run_mode: bool, + /// Allow or disallow search engine crawling by adding + /// `` to the index page. + /// + /// default: false + #[serde(default)] + pub index_page_allow_indexing: bool, + /// display: nested #[serde(default)] pub ldap: LdapConfig, diff --git a/src/web/mod.rs b/src/web/mod.rs index 3b910e73..886317bc 100644 --- a/src/web/mod.rs +++ b/src/web/mod.rs @@ -40,6 +40,7 @@ impl IntoResponse for WebError { struct Error { error: WebError, status: StatusCode, + allow_indexing: bool, } let status = match &self { | Self::ValidationError(_) @@ -50,7 +51,13 @@ impl IntoResponse for WebError { | _ => StatusCode::INTERNAL_SERVER_ERROR, }; - let template = Error { error: self, status }; + let template = Error { + error: self, + status, + // Statically set false to prevent error pages from being indexed and to prevent + // further errors if services.config is having issues. + allow_indexing: false, + }; if let Ok(body) = template.render() { (status, Html(body)).into_response() diff --git a/src/web/pages/index.rs b/src/web/pages/index.rs index 2935aa46..ba7fc4df 100644 --- a/src/web/pages/index.rs +++ b/src/web/pages/index.rs @@ -18,11 +18,13 @@ async fn index_handler( struct Index<'a> { server_name: &'a str, first_run: bool, + allow_indexing: bool, } let template = Index { server_name: services.globals.server_name().as_str(), first_run: services.firstrun.is_first_run(), + allow_indexing: services.config.index_page_allow_indexing, }; Ok(Html(template.render()?)) } diff --git a/src/web/pages/password_reset.rs b/src/web/pages/password_reset.rs index cc66d69f..3d95232e 100644 --- a/src/web/pages/password_reset.rs +++ b/src/web/pages/password_reset.rs @@ -27,6 +27,7 @@ struct PasswordResetQuery { struct PasswordReset<'a> { user_card: UserCard<'a>, body: PasswordResetBody, + allow_indexing: bool, } #[derive(Debug)] @@ -74,6 +75,7 @@ async fn password_reset_form( let template = PasswordReset { user_card, body: PasswordResetBody::Form(reset_form), + allow_indexing: services.config.index_page_allow_indexing, }; Ok(Html(template.render()?)) @@ -112,6 +114,7 @@ async fn post_password_reset( let template = PasswordReset { user_card, body: PasswordResetBody::Success, + allow_indexing: services.config.index_page_allow_indexing, }; Ok(Html(template.render()?).into_response()) diff --git a/src/web/pages/templates/_layout.html.j2 b/src/web/pages/templates/_layout.html.j2 index d8d3e0e9..f2db9c74 100644 --- a/src/web/pages/templates/_layout.html.j2 +++ b/src/web/pages/templates/_layout.html.j2 @@ -5,6 +5,9 @@