From 224fd58639bd12deebfc1819c9db43d1940b8a60 Mon Sep 17 00:00:00 2001 From: Patryk Hegenberg Date: Sun, 28 Apr 2024 17:27:12 +0200 Subject: [PATCH] feature(relay): added route for deleting transfers on relay server --- src/relay/server.rs | 52 +++++++++++++++++++++++++++++++++++++++++++++ src/shuttle.rs | 2 ++ 2 files changed, 54 insertions(+) diff --git a/src/relay/server.rs b/src/relay/server.rs index 20c01d6..57ce034 100644 --- a/src/relay/server.rs +++ b/src/relay/server.rs @@ -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>>, + Path(name): Path, +) -> 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" + // })), + // ); + // } + // } +} diff --git a/src/shuttle.rs b/src/shuttle.rs index f35dc1e..c5458b5 100644 --- a/src/shuttle.rs +++ b/src/shuttle.rs @@ -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());