feature(relay): added route for deleting transfers on relay server

This commit is contained in:
Patryk Hegenberg 2024-04-28 17:27:12 +02:00
parent 63ca7aa3ef
commit 224fd58639
2 changed files with 54 additions and 0 deletions

View file

@ -24,6 +24,7 @@ use axum::{
};
use futures_util::StreamExt;
use serde_json::json;
use std::{env, net::SocketAddr, sync::Arc};
use tokio::{
net::TcpListener,
@ -99,6 +100,7 @@ pub async fn start_ws(port: Option<&i32>, listen_addr: Option<&String>) {
.route("/ws", get(ws_handler))
.route("/upload", post(upload_info))
.route("/download/:name", get(download_info))
.route("/download_success/:name", post(download_success))
.with_state(server)
.layer(
TraceLayer::new_for_http()
@ -320,3 +322,53 @@ pub async fn download_info(
}
}
}
pub async fn download_success(
State(shared_state): State<Arc<RwLock<AppState>>>,
Path(name): Path<String>,
) -> impl IntoResponse {
let mut data = shared_state.write().await;
if let Some(index) = data
.transfers
.iter()
.position(|request| request.name == name)
{
debug!("Found Transfer by name '{name}'");
data.transfers.remove(index);
debug!("Transfer deleted");
(
StatusCode::OK,
Json(json!({
"message": "transfer deleted"
})),
)
} else {
warn!("couldn't find transfer-name: {}", name);
(
StatusCode::NOT_FOUND,
Json(json!({
"message": "transfer not found"
})),
)
}
// match data.iter().find(|request| request.body.name == name) {
// Some(request) => {
// debug!("Found transfer name.");
// return (
// StatusCode::OK,
// Json(json!({
// "message" : "transfer deleted"
// })),
// );
// }
// None => {
// warn!("couldn't find transfer-name: {}", name);
// return (
// StatusCode::NOT_FOUND,
// Json(json!({
// "message" : "transfer not found"
// })),
// );
// }
// }
}

View file

@ -1,5 +1,6 @@
use crate::relay::appstate::AppState;
use crate::relay::server::download_info;
use crate::relay::server::download_success;
use crate::relay::server::upload_info;
use crate::relay::server::ws_handler;
use axum::{
@ -24,6 +25,7 @@ async fn axum() -> ShuttleAxum {
.route("/ws", get(ws_handler))
.route("/upload", post(upload_info))
.route("/download/:name", get(download_info))
.route("/download_success/:name", post(download_success))
.with_state(appstate)
.layer(SecureClientIpSource::ConnectInfo.into_extension());