Skip to content

Commit 967f57a

Browse files
X-Clacks-Overhead: GNU Alexander "Technoblade"
1 parent b1948b1 commit 967f57a

File tree

2 files changed

+19
-43
lines changed

2 files changed

+19
-43
lines changed

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ edition = "2021"
66

77
[dependencies]
88
reqwest = { version = "0.12", features = ["json", "trust-dns", "rustls-tls-webpki-roots"], default-features = false }
9+
tower-http = { version = "0.5", default-features = false, features = ["tracing", "fs", "set-header"] }
910
axum = { version = "0.7", features = ["tokio", "http1", "http2", "query"], default-features = false }
10-
tower-http = { version = "0.5", default-features = false, features = ["tracing", "fs"] }
1111
tokio = { version = "1", features = ["rt-multi-thread", "macros", "signal"] }
1212
tracing-subscriber = { version = "0.3", features = ["json"] }
1313
askama = { version = "0.12", features = ["with-axum"] }

src/main.rs

+18-42
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,10 @@ use reqwest::{header::HeaderMap, redirect::Policy, Client};
3131
use serde::{Deserialize, Serialize};
3232
use tokio::net::TcpListener;
3333
use tower::ServiceBuilder;
34-
use tower_http::services::ServeDir;
34+
use tower_http::{
35+
services::ServeDir,
36+
set_header::{SetResponseHeader, SetResponseHeaderLayer},
37+
};
3538
use tracing::Level;
3639

3740
use crate::{
@@ -59,6 +62,7 @@ async fn main() {
5962

6063
let mut default_headers = HeaderMap::new();
6164
default_headers.insert("Accept", "application/json".parse().unwrap());
65+
6266
let http_client = Client::builder()
6367
.connect_timeout(Duration::from_secs(10))
6468
.default_headers(default_headers)
@@ -85,10 +89,15 @@ async fn main() {
8589
bust_dir: bust_dir.into(),
8690
};
8791

88-
let cache_none = axum::middleware::from_fn(cache_none);
89-
let cache_medium = axum::middleware::from_fn(cache_medium);
90-
let cache_max = axum::middleware::from_fn(cache_max);
91-
let noindex = axum::middleware::from_fn(noindex);
92+
let cache_none =
93+
SetResponseHeaderLayer::overriding(CACHE_CONTROL.clone(), CACHE_CONTROL_NONE.clone());
94+
let cache_medium =
95+
SetResponseHeaderLayer::overriding(CACHE_CONTROL.clone(), CACHE_CONTROL_MEDIUM.clone());
96+
let cache_max =
97+
SetResponseHeaderLayer::overriding(CACHE_CONTROL.clone(), CACHE_CONTROL_IMMUTABLE.clone());
98+
let noindex = SetResponseHeaderLayer::overriding(ROBOTS_NAME.clone(), ROBOTS_VALUE.clone());
99+
let csp = SetResponseHeaderLayer::overriding(CONTENT_SECURITY_POLICY, CSP_VALUE.clone());
100+
let clacks = SetResponseHeaderLayer::overriding(CLACKS_NAME.clone(), CLACKS_VALUE.clone());
92101

93102
let serve_dir_raw = ServeDir::new(&asset_dir)
94103
.append_index_html_on_directories(true)
@@ -108,8 +117,7 @@ async fn main() {
108117
.route("/api/java/", get(no_address))
109118
.route("/api/bedrock/", get(no_address))
110119
.route("/api/services", get(services::handle_mcstatus))
111-
.layer(noindex)
112-
.layer(cache_none);
120+
.layer(ServiceBuilder::new().layer(noindex).layer(cache_none));
113121
let router = Router::new()
114122
.route("/", get(root))
115123
.route_with_tsr("/api/", get(api_info))
@@ -123,7 +131,7 @@ async fn main() {
123131
)
124132
.fallback_service(serve_dir)
125133
.merge(api)
126-
.layer(axum::middleware::from_fn(csp))
134+
.layer(ServiceBuilder::new().layer(csp).layer(clacks))
127135
.with_state(state);
128136

129137
let socket_address = SocketAddr::from((Ipv4Addr::UNSPECIFIED, port));
@@ -161,40 +169,8 @@ static CSP_VALUE: HeaderValue = HeaderValue::from_static(
161169
base-uri 'none';",
162170
);
163171

164-
async fn noindex(req: Request, next: Next) -> Response {
165-
let mut resp = next.run(req).await;
166-
resp.headers_mut()
167-
.insert(ROBOTS_NAME.clone(), ROBOTS_VALUE.clone());
168-
resp
169-
}
170-
171-
async fn csp(req: Request, next: Next) -> Response {
172-
let mut resp = next.run(req).await;
173-
resp.headers_mut()
174-
.insert(CONTENT_SECURITY_POLICY, CSP_VALUE.clone());
175-
resp
176-
}
177-
178-
async fn cache_max(req: Request, next: Next) -> Response {
179-
let mut resp = next.run(req).await;
180-
resp.headers_mut()
181-
.insert(CACHE_CONTROL, CACHE_CONTROL_IMMUTABLE.clone());
182-
resp
183-
}
184-
185-
async fn cache_medium(req: Request, next: Next) -> Response {
186-
let mut resp = next.run(req).await;
187-
resp.headers_mut()
188-
.insert(CACHE_CONTROL, CACHE_CONTROL_MEDIUM.clone());
189-
resp
190-
}
191-
192-
async fn cache_none(req: Request, next: Next) -> Response {
193-
let mut resp = next.run(req).await;
194-
resp.headers_mut()
195-
.insert(CACHE_CONTROL, CACHE_CONTROL_NONE.clone());
196-
resp
197-
}
172+
static CLACKS_NAME: HeaderName = HeaderName::from_static("x-clacks-overhead");
173+
static CLACKS_VALUE: HeaderValue = HeaderValue::from_static("GNU Alexander \"Technoblade\"");
198174

199175
#[derive(Template)]
200176
#[template(path = "index.html")]

0 commit comments

Comments
 (0)