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