From 640517b48c4df5d9d3d8f60eb3c3ee47bb376da3 Mon Sep 17 00:00:00 2001 From: Mo8it Date: Sat, 29 Oct 2022 00:42:15 +0200 Subject: [PATCH] Use mailer --- src/routes.rs | 58 ++++++++++++++++++++++++++++----------------------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/src/routes.rs b/src/routes.rs index 90d4dcc..ab12dbb 100644 --- a/src/routes.rs +++ b/src/routes.rs @@ -1,4 +1,4 @@ -use rocket::form::{Form, FromForm, Strict}; +use rocket::form::{Form, Strict}; use rocket::response::status::BadRequest; use rocket::response::Redirect; use rocket::{get, post, uri, State}; @@ -6,7 +6,10 @@ use rocket_dyn_templates::Template; use serde::Serialize; use std::mem; -use crate::states; +use crate::captcha_solutions; +use crate::config; +use crate::forms; +use crate::mailer; #[derive(Serialize)] struct FormContext { @@ -24,7 +27,7 @@ pub fn index( email: Option, telefon: Option, message: Option, - captcha_solutions: &State, + captcha_solutions: &State, ) -> Result> { let captcha = captcha::by_name(captcha::Difficulty::Easy, captcha::CaptchaName::Lucy); let captcha_base64 = match captcha.as_base64() { @@ -46,36 +49,39 @@ pub fn index( Ok(Template::render("form", &form_context)) } -#[derive(FromForm)] -pub struct ContactForm { - id: u16, - name: String, - email: String, - telefon: String, - message: String, - captcha_answer: String, -} - #[post("/submit", data = "
")] pub fn submit( - mut form: Form>, - captcha_solutions: &State, + mut form: Form>, + config: &State, + captcha_solutions: &State, + mailer: &State, ) -> Redirect { - let path_prefix = uri!("/contact-form"); + let path_prefix = config.path_prefix.clone(); + + let name = mem::take(&mut form.name); + let email = mem::take(&mut form.email); + let telefon = mem::take(&mut form.telefon); + let message = mem::take(&mut form.message); if !captcha_solutions.check_answer(form.id, &form.captcha_answer) { - return Redirect::to(uri!( - path_prefix, - index( - Some(mem::take(&mut form.name)), - Some(mem::take(&mut form.email)), - Some(mem::take(&mut form.telefon)), - Some(mem::take(&mut form.message)), - ) - )); + return Redirect::to( + path_prefix + + &uri!(index(Some(name), Some(email), Some(telefon), Some(message))).to_string(), + ); } - Redirect::to(uri!(path_prefix, success())) + match mailer.send(&name, &email, &telefon, &message) { + Ok(_) => (), + Err(_) => { + return Redirect::to( + path_prefix + + &uri!(index(Some(name), Some(email), Some(telefon), Some(message))) + .to_string(), + ) + } + } + + Redirect::to(path_prefix + &uri!(success()).to_string()) } #[get("/success")]