From 306f2a60c4d67f5f01c439412527f1f4b2b1b53c Mon Sep 17 00:00:00 2001 From: Philippe Loctaux Date: Sat, 6 May 2023 00:26:38 +0200 Subject: [PATCH] admin/users: add new user --- crates/ezidam/src/page.rs | 5 ++ crates/ezidam/src/routes/admin.rs | 9 +++ crates/ezidam/src/routes/admin/users.rs | 56 +++++++++++++++++ .../templates/pages/admin/users/new.html.tera | 61 +++++++++++++++++++ crates/ezidam/templates/pages/setup.html.tera | 2 +- crates/id/src/username.rs | 2 +- crates/users/src/database.rs | 34 ++++++++++- crates/users/src/error.rs | 3 + 8 files changed, 167 insertions(+), 5 deletions(-) create mode 100644 crates/ezidam/templates/pages/admin/users/new.html.tera diff --git a/crates/ezidam/src/page.rs b/crates/ezidam/src/page.rs index 700d4e0..ad73035 100644 --- a/crates/ezidam/src/page.rs +++ b/crates/ezidam/src/page.rs @@ -30,6 +30,7 @@ pub enum Page { UserSecurityTotp(UserSecurityTotp), AuthorizeTotp(AuthorizeTotp), AdminUsersView(AdminUsersView), + AdminUsersNew(AdminUsersNew), } impl Page { @@ -56,6 +57,7 @@ impl Page { Page::UserSecurityTotp(_) => "pages/settings/totp", Page::AuthorizeTotp(_) => "pages/oauth/totp", Page::AdminUsersView(_) => "pages/admin/users/view", + Page::AdminUsersNew(_) => "pages/admin/users/new", } } @@ -82,6 +84,7 @@ impl Page { Page::UserSecurityTotp(_) => "Enable One-time password", Page::AuthorizeTotp(_) => "Verifying your account", Page::AdminUsersView(_) => "User info", + Page::AdminUsersNew(_) => "New user", } } @@ -110,6 +113,7 @@ impl Page { Page::UserSecurityTotp(_) => Some(UserMenu::Settings.into()), Page::AuthorizeTotp(_) => None, Page::AdminUsersView(_) => Some(AdminMenu::Users.into()), + Page::AdminUsersNew(_) => Some(AdminMenu::Users.into()), } } @@ -136,6 +140,7 @@ impl Page { Page::UserSecurityTotp(totp) => Box::new(totp), Page::AuthorizeTotp(totp) => Box::new(totp), Page::AdminUsersView(view) => Box::new(view), + Page::AdminUsersNew(new) => Box::new(new), } } } diff --git a/crates/ezidam/src/routes/admin.rs b/crates/ezidam/src/routes/admin.rs index 1d68779..5736756 100644 --- a/crates/ezidam/src/routes/admin.rs +++ b/crates/ezidam/src/routes/admin.rs @@ -24,6 +24,8 @@ pub fn routes() -> Vec { admin_apps_new_secret, admin_apps_archive, admin_users_list, + admin_users_new, + admin_users_new_form, admin_users_view, admin_users_archive, admin_users_password_reset, @@ -103,4 +105,11 @@ pub mod content { pub local: User, pub password_recover_expiration: Option, } + + #[derive(Serialize)] + #[serde(crate = "rocket::serde")] + #[derive(Clone)] + pub struct AdminUsersNew { + pub user: JwtClaims, + } } diff --git a/crates/ezidam/src/routes/admin/users.rs b/crates/ezidam/src/routes/admin/users.rs index 6a0b029..f1337c4 100644 --- a/crates/ezidam/src/routes/admin/users.rs +++ b/crates/ezidam/src/routes/admin/users.rs @@ -30,6 +30,62 @@ pub async fn admin_users_list( .unwrap_or_else(|| page.into())) } +#[get("/admin/users/new")] +pub async fn admin_users_new(admin: JwtAdmin, flash: Option>) -> Result