diff --git a/.forgejo/workflows/release-image.yml b/.forgejo/workflows/release-image.yml index 92a5b7c4..55b303b2 100644 --- a/.forgejo/workflows/release-image.yml +++ b/.forgejo/workflows/release-image.yml @@ -180,7 +180,7 @@ jobs: file: "docker/Dockerfile" build-args: | GIT_COMMIT_HASH=${{ github.sha }}) - GIT_COMMIT_HASH_SHORT=${{ env.COMMIT_SHORT_SHA }}) + GIT_COMMIT_HASH_SHORT=${{ env.COMMIT_SHORT_SHA }} GIT_REMOTE_URL=${{github.event.repository.html_url }} GIT_REMOTE_COMMIT_URL=${{github.event.head_commit.url }} platforms: ${{ matrix.platform }} diff --git a/Cargo.lock b/Cargo.lock index 160be0c7..ec6e848d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -771,7 +771,7 @@ dependencies = [ [[package]] name = "conduwuit" -version = "0.5.0-rc.5" +version = "0.5.0-rc.6" dependencies = [ "clap", "conduwuit_admin", @@ -800,7 +800,7 @@ dependencies = [ [[package]] name = "conduwuit_admin" -version = "0.5.0-rc.5" +version = "0.5.0-rc.6" dependencies = [ "clap", "conduwuit_api", @@ -821,7 +821,7 @@ dependencies = [ [[package]] name = "conduwuit_api" -version = "0.5.0-rc.5" +version = "0.5.0-rc.6" dependencies = [ "async-trait", "axum", @@ -853,14 +853,14 @@ dependencies = [ [[package]] name = "conduwuit_build_metadata" -version = "0.5.0-rc.5" +version = "0.5.0-rc.6" dependencies = [ "built 0.8.0", ] [[package]] name = "conduwuit_core" -version = "0.5.0-rc.5" +version = "0.5.0-rc.6" dependencies = [ "argon2", "arrayvec", @@ -919,7 +919,7 @@ dependencies = [ [[package]] name = "conduwuit_database" -version = "0.5.0-rc.5" +version = "0.5.0-rc.6" dependencies = [ "async-channel", "conduwuit_core", @@ -937,7 +937,7 @@ dependencies = [ [[package]] name = "conduwuit_macros" -version = "0.5.0-rc.5" +version = "0.5.0-rc.6" dependencies = [ "itertools 0.14.0", "proc-macro2", @@ -947,7 +947,7 @@ dependencies = [ [[package]] name = "conduwuit_router" -version = "0.5.0-rc.5" +version = "0.5.0-rc.6" dependencies = [ "axum", "axum-client-ip", @@ -981,7 +981,7 @@ dependencies = [ [[package]] name = "conduwuit_service" -version = "0.5.0-rc.5" +version = "0.5.0-rc.6" dependencies = [ "async-trait", "base64 0.22.1", @@ -1018,7 +1018,7 @@ dependencies = [ [[package]] name = "conduwuit_web" -version = "0.5.0-rc.5" +version = "0.5.0-rc.6" dependencies = [ "askama", "axum", diff --git a/Cargo.toml b/Cargo.toml index 1abff107..af904447 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,7 +21,7 @@ license = "Apache-2.0" readme = "README.md" repository = "https://forgejo.ellis.link/continuwuation/continuwuity" rust-version = "1.86.0" -version = "0.5.0-rc.5" +version = "0.5.0-rc.6" [workspace.metadata.crane] name = "conduwuit" diff --git a/SECURITY.md b/SECURITY.md index a9aa183e..2869ce58 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -20,10 +20,10 @@ We may backport fixes to the previous release at our discretion, but we don't gu We appreciate the efforts of security researchers and the community in identifying and reporting vulnerabilities. To ensure that potential vulnerabilities are addressed properly, please follow these guidelines: -1. Contact members of the team over E2EE private message. +1. **Contact members of the team directly** over E2EE private message. - [@jade:ellis.link](https://matrix.to/#/@jade:ellis.link) - [@nex:nexy7574.co.uk](https://matrix.to/#/@nex:nexy7574.co.uk) -2. **Email the security team** directly at [security@continuwuity.org](mailto:security@continuwuity.org). This is not E2EE, so don't include sensitive details. +2. **Email the security team** at [security@continuwuity.org](mailto:security@continuwuity.org). This is not E2EE, so don't include sensitive details. 3. **Do not disclose the vulnerability publicly** until it has been addressed 4. **Provide detailed information** about the vulnerability, including: - A clear description of the issue @@ -48,7 +48,7 @@ When you report a security vulnerability: When security vulnerabilities are identified: -1. We will develop and test fixes in a private branch +1. We will develop and test fixes in a private fork 2. Security updates will be released as soon as possible 3. Release notes will include information about the vulnerabilities, avoiding details that could facilitate exploitation where possible 4. Critical security updates may be backported to the previous stable release diff --git a/docs/static/announcements.json b/docs/static/announcements.json index 9b97d091..7dd2fb72 100644 --- a/docs/static/announcements.json +++ b/docs/static/announcements.json @@ -4,6 +4,10 @@ { "id": 1, "message": "Welcome to Continuwuity! Important announcements about the project will appear here." + }, + { + "id": 2, + "message": "🎉 Continuwuity v0.5.0-rc.6 is now available! This release includes improved knock-restricted room handling, automatic support contact configuration, and a new HTML landing page. Check [the release notes for full details](https://forgejo.ellis.link/continuwuation/continuwuity/releases/tag/v0.5.0-rc.6) and upgrade instructions." } ] -} \ No newline at end of file +} diff --git a/docs/static/announcements.schema.json b/docs/static/announcements.schema.json index 95b1d153..cacd10c9 100644 --- a/docs/static/announcements.schema.json +++ b/docs/static/announcements.schema.json @@ -3,7 +3,7 @@ "$id": "https://continwuity.org/schema/announcements.schema.json", "type": "object", "properties": { - "updates": { + "announcements": { "type": "array", "items": { "type": "object", @@ -16,6 +16,10 @@ }, "date": { "type": "string" + }, + "mention_room": { + "type": "boolean", + "description": "Whether to mention the room (@room) when posting this announcement" } }, "required": [ @@ -26,6 +30,6 @@ } }, "required": [ - "updates" + "announcements" ] } \ No newline at end of file diff --git a/src/admin/debug/mod.rs b/src/admin/debug/mod.rs index 9b86f18c..1fd4e263 100644 --- a/src/admin/debug/mod.rs +++ b/src/admin/debug/mod.rs @@ -125,13 +125,13 @@ pub(super) enum DebugCommand { reset: bool, }, - /// - Verify json signatures + /// - Sign JSON blob /// /// This command needs a JSON blob provided in a Markdown code block below /// the command. SignJson, - /// - Verify json signatures + /// - Verify JSON signatures /// /// This command needs a JSON blob provided in a Markdown code block below /// the command. diff --git a/src/core/config/check.rs b/src/core/config/check.rs index ded9533d..3dc45e2f 100644 --- a/src/core/config/check.rs +++ b/src/core/config/check.rs @@ -219,6 +219,15 @@ pub fn check(config: &Config) -> Result { )); } + // Check if support contact information is configured + if config.well_known.support_email.is_none() && config.well_known.support_mxid.is_none() { + warn!( + "No support contact information (support_email or support_mxid) is configured in \ + the well_known section. Users in the admin room will be automatically listed as \ + support contacts in the /.well-known/matrix/support endpoint." + ); + } + if config .url_preview_domain_contains_allowlist .contains(&"*".to_owned()) diff --git a/src/service/announcements/mod.rs b/src/service/announcements/mod.rs index 4df8971b..2a70344d 100644 --- a/src/service/announcements/mod.rs +++ b/src/service/announcements/mod.rs @@ -20,7 +20,7 @@ use std::{sync::Arc, time::Duration}; use async_trait::async_trait; use conduwuit::{Result, Server, debug, info, warn}; use database::{Deserialized, Map}; -use ruma::events::room::message::RoomMessageEventContent; +use ruma::events::{Mentions, room::message::RoomMessageEventContent}; use serde::Deserialize; use tokio::{ sync::Notify, @@ -53,6 +53,8 @@ struct CheckForAnnouncementsResponseEntry { id: u64, date: Option, message: String, + #[serde(default, skip_serializing_if = "bool::not")] + mention_room: bool, } const CHECK_FOR_ANNOUNCEMENTS_URL: &str = @@ -139,19 +141,20 @@ impl Service { } else { info!("[announcements] {:#}", announcement.message); } + let mut message = RoomMessageEventContent::text_markdown(format!( + "### New announcement{}\n\n{}", + announcement + .date + .as_ref() + .map_or_else(String::new, |date| format!(" - `{date}`")), + announcement.message + )); - self.services - .admin - .send_message(RoomMessageEventContent::text_markdown(format!( - "### New announcement{}\n\n{}", - announcement - .date - .as_ref() - .map_or_else(String::new, |date| format!(" - `{date}`")), - announcement.message - ))) - .await - .ok(); + if announcement.mention_room { + message = message.add_mentions(Mentions::with_room_mention()); + } + + self.services.admin.send_message(message).await.ok(); } #[inline]