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::status::BadRequest;
|
||||||
use rocket::response::Redirect;
|
use rocket::response::Redirect;
|
||||||
use rocket::{get, post, uri, State};
|
use rocket::{get, post, uri, State};
|
||||||
|
@ -6,7 +6,10 @@ use rocket_dyn_templates::Template;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
use std::mem;
|
use std::mem;
|
||||||
|
|
||||||
use crate::states;
|
use crate::captcha_solutions;
|
||||||
|
use crate::config;
|
||||||
|
use crate::forms;
|
||||||
|
use crate::mailer;
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
struct FormContext {
|
struct FormContext {
|
||||||
|
@ -24,7 +27,7 @@ pub fn index(
|
||||||
email: Option<String>,
|
email: Option<String>,
|
||||||
telefon: Option<String>,
|
telefon: Option<String>,
|
||||||
message: Option<String>,
|
message: Option<String>,
|
||||||
captcha_solutions: &State<states::SharedCaptchaSolutions>,
|
captcha_solutions: &State<captcha_solutions::SharedCaptchaSolutions>,
|
||||||
) -> Result<Template, BadRequest<()>> {
|
) -> Result<Template, BadRequest<()>> {
|
||||||
let captcha = captcha::by_name(captcha::Difficulty::Easy, captcha::CaptchaName::Lucy);
|
let captcha = captcha::by_name(captcha::Difficulty::Easy, captcha::CaptchaName::Lucy);
|
||||||
let captcha_base64 = match captcha.as_base64() {
|
let captcha_base64 = match captcha.as_base64() {
|
||||||
|
@ -46,36 +49,39 @@ pub fn index(
|
||||||
Ok(Template::render("form", &form_context))
|
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>")]
|
#[post("/submit", data = "<form>")]
|
||||||
pub fn submit(
|
pub fn submit(
|
||||||
mut form: Form<Strict<ContactForm>>,
|
mut form: Form<Strict<forms::ContactForm>>,
|
||||||
captcha_solutions: &State<states::SharedCaptchaSolutions>,
|
config: &State<config::Config>,
|
||||||
|
captcha_solutions: &State<captcha_solutions::SharedCaptchaSolutions>,
|
||||||
|
mailer: &State<mailer::Mailer>,
|
||||||
) -> Redirect {
|
) -> 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) {
|
if !captcha_solutions.check_answer(form.id, &form.captcha_answer) {
|
||||||
return Redirect::to(uri!(
|
return Redirect::to(
|
||||||
path_prefix,
|
path_prefix
|
||||||
index(
|
+ &uri!(index(Some(name), Some(email), Some(telefon), Some(message))).to_string(),
|
||||||
Some(mem::take(&mut form.name)),
|
);
|
||||||
Some(mem::take(&mut form.email)),
|
|
||||||
Some(mem::take(&mut form.telefon)),
|
|
||||||
Some(mem::take(&mut form.message)),
|
|
||||||
)
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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")]
|
#[get("/success")]
|
||||||
|
|
Loading…
Reference in a new issue