diff --git a/conduwuit-example.toml b/conduwuit-example.toml index 8ea1d4789ce38905620a99fa4cb02bdf192a7620..0e718521a376c713845cd042606ef8f1cc3a1858 100644 --- a/conduwuit-example.toml +++ b/conduwuit-example.toml @@ -264,6 +264,7 @@ url_preview_check_root_domain = false #query_trusted_key_servers_first = true # List/vector of room **IDs** that conduwuit will make newly registered users join. +# The room IDs specified must be rooms that you have joined at least once on the server, and must be public. # # No default. #auto_join_rooms = [] diff --git a/src/service/admin/mod.rs b/src/service/admin/mod.rs index 4fcd45f8b44516599eb61105892362ee427c087b..1b30a33c18cd427fbe909373037cf68cf193d1ad 100644 --- a/src/service/admin/mod.rs +++ b/src/service/admin/mod.rs @@ -30,7 +30,9 @@ use super::pdu::PduBuilder; use crate::{ api::{ - client_server::{get_alias_helper, leave_all_rooms, leave_room, AUTO_GEN_PASSWORD_LENGTH}, + client_server::{ + get_alias_helper, join_room_by_id_helper, leave_all_rooms, leave_room, AUTO_GEN_PASSWORD_LENGTH, + }, server_server::parse_incoming_pdu, }, services, @@ -900,6 +902,35 @@ async fn process_admin_command(&self, command: AdminCommand, body: Vec<&str>) -> .expect("to json value always works"), )?; + if !services().globals.config.auto_join_rooms.is_empty() { + for room in &services().globals.config.auto_join_rooms { + if !services().rooms.state_cache.server_in_room(services().globals.server_name(), room)? { + warn!("Skipping room {room} to automatically join as we have never joined before."); + continue; + } + + if let Some(room_id_server_name) = room.server_name() { + match join_room_by_id_helper( + Some(&user_id), + room, + Some("Automatically joining this room upon registration".to_owned()), + &[room_id_server_name.to_owned(), services().globals.server_name().to_owned()], + None, + ) + .await + { + Ok(_) => { + info!("Automatically joined room {room} for user {user_id}"); + }, + Err(e) => { + // don't return this error so we don't fail registrations + error!("Failed to automatically join room {room} for user {user_id}: {e}"); + }, + }; + } + } + } + // we dont add a device since we're not the user, just the creator // Inhibit login does not work for guests