summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs47
1 files changed, 28 insertions, 19 deletions
diff --git a/src/main.rs b/src/main.rs
index 372915b..a9cd722 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,20 +1,24 @@
+use axum::response::Redirect;
+use axum::{extract::Request, routing::get, Router, ServiceExt};
+use middleware::cache_control::cache_static;
+use posts::fs_post_repo::FsPostRepo;
+use std::{env, sync::Arc};
use tower::Layer;
-use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, EnvFilter};
-use tower_http::{trace::{self, TraceLayer}, normalize_path::NormalizePathLayer};
+use tower_http::services::ServeDir;
+use tower_http::{
+ normalize_path::NormalizePathLayer,
+ trace::{self, TraceLayer},
+};
use tracing::{info, Level};
-use axum::{routing::get, Router, ServiceExt, extract::Request};
+use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, EnvFilter};
use tutors::fs_tutor_repo::FsTutorRepo;
-use std::{sync::Arc, env};
-use tower_http::services::ServeDir;
-use posts::fs_post_repo::FsPostRepo;
-use middleware::cache_control::cache_static;
+mod handlers;
mod helpers;
+mod middleware;
mod posts;
mod tutors;
mod views;
-mod handlers;
-mod middleware;
#[tokio::main]
async fn main() {
@@ -28,9 +32,9 @@ async fn main() {
.init();
info!("loading state...");
- let blog_dir = env::var("CT_POSTS").unwrap();
- let tutor_dir = env::var("CT_TEAM").unwrap();
- let assets_dir = env::var("CT_ASSETS").unwrap();
+ let blog_dir = env::var("CT_POSTS").unwrap_or(String::from("/var/ct/posts"));
+ let tutor_dir = env::var("CT_TEAM").unwrap_or(String::from("/var/ct/team"));
+ let assets_dir = env::var("CT_ASSETS").unwrap_or(String::from("/var/ct/assets"));
let posts = Arc::new(FsPostRepo::with_dir(blog_dir));
let tutors = Arc::new(FsTutorRepo::with_dir(tutor_dir.clone()));
@@ -38,12 +42,17 @@ async fn main() {
info!("initializing router...");
let app = Router::new()
.route("/", get(handlers::index_handler))
- .route("/posts", get(handlers::posts_handler))
- .route("/posts/:post_id", get(handlers::post_handler))
+ .route("/posts", get(|| async { Redirect::permanent("/blog") }))
+ .route("/posts/{post_id}", get(handlers::post_redirect))
+ .route("/blog", get(handlers::posts_handler))
+ .route("/blog/{post_id}", get(handlers::post_handler))
.with_state(posts)
.route("/policies", get(handlers::policies_handler))
.route("/brochure", get(handlers::brochure_handler))
.route("/about", get(handlers::about_handler))
+ .route("/k12", get(handlers::k12_handler))
+ .route("/highered", get(handlers::highered_handler))
+ .route("/professional", get(handlers::pro_handler))
.with_state(tutors)
.nest_service("/assets", ServeDir::new(assets_dir))
.nest_service("/team", ServeDir::new(tutor_dir))
@@ -51,14 +60,14 @@ async fn main() {
.layer(axum::middleware::from_fn(cache_static))
.layer(
TraceLayer::new_for_http()
- .make_span_with(trace::DefaultMakeSpan::new()
- .level(Level::INFO))
- .on_response(trace::DefaultOnResponse::new()
- .level(Level::INFO))
+ .make_span_with(trace::DefaultMakeSpan::new().level(Level::INFO))
+ .on_response(trace::DefaultOnResponse::new().level(Level::INFO)),
);
let app = NormalizePathLayer::trim_trailing_slash().layer(app);
let addr = env::var("CT_BIND").unwrap_or("0.0.0.0:8000".into());
let listener = tokio::net::TcpListener::bind(addr).await.unwrap();
- axum::serve(listener, ServiceExt::<Request>::into_make_service(app)).await.unwrap();
+ axum::serve(listener, ServiceExt::<Request>::into_make_service(app))
+ .await
+ .unwrap();
}