From f911fc665c08ba33673f3521f1b7030c7af9f0d3 Mon Sep 17 00:00:00 2001 From: Philippe Loctaux Date: Fri, 31 Mar 2023 23:57:58 +0200 Subject: [PATCH] ezidam: apps: form, create new app --- crates/ezidam/src/menu/items/admin.rs | 2 +- crates/ezidam/src/page.rs | 15 ++-- crates/ezidam/src/routes/admin.rs | 13 ++- crates/ezidam/src/routes/admin/apps.rs | 65 +++++++++++++- .../templates/pages/admin/apps/list.html.tera | 10 ++- .../templates/pages/admin/apps/new.html.tera | 84 ++++++++++++++++++- 6 files changed, 175 insertions(+), 14 deletions(-) diff --git a/crates/ezidam/src/menu/items/admin.rs b/crates/ezidam/src/menu/items/admin.rs index 93da7dd..702f9a0 100644 --- a/crates/ezidam/src/menu/items/admin.rs +++ b/crates/ezidam/src/menu/items/admin.rs @@ -38,7 +38,7 @@ impl AdminMenu { MainItem { id: AdminMenu::Apps.id(), label: "Applications", - link: uri!(routes::admin::apps::admin_apps).to_string(), + link: uri!(routes::admin::apps::admin_apps_list).to_string(), icon: Icon::Apps.svg, sub: None, }, diff --git a/crates/ezidam/src/page.rs b/crates/ezidam/src/page.rs index 16045ea..0f7d5fd 100644 --- a/crates/ezidam/src/page.rs +++ b/crates/ezidam/src/page.rs @@ -18,7 +18,8 @@ pub enum Page { AdminDashboard(AdminDashboard), AdminSettingsBranding(AdminSettingsBranding), AdminSettingsSecurity(AdminSettingsSecurity), - AdminApps(AdminApps), + AdminAppsList(AdminAppsList), + AdminAppsNew(AdminAppsNew), } impl Page { @@ -33,7 +34,8 @@ impl Page { Page::AdminDashboard(_) => "pages/admin/dashboard", Page::AdminSettingsBranding(_) => "pages/admin/settings/branding", Page::AdminSettingsSecurity(_) => "pages/admin/settings/security", - Page::AdminApps(_) => "pages/admin/apps/list", + Page::AdminAppsList(_) => "pages/admin/apps/list", + Page::AdminAppsNew(_) => "pages/admin/apps/new", } } @@ -48,7 +50,8 @@ impl Page { Page::AdminDashboard(_) => "Admin dashboard", Page::AdminSettingsBranding(_) => "Server branding", Page::AdminSettingsSecurity(_) => "Server security", - Page::AdminApps(_) => "Applications", + Page::AdminAppsList(_) => "Applications", + Page::AdminAppsNew(_) => "New application", } } @@ -65,7 +68,8 @@ impl Page { Page::AdminDashboard(_) => Some(AdminMenu::Dashboard.into()), Page::AdminSettingsBranding(_) => Some(AdminMenu::Settings.into()), Page::AdminSettingsSecurity(_) => Some(AdminMenu::Settings.into()), - Page::AdminApps(_) => Some(AdminMenu::Apps.into()), + Page::AdminAppsList(_) => Some(AdminMenu::Apps.into()), + Page::AdminAppsNew(_) => Some(AdminMenu::Apps.into()), } } @@ -80,7 +84,8 @@ impl Page { Page::AdminDashboard(dashboard) => Box::new(dashboard), Page::AdminSettingsBranding(branding) => Box::new(branding), Page::AdminSettingsSecurity(security) => Box::new(security), - Page::AdminApps(apps) => Box::new(apps), + Page::AdminAppsList(list) => Box::new(list), + Page::AdminAppsNew(new) => Box::new(new), } } } diff --git a/crates/ezidam/src/routes/admin.rs b/crates/ezidam/src/routes/admin.rs index f966abc..1e763f2 100644 --- a/crates/ezidam/src/routes/admin.rs +++ b/crates/ezidam/src/routes/admin.rs @@ -14,7 +14,9 @@ pub fn routes() -> Vec { settings_update_branding, settings_security, settings_security_form, - admin_apps, + admin_apps_list, + admin_apps_new, + admin_apps_new_form, ] } @@ -49,8 +51,15 @@ pub mod content { #[derive(Serialize)] #[serde(crate = "rocket::serde")] #[derive(Clone)] - pub struct AdminApps { + pub struct AdminAppsList { pub user: JwtClaims, pub apps: Vec, } + + #[derive(Serialize)] + #[serde(crate = "rocket::serde")] + #[derive(Clone)] + pub struct AdminAppsNew { + pub user: JwtClaims, + } } diff --git a/crates/ezidam/src/routes/admin/apps.rs b/crates/ezidam/src/routes/admin/apps.rs index d9e7278..42f9970 100644 --- a/crates/ezidam/src/routes/admin/apps.rs +++ b/crates/ezidam/src/routes/admin/apps.rs @@ -1,16 +1,75 @@ use crate::routes::prelude::*; use apps::App; -use rocket::get; +use hash::{Secret, SecretString}; +use rocket::{get, post}; +use url::Url; #[get("/admin/apps")] -pub async fn admin_apps(mut db: Connection, admin: JwtAdmin) -> Result { +pub async fn admin_apps_list( + mut db: Connection, + admin: JwtAdmin, + flash: Option>, +) -> Result