add config option for allowing guests to auto join rooms

Signed-off-by: strawberry <strawberry@puppygock.gay>
This commit is contained in:
strawberry 2024-04-13 20:33:24 -04:00 committed by June
parent d95c02f575
commit eceef5efa2
4 changed files with 21 additions and 10 deletions

View file

@ -156,13 +156,17 @@ ip_range_denylist = [
### Moderation / Privacy / Security
# Set to true to allow user type "guest" registrations. Element attempts to register guest users automatically.
# For private homeservers, this is best at false.
# Defaults to false
allow_guest_registration = false
# Set to true to log guest registrations in the admin room.
# Defaults to false as it may be noisy or unnecessary.
log_guest_registrations = false
# Set to true to allow guest registrations/users to auto join any rooms specified in `auto_join_rooms`
# Defaults to false
allow_guests_auto_join_rooms = false
# Vector list of servers that conduwuit will refuse to download remote media from.
# No default.
# prevent_media_downloads_from = ["example.com", "example.local"]

View file

@ -319,7 +319,9 @@ pub async fn register_route(body: Ruma<register::v3::Request>) -> Result<registe
}
}
if !services().globals.config.auto_join_rooms.is_empty() {
if !services().globals.config.auto_join_rooms.is_empty() && !is_guest
|| (services().globals.allow_guests_auto_join_rooms() && is_guest)
{
for room in &services().globals.config.auto_join_rooms {
if !services()
.rooms
@ -331,7 +333,7 @@ pub async fn register_route(body: Ruma<register::v3::Request>) -> Result<registe
}
if let Some(room_id_server_name) = room.server_name() {
match join_room_by_id_helper(
if let Err(e) = join_room_by_id_helper(
Some(&user_id),
room,
Some("Automatically joining this room upon registration".to_owned()),
@ -340,13 +342,10 @@ pub async fn register_route(body: Ruma<register::v3::Request>) -> Result<registe
)
.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}");
},
// don't return this error so we don't fail registrations
error!("Failed to automatically join room {room} for user {user_id}: {e}");
} else {
info!("Automatically joined room {room} for user {user_id}");
};
}
}

View file

@ -260,6 +260,8 @@ pub struct Config {
pub allow_guest_registration: bool,
#[serde(default)]
pub log_guest_registrations: bool,
#[serde(default)]
pub allow_guests_auto_join_rooms: bool,
#[serde(default = "Vec::new")]
pub prevent_media_downloads_from: Vec<OwnedServerName>,
@ -515,6 +517,10 @@ impl fmt::Display for Config {
"Log guest registrations in admin room",
&self.log_guest_registrations.to_string(),
),
(
"Allow guests to auto join rooms",
&self.allow_guests_auto_join_rooms.to_string(),
),
("New user display name suffix", &self.new_user_displayname_suffix),
("Allow encryption", &self.allow_encryption.to_string()),
("Allow federation", &self.allow_federation.to_string()),

View file

@ -209,6 +209,8 @@ impl Service<'_> {
pub fn allow_guest_registration(&self) -> bool { self.config.allow_guest_registration }
pub fn allow_guests_auto_join_rooms(&self) -> bool { self.config.allow_guests_auto_join_rooms }
pub fn log_guest_registrations(&self) -> bool { self.config.log_guest_registrations }
pub fn allow_encryption(&self) -> bool { self.config.allow_encryption }