Use mailer
This commit is contained in:
parent
e860ffa86d
commit
640517b48c
1 changed files with 32 additions and 26 deletions
|
@ -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<String>,
|
||||
telefon: Option<String>,
|
||||
message: Option<String>,
|
||||
captcha_solutions: &State<states::SharedCaptchaSolutions>,
|
||||
captcha_solutions: &State<captcha_solutions::SharedCaptchaSolutions>,
|
||||
) -> Result<Template, BadRequest<()>> {
|
||||
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 = "<form>")]
|
||||
pub fn submit(
|
||||
mut form: Form<Strict<ContactForm>>,
|
||||
captcha_solutions: &State<states::SharedCaptchaSolutions>,
|
||||
mut form: Form<Strict<forms::ContactForm>>,
|
||||
config: &State<config::Config>,
|
||||
captcha_solutions: &State<captcha_solutions::SharedCaptchaSolutions>,
|
||||
mailer: &State<mailer::Mailer>,
|
||||
) -> 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")]
|
||||
|
|
Loading…
Reference in a new issue