@@ -31,7 +31,10 @@ use reqwest::{header::HeaderMap, redirect::Policy, Client};
31
31
use serde:: { Deserialize , Serialize } ;
32
32
use tokio:: net:: TcpListener ;
33
33
use tower:: ServiceBuilder ;
34
- use tower_http:: services:: ServeDir ;
34
+ use tower_http:: {
35
+ services:: ServeDir ,
36
+ set_header:: { SetResponseHeader , SetResponseHeaderLayer } ,
37
+ } ;
35
38
use tracing:: Level ;
36
39
37
40
use crate :: {
@@ -59,6 +62,7 @@ async fn main() {
59
62
60
63
let mut default_headers = HeaderMap :: new ( ) ;
61
64
default_headers. insert ( "Accept" , "application/json" . parse ( ) . unwrap ( ) ) ;
65
+
62
66
let http_client = Client :: builder ( )
63
67
. connect_timeout ( Duration :: from_secs ( 10 ) )
64
68
. default_headers ( default_headers)
@@ -85,10 +89,15 @@ async fn main() {
85
89
bust_dir : bust_dir. into ( ) ,
86
90
} ;
87
91
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 ( ) ) ;
92
101
93
102
let serve_dir_raw = ServeDir :: new ( & asset_dir)
94
103
. append_index_html_on_directories ( true )
@@ -108,8 +117,7 @@ async fn main() {
108
117
. route ( "/api/java/" , get ( no_address) )
109
118
. route ( "/api/bedrock/" , get ( no_address) )
110
119
. route ( "/api/services" , get ( services:: handle_mcstatus) )
111
- . layer ( noindex)
112
- . layer ( cache_none) ;
120
+ . layer ( ServiceBuilder :: new ( ) . layer ( noindex) . layer ( cache_none) ) ;
113
121
let router = Router :: new ( )
114
122
. route ( "/" , get ( root) )
115
123
. route_with_tsr ( "/api/" , get ( api_info) )
@@ -123,7 +131,7 @@ async fn main() {
123
131
)
124
132
. fallback_service ( serve_dir)
125
133
. merge ( api)
126
- . layer ( axum :: middleware :: from_fn ( csp) )
134
+ . layer ( ServiceBuilder :: new ( ) . layer ( csp) . layer ( clacks ) )
127
135
. with_state ( state) ;
128
136
129
137
let socket_address = SocketAddr :: from ( ( Ipv4Addr :: UNSPECIFIED , port) ) ;
@@ -161,40 +169,8 @@ static CSP_VALUE: HeaderValue = HeaderValue::from_static(
161
169
base-uri 'none';",
162
170
) ;
163
171
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\" " ) ;
198
174
199
175
#[ derive( Template ) ]
200
176
#[ template( path = "index.html" ) ]
0 commit comments