use rocket::form::Form; use rocket::fs::TempFile; use rocket::response::{Flash, Redirect}; use rocket::{get, request::FlashMessage, routes, Route, State}; use rocket::{post, FromForm}; use rocket_dyn_templates::{tera::Context, Template}; use sqlx::SqlitePool; use crate::model::log::Log; use crate::model::mail::Mail; use crate::model::role::Role; use crate::model::user::UserWithDetails; use crate::model::user::{AdminUser, VorstandUser}; use crate::tera::Config; #[get("/mail")] async fn index( db: &State, admin: VorstandUser, flash: Option>, ) -> Template { let mut context = Context::new(); if let Some(msg) = flash { context.insert("flash", &msg.into_inner()); } let roles = Role::all(db).await; context.insert( "loggedin_user", &UserWithDetails::from_user(admin.user, db).await, ); context.insert("roles", &roles); Template::render("admin/mail", context.into_json()) } #[get("/mail/fee")] async fn fee(db: &State, admin: AdminUser, config: &State) -> &'static str { Log::create(db, format!("{admin:?} trying to send fee")).await; Mail::fees(db, config.smtp_pw.clone()).await; "SUCC" } #[get("/mail/fee-final")] async fn fee_final( db: &State, admin: AdminUser, config: &State, ) -> &'static str { Log::create(db, format!("{admin:?} trying to send fee_final")).await; Mail::fees_final(db, config.smtp_pw.clone()).await; "SUCC" } #[derive(FromForm, Debug)] pub struct MailToSend<'a> { pub(crate) role_id: i32, pub(crate) subject: String, pub(crate) body: String, pub(crate) files: Vec>, } #[post("/mail", data = "")] async fn update( db: &State, data: Form>, config: &State, admin: VorstandUser, ) -> Flash { let d = data.into_inner(); Log::create(db, format!("{admin:?} trying to send this mail: {d:?}")).await; if Mail::send(db, d, config.smtp_pw.clone()).await { Log::create(db, "Mail successfully sent".into()).await; Flash::success(Redirect::to("/admin/mail"), "Mail versendet") } else { Log::create(db, "Error sending the mail".into()).await; Flash::error(Redirect::to("/admin/mail"), "Fehler") } } pub fn routes() -> Vec { routes![index, update, fee, fee_final] } #[cfg(test)] mod test {}