use dotenv; use tide::utils::After; mod fs; mod middleware; mod post; mod routes; mod util; use middleware::*; #[derive(Clone)] pub struct State { pub login_path: String, } pub async fn build_app() -> Result, tide::Error> { dotenv::dotenv().ok(); let login_path = std::env::var("LOGIN_PATH").unwrap_or(String::from("/login")); 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/new") .with(require_auth) .get(routes::new_post); app.at("/posts/:slug") .get(routes::single_post) .post(routes::update_post) .delete(routes::delete_post); app.at("/posts/:slug/edit") .with(require_auth) .get(routes::edit_post); app.at(&login_path) .with(require_guest) .get(routes::login_page) .post(routes::login); app.at("/preview") .with(require_auth) .post(routes::preview_post); app.at("/logout").with(require_auth).post(routes::logout); Ok(app) }