86 lines
2.3 KiB
Rust
86 lines
2.3 KiB
Rust
use actix_files as fs;
|
|
use actix_web::{web, middleware, App, HttpServer};
|
|
use chrono::prelude::*;
|
|
use clap::Parser;
|
|
use log::error;
|
|
|
|
use data::db;
|
|
|
|
mod consts;
|
|
mod utils;
|
|
mod data;
|
|
mod hash;
|
|
mod model;
|
|
mod user;
|
|
mod email;
|
|
mod config;
|
|
mod services;
|
|
|
|
#[actix_web::main]
|
|
async fn main() -> std::io::Result<()> {
|
|
if process_args() { return Ok(()) }
|
|
|
|
std::env::set_var("RUST_LOG", "info,actix_web=info");
|
|
env_logger::init();
|
|
|
|
println!("Starting Recipes as web server...");
|
|
|
|
let config = web::Data::new(config::load());
|
|
let port = config.as_ref().port;
|
|
|
|
println!("Configuration: {:?}", config);
|
|
|
|
let db_connection = web::Data::new(db::Connection::new().unwrap());
|
|
|
|
let server =
|
|
HttpServer::new(move || {
|
|
App::new()
|
|
.wrap(middleware::Logger::default())
|
|
.wrap(middleware::Compress::default())
|
|
.app_data(db_connection.clone())
|
|
.app_data(config.clone())
|
|
.service(services::home_page)
|
|
.service(services::sign_up_get)
|
|
.service(services::sign_up_post)
|
|
.service(services::sign_up_check_email)
|
|
.service(services::sign_up_validation)
|
|
.service(services::sign_in_get)
|
|
.service(services::sign_in_post)
|
|
.service(services::sign_out)
|
|
.service(services::view_recipe)
|
|
.service(fs::Files::new("/static", "static"))
|
|
.default_service(web::to(services::not_found))
|
|
});
|
|
//.workers(1);
|
|
|
|
server.bind(&format!("0.0.0.0:{}", port))?.run().await
|
|
}
|
|
|
|
#[derive(Parser, Debug)]
|
|
struct Args {
|
|
#[arg(long)]
|
|
dbtest: bool
|
|
}
|
|
|
|
fn process_args() -> bool {
|
|
let args = Args::parse();
|
|
|
|
if args.dbtest {
|
|
match db::Connection::new() {
|
|
Ok(con) => {
|
|
if let Err(error) = con.execute_file("sql/data_test.sql") {
|
|
eprintln!("{}", error);
|
|
}
|
|
// Set the creation datetime to 'now'.
|
|
con.execute_sql("UPDATE [User] SET [creation_datetime] = ?1 WHERE [email] = 'paul@test.org'", [Utc::now()]).unwrap();
|
|
},
|
|
Err(error) => {
|
|
eprintln!("{}", error);
|
|
},
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
false
|
|
}
|