Restructure full_register arguments with names and defaults.

Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
Jason Volk
2025-12-23 02:50:56 +00:00
parent 5b0dfaeef6
commit 4150b917d8
5 changed files with 58 additions and 16 deletions

View File

@@ -17,7 +17,7 @@ use tuwunel_core::{
matrix::{Event, pdu::PduBuilder},
utils::{self, ReadyExt},
};
use tuwunel_service::Services;
use tuwunel_service::{Services, users::Register};
use crate::{
admin_command, get_room_info,
@@ -63,7 +63,12 @@ pub(super) async fn create_user(&self, username: String, password: Option<String
self.services
.users
.full_register(&user_id, Some(&password), None, None, false, true)
.full_register(Register {
user_id: Some(&user_id),
password: Some(&password),
grant_first_user_admin: true,
..Default::default()
})
.await?;
self.write_str(&format!("Created user with user_id: {user_id} and password: `{password}`"))

View File

@@ -2,19 +2,18 @@ use std::fmt::Write;
use axum::extract::State;
use axum_client_ip::InsecureClientIp;
use register::RegistrationKind;
use ruma::{
UserId,
api::client::{
account::{
check_registration_token_validity, get_username_availability,
register::{self, LoginType},
register::{self, LoginType, RegistrationKind},
},
uiaa::{AuthFlow, AuthType, UiaaInfo},
},
};
use tuwunel_core::{Err, Error, Result, debug_info, debug_warn, info, utils};
use tuwunel_service::users::device::generate_refresh_token;
use tuwunel_service::users::{Register, device::generate_refresh_token};
use super::SESSION_ID_LENGTH;
use crate::Ruma;
@@ -337,7 +336,14 @@ pub(crate) async fn register_route(
services
.users
.full_register(&user_id, password, None, body.appservice_info.as_ref(), is_guest, true)
.full_register(Register {
user_id: Some(&user_id),
password,
appservice_info: body.appservice_info.as_ref(),
is_guest,
grant_first_user_admin: true,
..Default::default()
})
.await?;
if (!is_guest && body.inhibit_login)

View File

@@ -1,7 +1,7 @@
use futures::FutureExt;
use ruma::{OwnedUserId, UserId};
use tuwunel_core::{Err, Result, debug};
use tuwunel_service::Services;
use tuwunel_service::{Services, users::Register};
use super::password_login;
@@ -51,7 +51,12 @@ pub(super) async fn ldap_login(
if !services.users.exists(lowercased_user_id).await {
services
.users
.full_register(lowercased_user_id, Some("*"), Some("ldap"), None, false, false)
.full_register(Register {
user_id: Some(lowercased_user_id),
password: Some("*"),
origin: Some("ldap"),
..Default::default()
})
.await?;
}

View File

@@ -22,7 +22,7 @@ use tuwunel_core::{
};
use tuwunel_database::{Deserialized, Json, Map};
pub use self::keys::parse_master_key;
pub use self::{keys::parse_master_key, register::Register};
pub struct Service {
services: Arc<crate::services::OnceServices>,

View File

@@ -6,19 +6,45 @@ use tuwunel_core::{Err, Result, error, implement, info, is_equal_to, warn};
use crate::appservice::RegistrationInfo;
#[derive(Debug, Default)]
pub struct Register<'a> {
pub user_id: Option<&'a UserId>,
pub username: Option<&'a str>,
pub password: Option<&'a str>,
pub origin: Option<&'a str>,
pub appservice_info: Option<&'a RegistrationInfo>,
pub is_guest: bool,
pub grant_first_user_admin: bool,
}
/// Fully register a local user
///
/// Returns a device id and access token for the registered user
#[implement(super::Service)]
#[tracing::instrument(level = "info", skip(self))]
pub async fn full_register(
&self,
user_id: &UserId,
password: Option<&str>,
origin: Option<&str>,
appservice_info: Option<&RegistrationInfo>,
is_guest: bool,
grant_admin: bool,
Register {
username,
user_id,
password,
origin,
appservice_info,
is_guest,
grant_first_user_admin,
}: Register<'_>,
) -> Result {
let ref user_id = user_id
.map(ToOwned::to_owned)
.map(Ok)
.or_else(|| {
username.map(|username| {
UserId::parse_with_server_name(username, self.services.globals.server_name())
})
})
.transpose()?
.expect("Caller failed to supply either user_id or username parameter");
if !self.services.globals.user_is_local(user_id) {
return Err!("Cannot register remote user");
}
@@ -80,7 +106,7 @@ pub async fn full_register(
// users
// Note: the server user is generated first
if !is_guest
&& grant_admin
&& grant_first_user_admin
&& self.services.config.grant_admin_to_first_user
&& let Ok(admin_room) = self.services.admin.get_admin_room().await
&& self