82 lines
2.3 KiB
Rust
82 lines
2.3 KiB
Rust
use askama::Template;
|
|
use askama_axum::{IntoResponse, Response};
|
|
use axum::{
|
|
extract::State,
|
|
response::{Html, Json, Redirect},
|
|
Extension,
|
|
};
|
|
use http::StatusCode;
|
|
use sqlx::SqlitePool;
|
|
|
|
use crate::{
|
|
middlewares::is_authorized,
|
|
user::{get_user_roles_display, UserData},
|
|
};
|
|
|
|
struct HtmlTemplate<T>(T);
|
|
|
|
impl<T> IntoResponse for HtmlTemplate<T>
|
|
where
|
|
T: Template,
|
|
{
|
|
fn into_response(self) -> Response {
|
|
match self.0.render() {
|
|
Ok(html) => Html(html).into_response(),
|
|
Err(err) => (
|
|
StatusCode::INTERNAL_SERVER_ERROR,
|
|
format!("Failed to render template. Error: {}", err),
|
|
)
|
|
.into_response(),
|
|
}
|
|
}
|
|
}
|
|
|
|
#[derive(Template)]
|
|
#[template(path = "cottagecalendar.html")]
|
|
struct CottageCalendarTemplate {
|
|
logged_in: bool,
|
|
user: UserData,
|
|
user_roles: Vec<crate::user::UserRolesDisplay>,
|
|
}
|
|
|
|
pub async fn cottagecalendar(
|
|
Extension(user_data): Extension<Option<UserData>>,
|
|
State(db_pool): State<SqlitePool>,
|
|
) -> impl IntoResponse {
|
|
// Is the user logged in?
|
|
let logged_in = user_data.is_some();
|
|
|
|
if logged_in {
|
|
// Extract the user data.
|
|
let user = user_data.as_ref().unwrap().clone();
|
|
let userid = user_data.as_ref().map(|s| s.id.clone()).unwrap_or_default();
|
|
|
|
if is_authorized("/cottagecalendar", user_data, db_pool.clone()).await {
|
|
// Get user roles
|
|
let user_roles = get_user_roles_display(userid, &db_pool.clone()).await;
|
|
|
|
let template = CottageCalendarTemplate {
|
|
logged_in,
|
|
user,
|
|
user_roles,
|
|
};
|
|
HtmlTemplate(template).into_response()
|
|
} else {
|
|
Redirect::to("/").into_response()
|
|
}
|
|
} else {
|
|
Redirect::to("/").into_response()
|
|
}
|
|
}
|
|
|
|
pub async fn get_events(
|
|
Extension(user_data): Extension<Option<UserData>>,
|
|
State(db_pool): State<SqlitePool>,
|
|
) -> String {
|
|
let events = "[{\"title\": \"Chris and Terri\", \"start\": \"2024-12-23T14:00:00\", \"end\": \"2024-12-27T10:00:00\", \"allDay\": false}, {\"title\": \"Stephen\", \"start\": \"2024-12-27T14:00:00\", \"end\": \"2024-12-31T10:00:00\", \"allDay\": false}]";
|
|
|
|
println!("{}", events);
|
|
|
|
events.to_string()
|
|
}
|