use dotenv; use middleware::*; use tide::utils::After; mod fs; mod middleware; mod post; mod routes; #[derive(Clone)] pub struct State { pub login_path: String, } #[async_std::main] async fn main() -> std::io::Result<()> { dotenv::dotenv().ok(); tide::log::start(); let login_path = std::env::var("LOGIN_PATH").unwrap_or(String::from("/login")); let hostname = std::env::var("HOSTNAME").unwrap_or(String::from("127.0.0.1")); let port = std::env::var("PORT").unwrap_or(String::from("8080")); let mut app = tide::with_state(State { login_path: login_path.clone(), }); app.at("/static").serve_dir("static")?; app.with(After(errors)); app.with(session()); app.at("/").get(routes::index); app.at("/posts") .with(require_auth) .post(routes::create_post); app.at("/posts/:id") .get(routes::single_post) .post(routes::update_post) .delete(routes::delete_post); app.at("/posts/:id/edit") .with(require_auth) .get(routes::edit_post); app.at(&login_path) .with(require_guest) .get(routes::login_page) .post(routes::login); app.at("/logout").with(require_auth).post(routes::logout); app.listen(format!("{}:{}", hostname, port)).await?; Ok(()) }