contact-form/src/main.rs

51 lines
1.3 KiB
Rust
Raw Normal View History

2022-10-28 22:41:49 +00:00
mod captcha_solutions;
mod config;
2022-10-29 15:13:12 +00:00
mod context;
2022-10-28 22:41:49 +00:00
mod forms;
mod mailer;
2022-10-26 00:23:55 +00:00
mod routes;
2022-10-31 01:13:42 +00:00
use anyhow::{Context, Result};
use axum::extract::Extension;
use axum::routing::{get, post};
use axum::{Router, Server};
2022-10-29 17:09:56 +00:00
use std::process;
2022-10-31 01:13:42 +00:00
use std::sync::Arc;
use tera::Tera;
async fn init() -> Result<()> {
let tera = Arc::new(Tera::new("templates/*").context("Failed to parse templates!")?);
2022-10-26 00:23:55 +00:00
2022-10-29 17:09:56 +00:00
let mut config = config::Config::new()?;
2022-10-31 01:13:42 +00:00
let path_prefix = config.path_prefix.clone();
let mailer = Arc::new(mailer::Mailer::new(&mut config)?);
let config = Arc::new(config);
let captcha_solutions = Arc::new(captcha_solutions::SharedCaptchaSolutions::new());
let routes = Router::new()
.route("/", get(routes::index))
.route("/submit", post(routes::submit))
.route("/success", get(routes::success))
.layer(Extension(config))
.layer(Extension(mailer))
.layer(Extension(captcha_solutions))
.layer(Extension(tera));
let app = Router::new().nest(&path_prefix, routes);
Server::bind(&([127, 0, 0, 1], 8080).into())
.serve(app.into_make_service())
.await
.unwrap();
2022-10-28 22:41:49 +00:00
2022-10-31 01:13:42 +00:00
Ok(())
2022-10-29 17:09:56 +00:00
}
2022-10-31 01:13:42 +00:00
#[tokio::main]
async fn main() {
init().await.unwrap_or_else(|e| {
2022-10-29 17:09:56 +00:00
eprintln!("{e}");
process::exit(1);
})
2022-10-26 00:23:55 +00:00
}