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.

main.rs 1.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. use dotenv;
  2. use middleware::*;
  3. use tide::utils::After;
  4. mod fs;
  5. mod middleware;
  6. mod post;
  7. mod routes;
  8. #[derive(Clone)]
  9. pub struct State {
  10. pub login_path: String,
  11. }
  12. #[async_std::main]
  13. async fn main() -> std::io::Result<()> {
  14. dotenv::dotenv().ok();
  15. tide::log::start();
  16. let login_path = std::env::var("LOGIN_PATH").unwrap_or(String::from("/login"));
  17. let hostname = std::env::var("HOSTNAME").unwrap_or(String::from("127.0.0.1"));
  18. let port = std::env::var("PORT").unwrap_or(String::from("8080"));
  19. let mut app = tide::with_state(State {
  20. login_path: login_path.clone(),
  21. });
  22. app.at("/static").serve_dir("static")?;
  23. app.with(After(errors));
  24. app.with(session());
  25. app.at("/").get(routes::index);
  26. app.at("/posts")
  27. .with(require_auth)
  28. .post(routes::create_post);
  29. app.at("/posts/:id")
  30. .get(routes::single_post)
  31. .post(routes::update_post)
  32. .delete(routes::delete_post);
  33. app.at("/posts/:id/edit")
  34. .with(require_auth)
  35. .get(routes::edit_post);
  36. app.at(&login_path)
  37. .with(require_guest)
  38. .get(routes::login_page)
  39. .post(routes::login);
  40. app.at("/logout").with(require_auth).post(routes::logout);
  41. app.listen(format!("{}:{}", hostname, port)).await?;
  42. Ok(())
  43. }