Serve static files

This commit is contained in:
Yash Karandikar 2022-08-16 08:50:19 -05:00
parent f193ce3064
commit c61850fcc3
5 changed files with 65 additions and 0 deletions

39
Cargo.lock generated
View file

@ -970,6 +970,16 @@ version = "0.3.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
[[package]]
name = "mime_guess"
version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
dependencies = [
"mime",
"unicase",
]
[[package]]
name = "minimal-lexical"
version = "0.2.1"
@ -1815,6 +1825,7 @@ dependencies = [
"tokio",
"toml",
"tower",
"tower-http",
]
[[package]]
@ -1871,6 +1882,19 @@ dependencies = [
"tokio",
]
[[package]]
name = "tokio-util"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45"
dependencies = [
"bytes",
"futures-core",
"futures-sink",
"pin-project-lite",
"tokio",
]
[[package]]
name = "toml"
version = "0.5.9"
@ -1909,7 +1933,13 @@ dependencies = [
"http",
"http-body",
"http-range-header",
"httpdate",
"mime",
"mime_guess",
"percent-encoding",
"pin-project-lite",
"tokio",
"tokio-util",
"tower",
"tower-layer",
"tower-service",
@ -2037,6 +2067,15 @@ dependencies = [
"unic-common",
]
[[package]]
name = "unicase"
version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
dependencies = [
"version_check",
]
[[package]]
name = "unicode-bidi"
version = "0.3.8"

View file

@ -18,5 +18,6 @@ thiserror = "1.0.32"
tokio = { version = "1.20.1", features = ["full"] }
toml = "0.5.9"
tower = "0.4.13"
tower-http = { version = "0.3.4", features = ["fs"] }
[features]

View file

@ -10,6 +10,7 @@ use axum::response::Html;
use axum::response::IntoResponse;
use axum::response::Redirect;
use axum::response::Response;
use axum::routing::get_service;
use axum::{
routing::{get, post},
Router,
@ -25,6 +26,7 @@ use tasks::Task;
use tera::Tera;
use thiserror::Error as ThisError;
use tower::ServiceBuilder;
use tower_http::services::ServeDir;
#[derive(ThisError, Debug)]
pub enum Error {
@ -94,6 +96,7 @@ pub struct Config {
secret: String,
connection_string: String,
template_dir: Option<String>,
static_dir: Option<std::path::PathBuf>,
}
#[tokio::main]
@ -128,6 +131,16 @@ async fn main() -> Result<(), Error> {
.route("/create", get(tasks::create_form))
.route("/create", post(tasks::create_backend));
let serve_dir = get_service(ServeDir::new(
config.static_dir.unwrap_or_else(|| "static".into()),
))
.handle_error(|e: std::io::Error| async move {
(
StatusCode::INTERNAL_SERVER_ERROR,
format!("Unhandled server error: {}", e),
)
});
let app = Router::new()
.route("/", get(homepage))
.route("/register", post(users::create_user))
@ -135,6 +148,7 @@ async fn main() -> Result<(), Error> {
.route("/login", get(users::login_form))
.route("/login", post(users::login_backend))
.nest("/tasks", task_routes)
.nest("/static", serve_dir)
.layer(
ServiceBuilder::new()
.layer(Extension(pool))

8
static/style.css Normal file
View file

@ -0,0 +1,8 @@
.wrapper {
/* Text margin */
margin: auto;
width: 60%;
padding: 10px;
perspective: 1000px;
}

View file

@ -1,8 +1,11 @@
<html>
<head>
<title>2m2d</title>
<link rel="stylesheet" href="/static/style.css">
</head>
<body>
<div class="wrapper">
{% block content %}{% endblock %}
</div>
</body>
</html>