@@ -15,19 +15,21 @@ mod storjwt;
1515
1616use axum:: {
1717 body:: Body ,
18- extract:: { DefaultBodyLimit , Multipart , Path } ,
18+ extract:: { ConnectInfo , DefaultBodyLimit , Multipart , Path , Request } ,
1919 http:: { header, Method , StatusCode } ,
2020 response:: IntoResponse ,
2121 routing:: { get, post} ,
2222 Router ,
2323} ;
24+ use axum_client_ip:: { InsecureClientIp , SecureClientIp , SecureClientIpSource } ;
2425use axum_server:: tls_rustls:: RustlsConfig ;
2526use clap:: Parser ;
2627use headers:: HeaderMap ;
28+ use std:: path;
2729use std:: { net:: SocketAddr , path:: PathBuf } ;
2830use tokio:: io:: AsyncSeekExt ;
2931use tokio_util:: io:: ReaderStream ;
30- use std :: path ;
32+ use tower :: ServiceBuilder ;
3133
3234#[ derive( Parser , Debug ) ]
3335#[ command( version, about, long_about = None ) ]
@@ -120,6 +122,7 @@ async fn main() {
120122 tracing_subscriber:: fmt:: init ( ) ;
121123 let tlscfg = initial_setup ( ) . await ;
122124 let port = 3000 ;
125+
123126 println ! ( "Starting server, tls: {:?}" , tlscfg) ;
124127
125128 // Supported endpoints:
@@ -133,17 +136,30 @@ async fn main() {
133136 . route ( "/v1/file" , post ( ax_post_file) )
134137 . route ( "/upload" , post ( ax_post_file) )
135138 . route ( "/*filepath" , get ( ax_get_file) )
136- . layer ( DefaultBodyLimit :: max ( 1024 * 1024 * 1024 * 4 ) ) ;
139+ . layer (
140+ ServiceBuilder :: new ( )
141+ . layer ( SecureClientIpSource :: ConnectInfo . into_extension ( ) )
142+ . layer ( DefaultBodyLimit :: max ( 1024 * 1024 * 1024 * 4 ) ) ,
143+ ) ;
137144
145+ /*
146+ .layer(SecureClientIpSource::ConnectInfo.into_extension())
147+ .layer(DefaultBodyLimit::max(1024 * 1024 * 1024 * 4));
148+ */
138149 if let Some ( tlscfg) = tlscfg {
139150 let addr = SocketAddr :: from ( ( [ 0 , 0 , 0 , 0 ] , port) ) ;
151+ // .serve(app.into_make_service())
140152 axum_server:: bind_rustls ( addr, tlscfg)
141- . serve ( app. into_make_service ( ) )
153+ . serve ( app. into_make_service_with_connect_info :: < SocketAddr > ( ) )
142154 . await
143155 . unwrap ( ) ;
144156 } else {
145- let listener = tokio:: net:: TcpListener :: bind ( "0.0.0.0:3000" ) . await . unwrap ( ) ;
146- axum:: serve ( listener, app) . await . unwrap ( ) ;
157+ //let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
158+ //axum::serve(listener, app).await.unwrap();
159+ axum_server:: bind ( "0.0.0.0:3000" . parse ( ) . unwrap ( ) )
160+ . serve ( app. into_make_service_with_connect_info :: < SocketAddr > ( ) )
161+ . await
162+ . unwrap ( ) ;
147163 }
148164}
149165
@@ -267,11 +283,17 @@ fn filename_from_fullpath(filepath: &str) -> String {
267283 If the token is correct, it will return the content of the file u8
268284
269285*/
286+ // req: Request<Body>,
287+
288+ #[ axum:: debug_handler]
270289async fn ax_get_file (
271290 Path ( filepath) : Path < String > ,
272291 rxheaders : HeaderMap ,
273292 method : Method ,
293+ ConnectInfo ( remote_addr) : ConnectInfo < SocketAddr > ,
274294) -> impl IntoResponse {
295+ //let (mut parts, body) = req.into_parts();
296+ println ! ( "GET file: {} Remote: {:?}" , filepath, remote_addr) ;
275297 let received_file = driver_get_file ( filepath. clone ( ) ) ;
276298 if !received_file. valid {
277299 return ( StatusCode :: NOT_FOUND , format ! ( "Not Found: {}" , filepath) ) . into_response ( ) ;
@@ -288,7 +310,9 @@ async fn ax_get_file(
288310 let filename_only = filename_from_fullpath ( & original_filename) ;
289311 headers. insert (
290312 header:: CONTENT_DISPOSITION ,
291- format ! ( "attachment; filename=\" {}\" " , filename_only) . parse ( ) . unwrap ( ) ,
313+ format ! ( "attachment; filename=\" {}\" " , filename_only)
314+ . parse ( )
315+ . unwrap ( ) ,
292316 ) ;
293317
294318 headers. insert ( header:: ACCEPT_RANGES , "bytes" . parse ( ) . unwrap ( ) ) ;
0 commit comments