2026-09-19 10:00:24 +02:00
|
|
|
use axum::extract::State;
|
|
|
|
|
use axum::response::{Html, IntoResponse, Response};
|
|
|
|
|
use http::StatusCode;
|
|
|
|
|
use minijinja::context;
|
|
|
|
|
|
|
|
|
|
use crate::db::{DatabaseInterface, Operation};
|
2026-09-19 12:30:47 +02:00
|
|
|
use crate::http::{HttpSession, HttpState};
|
2026-09-19 10:00:24 +02:00
|
|
|
|
2026-09-19 14:39:01 +02:00
|
|
|
pub async fn home(
|
|
|
|
|
State(state): State<HttpState>,
|
2026-09-19 12:30:47 +02:00
|
|
|
// Only logged in users are allowed here
|
|
|
|
|
session: HttpSession,
|
2026-09-19 10:00:24 +02:00
|
|
|
) -> Response {
|
2026-09-19 12:30:47 +02:00
|
|
|
// When the user has no domain (service admin) list all domains
|
|
|
|
|
let op = Operation::ListUsers(session.user.domain.clone());
|
|
|
|
|
let other_users = if session.user.can_perform(&op) {
|
|
|
|
|
match state
|
|
|
|
|
.db
|
|
|
|
|
.list_domain_users(session.user.domain.clone())
|
|
|
|
|
.await
|
|
|
|
|
{
|
|
|
|
|
Ok(other_users) => other_users,
|
2026-09-19 10:00:24 +02:00
|
|
|
Err(e) => {
|
|
|
|
|
return format!("Database error: {e}").into_response();
|
|
|
|
|
}
|
2026-09-19 12:30:47 +02:00
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
vec![]
|
|
|
|
|
};
|
2026-09-19 10:00:24 +02:00
|
|
|
|
2026-09-19 12:30:47 +02:00
|
|
|
tracing::info!(
|
|
|
|
|
"Found {} users on domain {:?}",
|
|
|
|
|
other_users.len(),
|
|
|
|
|
session.user.domain
|
|
|
|
|
);
|
2026-09-19 10:00:24 +02:00
|
|
|
|
2026-09-19 12:30:47 +02:00
|
|
|
let domains = match state.db.domains_user_can_see(&session.user).await {
|
|
|
|
|
Ok(domains) => domains,
|
|
|
|
|
Err(e) => {
|
|
|
|
|
return format!("Database error: {e}").into_response();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let ctx = context! {
|
|
|
|
|
domains,
|
|
|
|
|
user => session.user,
|
|
|
|
|
can_create_domain => session.user.can_create_domain(),
|
|
|
|
|
other_users,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let page = state
|
|
|
|
|
.templates
|
|
|
|
|
.get_template("home.html")
|
|
|
|
|
.unwrap()
|
|
|
|
|
.render(ctx)
|
|
|
|
|
.unwrap();
|
|
|
|
|
(StatusCode::OK, Html(page)).into_response()
|
2026-09-19 10:00:24 +02:00
|
|
|
}
|