mirror of
https://github.com/tokio-rs/axum.git
synced 2026-08-29 00:00:18 +02:00
More robust asset paths in examples (#1090)
* More robust asset paths in examples * Update examples/low-level-rustls/src/main.rs Co-authored-by: Jonas Platte <[email protected]> * format Co-authored-by: Jonas Platte <[email protected]>
This commit is contained in:
co-authored by
Jonas Platte
parent
cbb2e8a244
commit
fd70f81c46
@@ -11,7 +11,14 @@ use hyper::server::{
|
|||||||
conn::{AddrIncoming, Http},
|
conn::{AddrIncoming, Http},
|
||||||
};
|
};
|
||||||
use rustls_pemfile::{certs, pkcs8_private_keys};
|
use rustls_pemfile::{certs, pkcs8_private_keys};
|
||||||
use std::{fs::File, io::BufReader, net::SocketAddr, pin::Pin, sync::Arc};
|
use std::{
|
||||||
|
fs::File,
|
||||||
|
io::BufReader,
|
||||||
|
net::SocketAddr,
|
||||||
|
path::{Path, PathBuf},
|
||||||
|
pin::Pin,
|
||||||
|
sync::Arc,
|
||||||
|
};
|
||||||
use tokio::net::TcpListener;
|
use tokio::net::TcpListener;
|
||||||
use tokio_rustls::{
|
use tokio_rustls::{
|
||||||
rustls::{Certificate, PrivateKey, ServerConfig},
|
rustls::{Certificate, PrivateKey, ServerConfig},
|
||||||
@@ -30,8 +37,12 @@ async fn main() {
|
|||||||
.init();
|
.init();
|
||||||
|
|
||||||
let rustls_config = rustls_server_config(
|
let rustls_config = rustls_server_config(
|
||||||
"examples/tls-rustls/self_signed_certs/key.pem",
|
PathBuf::from(env!("CARGO_MANIFEST_DIR"))
|
||||||
"examples/tls-rustls/self_signed_certs/cert.pem",
|
.join("self_signed_certs")
|
||||||
|
.join("key.pem"),
|
||||||
|
PathBuf::from(env!("CARGO_MANIFEST_DIR"))
|
||||||
|
.join("self_signed_certs")
|
||||||
|
.join("cert.pem"),
|
||||||
);
|
);
|
||||||
|
|
||||||
let acceptor = TlsAcceptor::from(rustls_config);
|
let acceptor = TlsAcceptor::from(rustls_config);
|
||||||
@@ -65,7 +76,7 @@ async fn handler(ConnectInfo(addr): ConnectInfo<SocketAddr>) -> String {
|
|||||||
addr.to_string()
|
addr.to_string()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn rustls_server_config(key: &str, cert: &str) -> Arc<ServerConfig> {
|
fn rustls_server_config(key: impl AsRef<Path>, cert: impl AsRef<Path>) -> Arc<ServerConfig> {
|
||||||
let mut key_reader = BufReader::new(File::open(key).unwrap());
|
let mut key_reader = BufReader::new(File::open(key).unwrap());
|
||||||
let mut cert_reader = BufReader::new(File::open(cert).unwrap());
|
let mut cert_reader = BufReader::new(File::open(cert).unwrap());
|
||||||
|
|
||||||
|
|||||||
+13
-10
@@ -12,7 +12,7 @@ use axum::{
|
|||||||
Router,
|
Router,
|
||||||
};
|
};
|
||||||
use futures::stream::{self, Stream};
|
use futures::stream::{self, Stream};
|
||||||
use std::{convert::Infallible, net::SocketAddr, time::Duration};
|
use std::{convert::Infallible, net::SocketAddr, path::PathBuf, time::Duration};
|
||||||
use tokio_stream::StreamExt as _;
|
use tokio_stream::StreamExt as _;
|
||||||
use tower_http::{services::ServeDir, trace::TraceLayer};
|
use tower_http::{services::ServeDir, trace::TraceLayer};
|
||||||
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
|
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
|
||||||
@@ -27,14 +27,17 @@ async fn main() {
|
|||||||
.with(tracing_subscriber::fmt::layer())
|
.with(tracing_subscriber::fmt::layer())
|
||||||
.init();
|
.init();
|
||||||
|
|
||||||
let static_files_service =
|
let assets_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("assets");
|
||||||
get_service(ServeDir::new("examples/sse/assets").append_index_html_on_directories(true))
|
|
||||||
.handle_error(|error: std::io::Error| async move {
|
let static_files_service = get_service(
|
||||||
(
|
ServeDir::new(assets_dir).append_index_html_on_directories(true),
|
||||||
StatusCode::INTERNAL_SERVER_ERROR,
|
)
|
||||||
format!("Unhandled internal error: {}", error),
|
.handle_error(|error: std::io::Error| async move {
|
||||||
)
|
(
|
||||||
});
|
StatusCode::INTERNAL_SERVER_ERROR,
|
||||||
|
format!("Unhandled internal error: {}", error),
|
||||||
|
)
|
||||||
|
});
|
||||||
|
|
||||||
// build our application with a route
|
// build our application with a route
|
||||||
let app = Router::new()
|
let app = Router::new()
|
||||||
@@ -59,7 +62,7 @@ async fn sse_handler(
|
|||||||
// A `Stream` that repeats an event every second
|
// A `Stream` that repeats an event every second
|
||||||
let stream = stream::repeat_with(|| Event::default().data("hi!"))
|
let stream = stream::repeat_with(|| Event::default().data("hi!"))
|
||||||
.map(Ok)
|
.map(Ok)
|
||||||
.throttle(Duration::from_secs(10));
|
.throttle(Duration::from_secs(1));
|
||||||
|
|
||||||
Sse::new(stream).keep_alive(
|
Sse::new(stream).keep_alive(
|
||||||
axum::response::sse::KeepAlive::new()
|
axum::response::sse::KeepAlive::new()
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
use axum::{routing::get, Router};
|
use axum::{routing::get, Router};
|
||||||
use axum_server::tls_rustls::RustlsConfig;
|
use axum_server::tls_rustls::RustlsConfig;
|
||||||
use std::net::SocketAddr;
|
use std::{net::SocketAddr, path::PathBuf};
|
||||||
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
|
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
@@ -19,8 +19,12 @@ async fn main() {
|
|||||||
.init();
|
.init();
|
||||||
|
|
||||||
let config = RustlsConfig::from_pem_file(
|
let config = RustlsConfig::from_pem_file(
|
||||||
"examples/tls-rustls/self_signed_certs/cert.pem",
|
PathBuf::from(env!("CARGO_MANIFEST_DIR"))
|
||||||
"examples/tls-rustls/self_signed_certs/key.pem",
|
.join("self_signed_certs")
|
||||||
|
.join("cert.pem"),
|
||||||
|
PathBuf::from(env!("CARGO_MANIFEST_DIR"))
|
||||||
|
.join("self_signed_certs")
|
||||||
|
.join("key.pem"),
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ use axum::{
|
|||||||
routing::{get, get_service},
|
routing::{get, get_service},
|
||||||
Router,
|
Router,
|
||||||
};
|
};
|
||||||
use std::net::SocketAddr;
|
use std::{net::SocketAddr, path::PathBuf};
|
||||||
use tower_http::{
|
use tower_http::{
|
||||||
services::ServeDir,
|
services::ServeDir,
|
||||||
trace::{DefaultMakeSpan, TraceLayer},
|
trace::{DefaultMakeSpan, TraceLayer},
|
||||||
@@ -32,7 +32,9 @@ async fn main() {
|
|||||||
))
|
))
|
||||||
.with(tracing_subscriber::fmt::layer())
|
.with(tracing_subscriber::fmt::layer())
|
||||||
.init();
|
.init();
|
||||||
let assets_dir = std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("assets");
|
|
||||||
|
let assets_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("assets");
|
||||||
|
|
||||||
// build our application with some routes
|
// build our application with some routes
|
||||||
let app = Router::new()
|
let app = Router::new()
|
||||||
.fallback(
|
.fallback(
|
||||||
|
|||||||
Reference in New Issue
Block a user