Restructure full_register arguments with names and defaults.
Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
@@ -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}`"))
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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?;
|
||||
}
|
||||
|
||||
|
||||
@@ -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>,
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user