diff --git a/src/api/client/account.rs b/src/api/client/account.rs index ca0be346..e4d008b3 100644 --- a/src/api/client/account.rs +++ b/src/api/client/account.rs @@ -252,6 +252,13 @@ pub(crate) async fn register_route( } } + // Don't allow registration with user IDs that aren't local + if !services.globals.user_is_local(&user_id) { + return Err!(Request(InvalidUsername( + "Username {body_username} is not local to this server" + ))); + } + user_id }, | Err(e) => { diff --git a/src/service/users/mod.rs b/src/service/users/mod.rs index 463fd9b2..1b96203c 100644 --- a/src/service/users/mod.rs +++ b/src/service/users/mod.rs @@ -184,6 +184,12 @@ impl Service { password: Option<&str>, origin: Option<&str>, ) -> Result<()> { + if !self.services.globals.user_is_local(user_id) + && (password.is_some() || origin.is_some()) + { + return Err!("Cannot create a nonlocal user with a set password or origin"); + } + self.db .userid_origin .insert(user_id, origin.unwrap_or("password"));