feat(frontend): add 404 page and support for static pages
This commit is contained in:
parent
44f0b33fe5
commit
6889377f07
1
Cargo.lock
generated
1
Cargo.lock
generated
@ -1002,6 +1002,7 @@ dependencies = [
|
|||||||
"axum",
|
"axum",
|
||||||
"chrono",
|
"chrono",
|
||||||
"dotenvy",
|
"dotenvy",
|
||||||
|
"http",
|
||||||
"jsonwebtoken",
|
"jsonwebtoken",
|
||||||
"rand",
|
"rand",
|
||||||
"rusqlite",
|
"rusqlite",
|
||||||
|
@ -8,6 +8,7 @@ argon2 = { version = "0.5.3", features = ["password-hash", "rand"] }
|
|||||||
axum = "0.7.5"
|
axum = "0.7.5"
|
||||||
chrono = "0.4.38"
|
chrono = "0.4.38"
|
||||||
dotenvy = "0.15.7"
|
dotenvy = "0.15.7"
|
||||||
|
http = "1.1.0"
|
||||||
jsonwebtoken = "9.3.0"
|
jsonwebtoken = "9.3.0"
|
||||||
rand = "0.8.5"
|
rand = "0.8.5"
|
||||||
rusqlite = "0.32.1"
|
rusqlite = "0.32.1"
|
||||||
|
5
src/assets/style.css
Normal file
5
src/assets/style.css
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
@import url('https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css');
|
||||||
|
|
||||||
|
.center {
|
||||||
|
text-align: center;
|
||||||
|
}
|
19
src/error_pages/404.html
Normal file
19
src/error_pages/404.html
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>404 Not found</title>
|
||||||
|
<link rel="stylesheet" href="/assets/style.css">
|
||||||
|
</head>
|
||||||
|
<body class="center">
|
||||||
|
<header>
|
||||||
|
<h1>404</h1>
|
||||||
|
<h2>Page not found</h2>
|
||||||
|
</header>
|
||||||
|
<main>
|
||||||
|
<p>Sorry, the page you are looking for does not exist.</p>
|
||||||
|
<p>If you arrived here via a link, please open an issue on the repository.</p>
|
||||||
|
</main>
|
||||||
|
</body>
|
||||||
|
</html>
|
23
src/frontend/mod.rs
Normal file
23
src/frontend/mod.rs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
use axum::handler::HandlerWithoutStateExt;
|
||||||
|
use axum::response::{Html, IntoResponse};
|
||||||
|
use axum::Router;
|
||||||
|
use http::StatusCode;
|
||||||
|
use tower_http::services::ServeDir;
|
||||||
|
|
||||||
|
pub fn get_routes() -> Router {
|
||||||
|
Router::new()
|
||||||
|
.nest_service(
|
||||||
|
"/",
|
||||||
|
ServeDir::new("src/static_pages").not_found_service(handler.into_service()),
|
||||||
|
)
|
||||||
|
.nest_service("/assets", ServeDir::new("src/assets"))
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn handler() -> impl IntoResponse {
|
||||||
|
let path = "src/error_pages/404.html";
|
||||||
|
if let Ok(content) = tokio::fs::read_to_string(path).await {
|
||||||
|
(StatusCode::NOT_FOUND, Html(content))
|
||||||
|
} else {
|
||||||
|
(StatusCode::NOT_FOUND, Html("404 Not Found".to_string()))
|
||||||
|
}
|
||||||
|
}
|
@ -6,6 +6,7 @@ use tower_http::services::ServeDir;
|
|||||||
|
|
||||||
mod api;
|
mod api;
|
||||||
mod db;
|
mod db;
|
||||||
|
mod frontend;
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
@ -17,6 +18,7 @@ async fn main() {
|
|||||||
|
|
||||||
let app = Router::new()
|
let app = Router::new()
|
||||||
.merge(api::get_routes())
|
.merge(api::get_routes())
|
||||||
|
.merge(frontend::get_routes())
|
||||||
.nest_service("/scripts", ServeDir::new("scripts"));
|
.nest_service("/scripts", ServeDir::new("scripts"));
|
||||||
|
|
||||||
let port = std::env::var("PORT")
|
let port = std::env::var("PORT")
|
||||||
|
Loading…
Reference in New Issue
Block a user