Skip to content

Commit bcd8fca

Browse files
committed
feat(main.rs): Add remote IP logging
Signed-off-by: Denys Fedoryshchenko <denys.f@collabora.com>
1 parent 493fdbd commit bcd8fca

4 files changed

Lines changed: 42 additions & 10 deletions

File tree

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@ edition = "2021"
55

66
[dependencies]
77
axum = { version = "0.7.9", features = ["tracing", "multipart", "macros"] }
8+
axum-client-ip = "0.7.0"
89
axum-server = { version = "0.7.1", features = ["rustls", "rustls-pemfile", "tls-rustls"] }
910
azure_blob_uploader = "0.1.4"
1011
azure_storage = "0.21.0"
1112
azure_storage_blobs = "0.21.0"
1213
chksum-hash-sha2-512 = "0.0.1"
1314
clap = { version = "4.5.23", features = ["derive"] }
15+
envy = "0.4.2"
1416
futures = "0.3.31"
1517
futures-util = "0.3.31"
1618
headers = "0.4.0"

src/azure.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -223,13 +223,19 @@ async fn get_file_from_blob(filename: String) -> ReceivedFile {
223223
match std::fs::remove_file(&cache_filename) {
224224
Ok(_) => {}
225225
Err(e) => {
226-
eprintln!("Error deleting cached file {}: {:?}", cache_filename_headers, e);
226+
eprintln!(
227+
"Error deleting cached file {}: {:?}",
228+
cache_filename_headers, e
229+
);
227230
}
228231
}
229232
match std::fs::remove_file(&cache_filename_headers) {
230233
Ok(_) => {}
231234
Err(e) => {
232-
eprintln!("Error deleting cached file {}: {:?}", cache_filename_headers, e);
235+
eprintln!(
236+
"Error deleting cached file {}: {:?}",
237+
cache_filename_headers, e
238+
);
233239
}
234240
}
235241
}

src/main.rs

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,21 @@ mod storjwt;
1515

1616
use 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};
2425
use axum_server::tls_rustls::RustlsConfig;
2526
use clap::Parser;
2627
use headers::HeaderMap;
28+
use std::path;
2729
use std::{net::SocketAddr, path::PathBuf};
2830
use tokio::io::AsyncSeekExt;
2931
use 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]
270289
async 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());

src/storjwt.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::{Args};
1+
use crate::Args;
22
use clap::Parser;
33
use hmac::{Hmac, Mac};
44
use jwt::{Header, Token, VerifyWithKey};

0 commit comments

Comments
 (0)