From 2425a4cb5021c0f1a4bfc993cff2b7dc6ac9d59a Mon Sep 17 00:00:00 2001
From: Philippe Loctaux
Date: Sun, 5 Mar 2023 23:36:33 +0100
Subject: [PATCH] ezidam: setup: redirect to /setup if setup is not complete,
create first user, redirect to / if setup is complete
---
crates/ezidam/src/routes.rs | 8 +++-
crates/ezidam/src/routes/root.rs | 18 ++++----
crates/ezidam/src/routes/setup.rs | 61 +++++++++++++++++++++++++
crates/ezidam/templates/setup.html.tera | 53 +++++++++++----------
4 files changed, 105 insertions(+), 35 deletions(-)
create mode 100644 crates/ezidam/src/routes/setup.rs
diff --git a/crates/ezidam/src/routes.rs b/crates/ezidam/src/routes.rs
index 2888439..1156525 100644
--- a/crates/ezidam/src/routes.rs
+++ b/crates/ezidam/src/routes.rs
@@ -1,6 +1,7 @@
use rocket::{Build, Rocket};
pub mod root;
+pub mod setup;
pub(self) mod prelude {
pub use crate::database::Database;
@@ -22,6 +23,9 @@ pub(self) mod prelude {
}
pub fn routes(rocket_builder: Rocket) -> Rocket {
- // Root
- rocket_builder.mount("/", root::routes())
+ rocket_builder
+ // Root
+ .mount("/", root::routes())
+ // Setup
+ .mount("/setup", setup::routes())
}
diff --git a/crates/ezidam/src/routes/root.rs b/crates/ezidam/src/routes/root.rs
index a104971..a29a399 100644
--- a/crates/ezidam/src/routes/root.rs
+++ b/crates/ezidam/src/routes/root.rs
@@ -1,9 +1,9 @@
use super::prelude::*;
-use rocket::{get, routes};
+use rocket::get;
use settings::Settings;
-pub fn routes() -> Vec {
- routes![logo, setup, homepage]
+pub fn routes() -> Vec {
+ routes![logo, homepage, redirect_to_setup]
}
#[get("/logo")]
@@ -39,11 +39,6 @@ mod test {
}
}
-#[get("/setup")]
-async fn setup() -> Page {
- Page::Setup()
-}
-
pub mod content {
use rocket::serde::Serialize;
@@ -54,7 +49,12 @@ pub mod content {
}
}
-#[get("/homepage")]
+#[get("/")]
+async fn redirect_to_setup(_setup: NeedSetup) -> Redirect {
+ Redirect::to(uri!("/setup"))
+}
+
+#[get("/", rank = 2)]
async fn homepage() -> Page {
Page::Homepage(content::Homepage {
abc: "string".to_string(),
diff --git a/crates/ezidam/src/routes/setup.rs b/crates/ezidam/src/routes/setup.rs
new file mode 100644
index 0000000..588d1d2
--- /dev/null
+++ b/crates/ezidam/src/routes/setup.rs
@@ -0,0 +1,61 @@
+use super::prelude::*;
+use rocket::{get, post};
+use settings::Settings;
+use users::User;
+
+pub fn routes() -> Vec {
+ routes![setup_completed, setup, create_first_account]
+}
+
+#[get("/")]
+async fn setup_completed(_setup: CompletedSetup) -> Redirect {
+ Redirect::to(uri!(super::root::homepage))
+}
+
+#[get("/", rank = 2)]
+async fn setup() -> Page {
+ Page::Setup
+}
+
+#[derive(Debug, FromForm)]
+pub struct CreateFirstAccount<'r> {
+ pub username: &'r str,
+ pub password: &'r str,
+}
+
+#[post("/", data = "