working server built betterer in rust

This commit is contained in:
Chris Cochrun 2024-07-05 13:45:49 -05:00
parent 1decdb43a5
commit 0ccbe35ca3
4 changed files with 258 additions and 16 deletions

View file

@ -2,6 +2,8 @@ default:
just --list just --list
build: build:
rm -rf public && NODE_ENV=production ./themes/blowfish/node_modules/tailwindcss/lib/cli.js -c ./themes/blowfish/tailwind.config.js -i ./themes/blowfish/assets/css/main.css -o ./assets/css/compiled/main.css --jit && hugo --gc --minify rm -rf public && NODE_ENV=production ./themes/blowfish/node_modules/tailwindcss/lib/cli.js -c ./themes/blowfish/tailwind.config.js -i ./themes/blowfish/assets/css/main.css -o ./assets/css/compiled/main.css --jit && hugo --gc --minify
run:
cargo run
server: server:
hugo server --noHTTPCache --disableFastRender hugo server --noHTTPCache --disableFastRender
dev: dev:

View file

@ -321,8 +321,7 @@ pub async fn camp_form(MultipartForm(form): MultipartForm<CampForm>) -> HttpResp
"later" => { "later" => {
log::info!("{} would like to pay later", full_name); log::info!("{} would like to pay later", full_name);
let html = html! { let html = html! {
div { div class="mt-8" {
class { "mt-8" }
h2 { h2 {
"Thank you, " (full_name) "!" "Thank you, " (full_name) "!"
} }
@ -338,8 +337,7 @@ pub async fn camp_form(MultipartForm(form): MultipartForm<CampForm>) -> HttpResp
_ => { _ => {
log::error!("Got registration error....."); log::error!("Got registration error.....");
let html = html! { let html = html! {
div { div class="mt-8" {
class { "mt-8" }
h2 { h2 {
"Thank you, " (full_name) "!" "Thank you, " (full_name) "!"
} }

View file

@ -1,4 +1,4 @@
use std::fs; use std::{collections::HashMap, fs};
use actix_multipart::form::{tempfile::TempFile, text::Text, MultipartForm}; use actix_multipart::form::{tempfile::TempFile, text::Text, MultipartForm};
use actix_web::{post, HttpResponse}; use actix_web::{post, HttpResponse};
@ -8,6 +8,7 @@ use lettre::{
Message, SmtpTransport, Transport, Message, SmtpTransport, Transport,
}; };
use maud::html; use maud::html;
use reqwest::{Client, Error};
#[derive(Debug, MultipartForm, Default)] #[derive(Debug, MultipartForm, Default)]
struct HealthForm { struct HealthForm {
@ -386,7 +387,13 @@ pub async fn health_form(MultipartForm(form): MultipartForm<HealthForm>) -> Http
let mut path: Option<String> = Some(String::from("")); let mut path: Option<String> = Some(String::from(""));
let mut file_exists = false; let mut file_exists = false;
let mut filename = String::from(""); let mut filename = String::from("");
log::info!("{:?}", file_exists); log::info!("Does the file exist? {:?}", file_exists);
match store_health_form(&form).await {
Ok(_) => log::info!("Successfully posted the health form in nextcloud tables"),
Err(e) => log::error!("Error posting health form to nextcloud tables: {:?}", e),
}
if let Some(f) = form.file { if let Some(f) = form.file {
if let Some(file) = f.file_name { if let Some(file) = f.file_name {
if let Some(ext) = file.rsplit('.').next() { if let Some(ext) = file.rsplit('.').next() {
@ -399,7 +406,10 @@ pub async fn health_form(MultipartForm(form): MultipartForm<HealthForm>) -> Http
log::info!("saving to {}", path.clone().unwrap()); log::info!("saving to {}", path.clone().unwrap());
match f.file.persist(path.clone().unwrap()) { match f.file.persist(path.clone().unwrap()) {
Ok(f) => { Ok(f) => {
log::info!("{:?}", f); log::info!(
"Hey! We got a file! {:?}",
f.metadata().expect("Something bad happened mate")
);
if f.metadata().unwrap().len() > 0 { if f.metadata().unwrap().len() > 0 {
file_exists = true; file_exists = true;
} }
@ -413,7 +423,7 @@ pub async fn health_form(MultipartForm(form): MultipartForm<HealthForm>) -> Http
let filebody = fs::read(path.clone().unwrap_or_default()); let filebody = fs::read(path.clone().unwrap_or_default());
let content_type = ContentType::parse("image/jpg").unwrap(); let content_type = ContentType::parse("image/jpg").unwrap();
let attachment = Attachment::new(filename).body(filebody.unwrap(), content_type); let attachment = Attachment::new(filename).body(filebody.unwrap(), content_type);
log::info!("{:?}", attachment); // log::info!("The attachment is: {:?}", attachment.headers());
MultiPart::mixed() MultiPart::mixed()
.singlepart(SinglePart::html(email.into_string())) .singlepart(SinglePart::html(email.into_string()))
.singlepart(attachment) .singlepart(attachment)
@ -475,8 +485,7 @@ pub async fn health_form(MultipartForm(form): MultipartForm<HealthForm>) -> Http
"later" => { "later" => {
log::info!("{} would like to pay later", full_name); log::info!("{} would like to pay later", full_name);
let html = html! { let html = html! {
div { div class="mt-8" {
class { "mt-8" }
h2 { h2 {
"Thank you, " (full_name) "!" "Thank you, " (full_name) "!"
} }
@ -492,8 +501,7 @@ pub async fn health_form(MultipartForm(form): MultipartForm<HealthForm>) -> Http
_ => { _ => {
log::error!("Got registration error....."); log::error!("Got registration error.....");
let html = html! { let html = html! {
div { div class="mt-8" {
class { "mt-8" }
h2 { h2 {
"Thank you, " (full_name) "!" "Thank you, " (full_name) "!"
} }
@ -510,6 +518,240 @@ pub async fn health_form(MultipartForm(form): MultipartForm<HealthForm>) -> Http
// HttpResponse::Ok().body("hi") // HttpResponse::Ok().body("hi")
} }
async fn store_health_form(_form: HealthForm) -> bool { async fn store_health_form(form: &HealthForm) -> Result<(), Error> {
todo!() let request = Client::new();
let mut map = HashMap::new();
map.insert(
37,
format!(
"{} {}",
form.first_name
.as_ref()
.unwrap_or(&Text(String::new()))
.0
.clone(),
form.last_name
.as_ref()
.unwrap_or(&Text(String::new()))
.0
.clone()
),
);
map.insert(
38,
format!(
"{} {}",
form.parent_first_name
.as_ref()
.unwrap_or(&Text(String::new()))
.0
.clone(),
form.parent_last_name
.as_ref()
.unwrap_or(&Text(String::new()))
.0
.clone()
),
);
map.insert(
39,
form.birthdate
.as_ref()
.unwrap_or(&Text(String::new()))
.0
.clone(),
);
map.insert(
40,
form.street
.as_ref()
.unwrap_or(&Text(String::new()))
.0
.clone(),
);
map.insert(
41,
form.city.as_ref().unwrap_or(&Text(String::new())).0.clone(),
);
map.insert(
42,
form.state
.as_ref()
.unwrap_or(&Text(String::new()))
.0
.clone(),
);
map.insert(
43,
form.zip.as_ref().unwrap_or(&Text(String::new())).0.clone(),
);
map.insert(
44,
form.parent_cellphone
.as_ref()
.unwrap_or(&Text(String::new()))
.0
.clone(),
);
map.insert(
45,
form.homephone
.as_ref()
.unwrap_or(&Text(String::new()))
.0
.clone(),
);
map.insert(
46,
format!(
"{} {}",
form.contact
.as_ref()
.unwrap_or(&Text(String::new()))
.0
.clone(),
form.contact_phone
.as_ref()
.unwrap_or(&Text(String::new()))
.0
.clone(),
),
);
map.insert(
47,
form.doctorname
.as_ref()
.unwrap_or(&Text(String::new()))
.0
.clone(),
);
map.insert(
48,
form.doctorcity
.as_ref()
.unwrap_or(&Text(String::new()))
.0
.clone(),
);
map.insert(
49,
form.doctorphone
.as_ref()
.unwrap_or(&Text(String::new()))
.0
.clone(),
);
map.insert(
50,
form.medical
.as_ref()
.unwrap_or(&Text(String::new()))
.0
.clone(),
);
map.insert(
51,
form.insurance
.as_ref()
.unwrap_or(&Text(String::new()))
.0
.clone(),
);
map.insert(
52,
form.policy_number
.as_ref()
.unwrap_or(&Text(String::new()))
.0
.clone(),
);
map.insert(
54,
form.agreement
.as_ref()
.unwrap_or(&Text(String::new()))
.0
.clone(),
);
map.insert(
55,
format!(
"{}{}",
form.allergies
.as_ref()
.unwrap_or(&Text(String::new()))
.0
.clone(),
form.allergies_other
.as_ref()
.unwrap_or(&Text(String::new()))
.0
.clone(),
),
);
map.insert(
56,
form.specific_allergies
.as_ref()
.unwrap_or(&Text(String::new()))
.0
.clone(),
);
map.insert(
57,
form.treatment
.as_ref()
.unwrap_or(&Text(String::new()))
.0
.clone(),
);
map.insert(
58,
form.conditions
.as_ref()
.unwrap_or(&Text(String::new()))
.0
.clone(),
);
map.insert(
59,
form.tetanus
.as_ref()
.unwrap_or(&Text(String::new()))
.0
.clone(),
);
map.insert(
62,
form.swimming
.as_ref()
.unwrap_or(&Text(String::new()))
.0
.clone(),
);
map.insert(
60,
form.medication
.as_ref()
.unwrap_or(&Text(String::new()))
.0
.clone(),
);
map.insert(
61,
form.notes
.as_ref()
.unwrap_or(&Text(String::new()))
.0
.clone(),
);
let mut json = HashMap::new();
json.insert("data", map);
request
.post("https://staff.tfcconnection.org/apps/tables/api/1/tables/4/rows")
.basic_auth("chris", Some("2VHeGxeC^Zf9KqFK^G@Pt!zu2q^6@b"))
.json(&json)
.send()
.await?;
Ok(())
} }

View file

@ -1,6 +1,6 @@
pub mod camp_form; pub mod camp_form;
pub mod church_form; pub mod church_form;
pub mod errors; // pub mod errors;
pub mod health_form; pub mod health_form;
pub mod local_trip_form; pub mod local_trip_form;
pub mod mt_form; pub mod mt_form;