You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

lib.rs 1.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. use dotenv;
  2. use tide::utils::After;
  3. mod fs;
  4. mod middleware;
  5. mod post;
  6. mod routes;
  7. mod util;
  8. use middleware::*;
  9. #[derive(Clone)]
  10. pub struct State {
  11. pub login_path: String,
  12. }
  13. pub async fn build_app() -> Result<tide::Server<State>, tide::Error> {
  14. dotenv::dotenv().ok();
  15. let login_path = std::env::var("LOGIN_PATH").unwrap_or(String::from("/login"));
  16. let mut app = tide::with_state(State {
  17. login_path: login_path.clone(),
  18. });
  19. dbg!(std::env::var("POSTS_DIR"))?;
  20. app.at("/static").serve_dir("static")?;
  21. app.with(After(errors));
  22. app.with(session());
  23. app.at("/").get(routes::index);
  24. app.at("/posts")
  25. .with(require_auth)
  26. .post(routes::create_post);
  27. app.at("/posts/new")
  28. .with(require_auth)
  29. .get(routes::new_post);
  30. app.at("/posts/:slug").get(routes::single_post);
  31. app.at("/posts/:slug")
  32. .with(require_auth)
  33. .post(routes::update_post)
  34. .delete(routes::delete_post);
  35. app.at("/posts/:slug/edit")
  36. .with(require_auth)
  37. .get(routes::edit_post);
  38. app.at(&login_path)
  39. .with(require_guest)
  40. .get(routes::login_page)
  41. .post(routes::login);
  42. app.at("/preview")
  43. .with(require_auth)
  44. .post(routes::preview_post);
  45. app.at("/logout").with(require_auth).post(routes::logout);
  46. Ok(app)
  47. }