From 9a80f1c2a1b390147e4eab6a5fe2850e67cf61cb Mon Sep 17 00:00:00 2001 From: timedout Date: Mon, 27 Jul 2026 15:33:38 +0100 Subject: [PATCH 1/3] fix: Re-introduce registration alerts --- src/api/client/account/register.rs | 17 +++++++++++++++++ src/web/pages/account/register.rs | 9 ++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/api/client/account/register.rs b/src/api/client/account/register.rs index df5ee04db..4a3a61334 100644 --- a/src/api/client/account/register.rs +++ b/src/api/client/account/register.rs @@ -141,6 +141,23 @@ pub(crate) async fn register_route( }; debug_info!(%user_id, ?device, "New account created via legacy registration"); + // Only log if the user wasn't registered via an appservice. + if body.identity.is_none() { + let notice = if device.is_some() + && let Some(device_name) = body.initial_device_display_name.as_ref() + { + format!( + "New user \"{user_id}\" registered on this server from IP {client} and device \ + display name \"{device_name}\" via legacy registration", + ) + } else { + format!("New user \"{user_id}\" registered on this server via legacy registration.") + }; + info!("{notice}"); + if services.server.config.admin_room_notices { + services.admin.notice(¬ice).await; + } + } Ok(assign!(register::v3::Response::new(user_id), { access_token: token.map(DeviceToken::into_token), diff --git a/src/web/pages/account/register.rs b/src/web/pages/account/register.rs index 80cf8ac5a..7435c4643 100644 --- a/src/web/pages/account/register.rs +++ b/src/web/pages/account/register.rs @@ -6,7 +6,7 @@ use axum::{ response::{Redirect, Response}, routing::{get, on}, }; -use conduwuit_core::{config::TermsDocument, warn}; +use conduwuit_core::{config::TermsDocument, info, warn}; use conduwuit_service::{ mailer::messages, registration_tokens::ValidToken, @@ -523,6 +523,13 @@ async fn complete_registration( .mark_token_as_used(registration_token); } + let notice = format!("New user \"{user_id}\" registered on this server."); + + info!("{notice}"); + if services.server.config.admin_room_notices { + services.admin.notice(¬ice).await; + } + let user_session = UserSession { user_id, last_login: SystemTime::now() }; session_store From 4ccb4463b60a1d4dbfa03a5dd35939281d46db17 Mon Sep 17 00:00:00 2001 From: timedout Date: Mon, 27 Jul 2026 15:56:30 +0100 Subject: [PATCH 2/3] chore: Add newsfrag --- changelog.d/2057.bugfix.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/2057.bugfix.md diff --git a/changelog.d/2057.bugfix.md b/changelog.d/2057.bugfix.md new file mode 100644 index 000000000..46379bdd5 --- /dev/null +++ b/changelog.d/2057.bugfix.md @@ -0,0 +1 @@ +Re-introduced admin room registration alerts that were accidentally removed in the OAuth2 update. From 0c9617006355236467dfcd6be55572767f563c2c Mon Sep 17 00:00:00 2001 From: timedout Date: Mon, 27 Jul 2026 16:07:32 +0100 Subject: [PATCH 3/3] fix: Ensure client IP is logged in all registration alert paths --- src/api/client/account/register.rs | 5 ++++- src/web/pages/account/register.rs | 23 ++++++++++++++++++----- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/api/client/account/register.rs b/src/api/client/account/register.rs index 4a3a61334..6ebe98707 100644 --- a/src/api/client/account/register.rs +++ b/src/api/client/account/register.rs @@ -151,7 +151,10 @@ pub(crate) async fn register_route( display name \"{device_name}\" via legacy registration", ) } else { - format!("New user \"{user_id}\" registered on this server via legacy registration.") + format!( + "New user \"{user_id}\" registered on this server from IP {client} via legacy \ + registration." + ) }; info!("{notice}"); if services.server.config.admin_room_notices { diff --git a/src/web/pages/account/register.rs b/src/web/pages/account/register.rs index 7435c4643..145e22110 100644 --- a/src/web/pages/account/register.rs +++ b/src/web/pages/account/register.rs @@ -1,4 +1,4 @@ -use std::{collections::BTreeMap, time::SystemTime}; +use std::{collections::BTreeMap, net::IpAddr, time::SystemTime}; use axum::{ Extension, Router, @@ -6,6 +6,7 @@ use axum::{ response::{Redirect, Response}, routing::{get, on}, }; +use conduwuit_api::client_ip::ClientIp; use conduwuit_core::{config::TermsDocument, info, warn}; use conduwuit_service::{ mailer::messages, @@ -116,6 +117,7 @@ struct CompletedRegistration { async fn route_register( State(services): State, + ClientIp(client): ClientIp, // NOTE: Required for metadata. Extension(context): Extension, session_store: Session, Expect(Query(query)): Expect>, @@ -144,6 +146,7 @@ async fn route_register( session_store, form, query.next.clone(), + &client, ) .boxed() .await? @@ -276,6 +279,7 @@ struct RegisterEmailValidateQuery { async fn get_register_email_validate( State(services): State, + ClientIp(client): ClientIp, // NOTE: Required for metadata. Extension(context): Extension, session_store: Session, Expect(Query(RegisterEmailValidateQuery { @@ -303,8 +307,14 @@ async fn get_register_email_validate( let email = session.consume(); response!( - complete_registration(&services, session_store, completed_registration, Some(email)) - .await? + complete_registration( + &services, + session_store, + completed_registration, + Some(email), + &client + ) + .await? ) } @@ -314,6 +324,7 @@ async fn begin_registration( session_store: Session, form: RegistrationForm, next: Option, + client: &IpAddr, ) -> Result> { let open_registration = services .config @@ -496,7 +507,8 @@ async fn begin_registration( } else { // If email isn't required we can immediately complete registration Ok(response!( - complete_registration(services, session_store, completed_registration, None).await? + complete_registration(services, session_store, completed_registration, None, client) + .await? )) } } @@ -511,6 +523,7 @@ async fn complete_registration( next, }: CompletedRegistration, email: Option
, + client: &IpAddr, ) -> Result { services .users @@ -523,7 +536,7 @@ async fn complete_registration( .mark_token_as_used(registration_token); } - let notice = format!("New user \"{user_id}\" registered on this server."); + let notice = format!("New user \"{user_id}\" registered on this server from IP {client}."); info!("{notice}"); if services.server.config.admin_room_notices {