From ae7ef10b67737f08a86743f687bca30a12e9e17a Mon Sep 17 00:00:00 2001 From: salmonik Date: Sun, 12 Jul 2026 19:38:03 +0200 Subject: first stable --- src/routes/dashboard.rs | 68 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/routes/dashboard.rs (limited to 'src/routes/dashboard.rs') diff --git a/src/routes/dashboard.rs b/src/routes/dashboard.rs new file mode 100644 index 0000000..7d5d3e4 --- /dev/null +++ b/src/routes/dashboard.rs @@ -0,0 +1,68 @@ +use askama::Template; +use axum::{ + Router, + extract::State, + response::{Html, IntoResponse}, + routing::get, +}; + +use crate::auth::CurrentUser; +use crate::routes::AppState; + +#[derive(Template)] +#[template(path = "dashboard.html")] +struct DashboardTemplate { + username: String, + is_superuser: bool, + password_change_required: bool, + active_instance: Option, + container_state: String, +} + +#[derive(Clone)] +struct ActiveInstanceInfo { + name: String, + version: String, + server_type: String, + max_players: i32, +} + +pub fn router() -> Router { + Router::new().route("/", get(dashboard)) +} + +async fn dashboard( + State(state): State, + CurrentUser(account): CurrentUser, +) -> Result { + let (active_info, container_state) = { + let conn = state.db.conn(); + let result = conn.query_row( + "SELECT name, version, server_type, max_players, container_state + FROM instances WHERE is_active = 1", + [], + |row| { + Ok(( + Some(ActiveInstanceInfo { + name: row.get(0)?, + version: row.get(1)?, + server_type: row.get(2)?, + max_players: row.get(3)?, + }), + row.get::<_, String>(4)?, + )) + }, + ); + result.unwrap_or((None, "stopped".into())) + }; + + let template = DashboardTemplate { + username: account.username, + is_superuser: account.is_superuser, + password_change_required: account.password_change_required, + active_instance: active_info, + container_state, + }; + + Ok(Html(template.render().unwrap_or_default())) +} -- cgit v1.2.3