diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/handlers.rs | 31 | ||||
| -rw-r--r-- | src/main.rs | 38 | ||||
| -rw-r--r-- | src/middleware/cache_control.rs | 2 | ||||
| -rw-r--r-- | src/posts/fs_post.rs | 2 | ||||
| -rw-r--r-- | src/views.rs | 1 | ||||
| -rw-r--r-- | src/views/k12.rs | 6 | 
6 files changed, 49 insertions, 31 deletions
| diff --git a/src/handlers.rs b/src/handlers.rs index 800d8f8..43d31fd 100644 --- a/src/handlers.rs +++ b/src/handlers.rs @@ -1,15 +1,16 @@ -use askama::Template; -use crate::views::post::PostView; -use crate::views::posts::PostsView;  use crate::posts::abstractions::repo::PostRepo; -use crate::views::policies::PoliciesTemplate; -use crate::views::index::IndexTemplate; -use crate::views::brochure::BrochureTemplate; -use crate::views::about::AboutView;  use crate::tutors::abstractions::tutor_repo::TutorRepo; -use std::sync::Arc; +use crate::views::about::AboutView; +use crate::views::brochure::BrochureTemplate; +use crate::views::index::IndexTemplate; +use crate::views::k12::K12Template; +use crate::views::policies::PoliciesTemplate; +use crate::views::post::PostView; +use crate::views::posts::PostsView; +use askama::Template; +use axum::extract::{Path, State};  use axum::response::Html; -use axum::extract::{State, Path}; +use std::sync::Arc;  pub async fn about_handler(State(repo): State<Arc<impl TutorRepo>>) -> Html<String> {      let view = AboutView::with_tutors(repo.load()); @@ -17,7 +18,7 @@ pub async fn about_handler(State(repo): State<Arc<impl TutorRepo>>) -> Html<Stri  }  pub async fn brochure_handler() -> Html<String> { -    Html(BrochureTemplate{}.render().unwrap()) +    Html(BrochureTemplate {}.render().unwrap())  }  pub async fn index_handler() -> Html<String> { @@ -25,7 +26,7 @@ pub async fn index_handler() -> Html<String> {  }  pub async fn policies_handler() -> Html<String> { -    Html(PoliciesTemplate{}.render().unwrap()) +    Html(PoliciesTemplate {}.render().unwrap())  }  pub async fn posts_handler(State(repo): State<Arc<impl PostRepo>>) -> Html<String> { @@ -33,8 +34,14 @@ pub async fn posts_handler(State(repo): State<Arc<impl PostRepo>>) -> Html<Strin      Html(view.render().unwrap())  } -pub async fn post_handler(Path(post_id): Path<String>, State(repo): State<Arc<impl PostRepo>>) -> Html<String> { +pub async fn post_handler( +    Path(post_id): Path<String>, +    State(repo): State<Arc<impl PostRepo>>, +) -> Html<String> {      let view = PostView::with_post(repo.by_id(&post_id));      Html(view.render().unwrap())  } +pub async fn k12_handler() -> Html<String> { +    Html(K12Template {}.render().unwrap()) +} diff --git a/src/main.rs b/src/main.rs index 372915b..57b0256 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,20 +1,23 @@ +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 +31,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())); @@ -44,6 +47,7 @@ async fn main() {          .route("/policies", get(handlers::policies_handler))          .route("/brochure", get(handlers::brochure_handler))          .route("/about", get(handlers::about_handler)) +        .route("/k12", get(handlers::k12_handler))          .with_state(tutors)          .nest_service("/assets", ServeDir::new(assets_dir))          .nest_service("/team", ServeDir::new(tutor_dir)) @@ -51,14 +55,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();  } diff --git a/src/middleware/cache_control.rs b/src/middleware/cache_control.rs index 30f31ca..0f11924 100644 --- a/src/middleware/cache_control.rs +++ b/src/middleware/cache_control.rs @@ -3,7 +3,7 @@ use axum::http::header::{HeaderValue, CACHE_CONTROL};  use axum::middleware::Next;  use axum::response::Response; -pub async fn cache_static(mut request: Request, next: Next) -> Response { +pub async fn cache_static(request: Request, next: Next) -> Response {      let was_static = request.uri().path().starts_with("/assets");      let mut response = next.run(request).await; diff --git a/src/posts/fs_post.rs b/src/posts/fs_post.rs index a1de678..4fc03b2 100644 --- a/src/posts/fs_post.rs +++ b/src/posts/fs_post.rs @@ -26,7 +26,7 @@ impl Post for FsPost {          let article = self.get_article();          Cow::Owned(              article -                .split_once("\n") +                .split_once('\n')                  .map(|(first, _)| first)                  .unwrap_or_default()                  .trim_start_matches('_') diff --git a/src/views.rs b/src/views.rs index cb58813..e9f1951 100644 --- a/src/views.rs +++ b/src/views.rs @@ -1,6 +1,7 @@  pub mod about;  pub mod brochure;  pub mod index; +pub mod k12;  pub mod policies;  pub mod post;  pub mod posts; diff --git a/src/views/k12.rs b/src/views/k12.rs new file mode 100644 index 0000000..eb9725f --- /dev/null +++ b/src/views/k12.rs @@ -0,0 +1,6 @@ +use crate::helpers::*; +use askama::Template; + +#[derive(Template)] +#[template(path = "k12.html")] +pub struct K12Template; |