grain.social is a photo sharing platform built on atproto.

fix: update .dockerignore and add serve_css and serve_js functions for serving static assets

Changed files
+25 -3
services
darkroom
src
+3 -1
.dockerignore
··· 1 1 **/node_modules 2 2 **/*.db 3 3 *.toml 4 - .env 4 + .env 5 + **/services 6 + **/local-infra
+22 -2
services/darkroom/src/main.rs
··· 9 9 use serde_json::json; 10 10 use std::collections::HashMap; 11 11 use tokio::net::TcpListener; 12 - use tower_http::{cors::CorsLayer, trace::TraceLayer, services::ServeDir}; 12 + use tower_http::{cors::CorsLayer, trace::TraceLayer}; 13 + use axum::http::header; 13 14 use tracing::{info, warn}; 14 15 15 16 mod composite_handler; ··· 33 34 .route("/gallery-preview", get(adaptive_preview_route)) 34 35 .route("/api/gallery", get(gallery_proxy_route)) 35 36 .route("/xrpc/social.grain.darkroom.getGalleryComposite", get(adaptive_api_route)) 36 - .nest_service("/static", ServeDir::new("static")) 37 + .route("/static/css/adaptive_layout.css", get(serve_css)) 38 + .route("/static/js/adaptive_layout.js", get(serve_js)) 37 39 .layer(CorsLayer::permissive()) 38 40 .layer(TraceLayer::new_for_http()) 39 41 .fallback(not_found); ··· 101 103 "timestamp": chrono::Utc::now().to_rfc3339() 102 104 })) 103 105 } 106 + 107 + async fn serve_css() -> Result<Response<Body>, StatusCode> { 108 + let css_content = include_str!("../static/css/adaptive_layout.css"); 109 + Ok(Response::builder() 110 + .status(StatusCode::OK) 111 + .header(header::CONTENT_TYPE, "text/css; charset=utf-8") 112 + .body(Body::from(css_content)) 113 + .unwrap()) 114 + } 115 + 116 + async fn serve_js() -> Result<Response<Body>, StatusCode> { 117 + let js_content = include_str!("../static/js/adaptive_layout.js"); 118 + Ok(Response::builder() 119 + .status(StatusCode::OK) 120 + .header(header::CONTENT_TYPE, "application/javascript; charset=utf-8") 121 + .body(Body::from(js_content)) 122 + .unwrap()) 123 + }