Skip to main content

tuwunel_admin/user/
create_user.rs

1use tuwunel_core::{Err, Result, utils};
2use tuwunel_service::users::Register;
3
4use super::AUTO_GEN_PASSWORD_LENGTH;
5use crate::{admin_command, utils::parse_local_user_id};
6
7#[admin_command]
8pub(super) async fn create_user(&self, username: String, password: Option<String>) -> Result {
9	// Validate user id
10	let user_id = parse_local_user_id(self.services, &username)?;
11
12	if let Err(e) = user_id.validate_strict()
13		&& self.services.config.emergency_password.is_none()
14	{
15		return Err!("Username {user_id} contains disallowed characters or spaces: {e}");
16	}
17
18	if self.services.users.exists(&user_id).await {
19		return Err!("User {user_id} already exists");
20	}
21
22	let password = password.unwrap_or_else(|| utils::random_string(AUTO_GEN_PASSWORD_LENGTH));
23
24	self.services
25		.users
26		.full_register(Register {
27			user_id: Some(&user_id),
28			password: Some(&password),
29			grant_first_user_admin: true,
30			..Default::default()
31		})
32		.await?;
33
34	write!(self, "Created user with user_id: {user_id} and password: `{password}`").await
35}