probably the last change until i move to nextjs

This commit is contained in:
2025-07-15 18:42:43 +02:00
parent 8551a004a8
commit 153d35825d
6 changed files with 61 additions and 9 deletions
+1 -2
View File
@@ -251,8 +251,7 @@ body {
} }
.search-container button { .search-container button {
background-color: transparent; border: 0;
border: 1px solid currentColor;
border-radius: 6px; border-radius: 6px;
outline: none; outline: none;
white-space: nowrap; white-space: nowrap;
+5
View File
@@ -114,6 +114,11 @@
gap: 6px; gap: 6px;
} }
.All {
color: var(--fg);
background-color: var(--bg);
}
.Online { .Online {
color: var(--online); color: var(--online);
background-color: var(--online-bg); background-color: var(--online-bg);
+5
View File
@@ -62,3 +62,8 @@ pub async fn validate_session(id: String) -> bool {
false false
} }
} }
#[server]
pub async fn check_validate_session(id: String) -> Result<bool, ServerFnError> {
Ok(validate_session(id).await)
}
+5 -5
View File
@@ -98,11 +98,11 @@ pub fn Dashboard() -> Element {
placeholder: "Search servers by name, location, or IP..." } placeholder: "Search servers by name, location, or IP..." }
} }
button { class: "fg", "All (4)" } button { class: "All", "All (4)" }
button { class: "online", "Online (3)" } button { class: "Online", "Online (3)" }
button { class: "issues", "Warning (1)" } button { class: "Warning", "Warning (1)" }
button { class: "ram", "Offline (1)" } button { class: "Offline", "Offline (1)" }
button { class: "cpu", "Maintenance (1)" } button { class: "Maintenance", "Maintenance (1)" }
} }
div { class: "server-container", div { class: "server-container",
+22 -1
View File
@@ -1,6 +1,9 @@
use dioxus::prelude::*; use dioxus::prelude::*;
use crate::{backend, utils}; use crate::{
backend::{self},
utils::{self},
};
const LOGIN_CSS: Asset = asset!("/assets/styles/login.css"); const LOGIN_CSS: Asset = asset!("/assets/styles/login.css");
@@ -9,6 +12,24 @@ pub fn Login() -> Element {
let username = use_signal(|| String::new()); let username = use_signal(|| String::new());
let password = use_signal(|| String::new()); let password = use_signal(|| String::new());
let error: Signal<Option<String>> = use_signal(|| None); let error: Signal<Option<String>> = use_signal(|| None);
let session = utils::use_session();
// Check for existing session on mount
use_effect({
let session = session.clone();
move || {
let session = session.clone();
spawn(async move {
// Optional: verify with the server if session is actually valid
if backend::auth::check_validate_session(session.get_id())
.await
.unwrap_or(false)
{
utils::redirect("/dashboard");
}
});
}
});
let is_disabled = { let is_disabled = {
let username = username.clone(); let username = username.clone();
+23 -1
View File
@@ -66,6 +66,7 @@ pub fn redirect(target: &str) {
.unwrap(); .unwrap();
} }
#[derive(Clone)]
pub struct Session(Signal<String>); pub struct Session(Signal<String>);
pub fn use_session() -> Session { pub fn use_session() -> Session {
@@ -73,6 +74,10 @@ pub fn use_session() -> Session {
} }
impl Session { impl Session {
pub fn get_id(&self) -> String {
self.0.read().clone()
}
pub fn use_servers(&self) -> (Signal<Vec<Server>>, Signal<String>) { pub fn use_servers(&self) -> (Signal<Vec<Server>>, Signal<String>) {
let query = use_signal(|| String::new()); let query = use_signal(|| String::new());
let servers = use_signal(|| Vec::new()); let servers = use_signal(|| Vec::new());
@@ -83,7 +88,7 @@ impl Session {
let mut servers = servers.clone(); let mut servers = servers.clone();
spawn(async move { spawn(async move {
if let Ok(v) = backend::get_servers(id.read().clone(), query_value).await { if let Ok(v) = request(backend::get_servers(id.read().clone(), query_value).await) {
servers.set(v); servers.set(v);
} }
}); });
@@ -92,3 +97,20 @@ impl Session {
(servers, query) (servers, query)
} }
} }
pub fn request<T>(o: Result<T, ServerFnError>) -> Result<T, ServerFnError> {
match o {
Err(e) => match e {
ServerFnError::ServerError(e) => {
if e == "Invalid session" {
redirect("/");
Err(ServerFnError::ServerError(e))
} else {
Err(ServerFnError::ServerError(e))
}
}
_ => Err(e),
},
_ => o,
}
}