2018-08-27 11:56:26 +02:00
|
|
|
#[macro_use]
|
|
|
|
extern crate diesel;
|
|
|
|
#[macro_use]
|
|
|
|
extern crate log;
|
|
|
|
|
2019-03-11 02:23:44 +01:00
|
|
|
use std::{env, io};
|
|
|
|
|
|
|
|
use actix_files as fs;
|
|
|
|
use actix_session::CookieSession;
|
2019-03-26 04:29:00 +01:00
|
|
|
use actix_web::middleware::{errhandlers::ErrorHandlers, Logger};
|
2019-03-11 02:23:44 +01:00
|
|
|
use actix_web::{http, web, App, HttpServer};
|
2018-08-27 11:56:26 +02:00
|
|
|
use dotenv::dotenv;
|
|
|
|
use tera::Tera;
|
|
|
|
|
|
|
|
mod api;
|
|
|
|
mod db;
|
|
|
|
mod model;
|
|
|
|
mod schema;
|
|
|
|
mod session;
|
|
|
|
|
|
|
|
static SESSION_SIGNING_KEY: &[u8] = &[0; 32];
|
|
|
|
|
2020-09-12 17:49:45 +02:00
|
|
|
#[actix_web::main]
|
2019-12-07 18:59:24 +01:00
|
|
|
async fn main() -> io::Result<()> {
|
2018-08-27 11:56:26 +02:00
|
|
|
dotenv().ok();
|
|
|
|
|
2019-03-11 02:23:44 +01:00
|
|
|
env::set_var("RUST_LOG", "actix_todo=debug,actix_web=info");
|
2018-08-27 11:56:26 +02:00
|
|
|
env_logger::init();
|
|
|
|
|
|
|
|
let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set");
|
|
|
|
let pool = db::init_pool(&database_url).expect("Failed to create pool");
|
|
|
|
|
|
|
|
let app = move || {
|
|
|
|
debug!("Constructing the App");
|
|
|
|
|
2020-02-03 17:42:29 +01:00
|
|
|
let templates: Tera = Tera::new("templates/**/*").unwrap();
|
2018-08-27 11:56:26 +02:00
|
|
|
|
2019-03-11 02:23:44 +01:00
|
|
|
let session_store = CookieSession::signed(SESSION_SIGNING_KEY).secure(false);
|
2018-08-27 11:56:26 +02:00
|
|
|
|
|
|
|
let error_handlers = ErrorHandlers::new()
|
|
|
|
.handler(
|
|
|
|
http::StatusCode::INTERNAL_SERVER_ERROR,
|
|
|
|
api::internal_server_error,
|
|
|
|
)
|
|
|
|
.handler(http::StatusCode::BAD_REQUEST, api::bad_request)
|
|
|
|
.handler(http::StatusCode::NOT_FOUND, api::not_found);
|
|
|
|
|
2019-03-11 02:23:44 +01:00
|
|
|
App::new()
|
2019-03-26 04:29:00 +01:00
|
|
|
.data(templates)
|
|
|
|
.data(pool.clone())
|
|
|
|
.wrap(Logger::default())
|
|
|
|
.wrap(session_store)
|
|
|
|
.wrap(error_handlers)
|
2019-12-07 18:59:24 +01:00
|
|
|
.service(web::resource("/").route(web::get().to(api::index)))
|
|
|
|
.service(web::resource("/todo").route(web::post().to(api::create)))
|
|
|
|
.service(web::resource("/todo/{id}").route(web::post().to(api::update)))
|
2019-03-11 02:23:44 +01:00
|
|
|
.service(fs::Files::new("/static", "static/"))
|
2018-08-27 11:56:26 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
debug!("Starting server");
|
2019-12-25 17:48:33 +01:00
|
|
|
HttpServer::new(app).bind("localhost:8088")?.run().await
|
2018-08-27 11:56:26 +02:00
|
|
|
}
|