diff --git a/src/args.rs b/src/cli/args.rs similarity index 85% rename from src/args.rs rename to src/cli/args.rs index 7dd6710..0151dca 100644 --- a/src/args.rs +++ b/src/cli/args.rs @@ -1,6 +1,6 @@ use crate::http_server; -use crate::receiver; -use crate::sender; +use crate::receiver::receiver; +use crate::sender::sender; use clap::{Parser, Subcommand}; use log::debug; @@ -33,7 +33,7 @@ pub enum Commands { overwrite: bool, /// Name of Transfer to download files - #[arg(short, long, value_name = "Transfer_Name")] + #[arg(value_name = "Transfer_Name")] name: Option, }, /// Start a relay server @@ -76,23 +76,25 @@ impl Args { Self::parse() } pub async fn run(&self) -> Result<(), Box> { - env_logger::init(); - debug!("args: {:?}", self); + debug!("args: {:#?}", self); match &self.command { Some(Commands::Send { relay, file }) => { sender::send_info( - relay.as_deref().unwrap_or("http://192.168.178.43:1323"), + relay.as_deref().unwrap_or("http://0.0.0.0:1323"), file.as_deref().unwrap_or("test.txt"), ) .await?; } Some(Commands::Receive { - relay: _, + relay, overwrite: _, name, }) => { - let transfer_name = name.as_deref().unwrap_or("None"); - receiver::download_info(transfer_name).await? + receiver::download_info( + relay.as_deref().unwrap_or("http://0.0.0.0:1323"), + name.as_deref().unwrap_or("None"), + ) + .await? } Some(Commands::Serve { port, diff --git a/src/cli/mod.rs b/src/cli/mod.rs new file mode 100644 index 0000000..6e10f4a --- /dev/null +++ b/src/cli/mod.rs @@ -0,0 +1 @@ +pub mod args; diff --git a/src/password.rs b/src/crypto/mod.rs similarity index 100% rename from src/password.rs rename to src/crypto/mod.rs diff --git a/src/http_server.rs b/src/http_server.rs index 7b5b896..cea4cb7 100644 --- a/src/http_server.rs +++ b/src/http_server.rs @@ -1,3 +1,4 @@ +use crate::transfer_info::transfer_info::{TransferInfoBody, TransferInfoRequest}; use axum::{ extract::{connect_info::ConnectInfo, Json, Path, State}, http::StatusCode, @@ -7,7 +8,6 @@ use axum::{ }; use axum_client_ip::SecureClientIpSource; use rand::{seq::SliceRandom, thread_rng}; -use serde::{Deserialize, Serialize}; use serde_json::json; use std::{ env, @@ -15,37 +15,11 @@ use std::{ sync::{Arc, Mutex}, }; use tokio::signal; -use tracing::{debug, error, info, trace, warn}; - -#[derive(Debug, Serialize, Deserialize, Clone)] -pub struct TransferRequest { - pub ip: String, - pub name: String, - pub body: TransferBody, -} - -#[derive(Debug, Serialize, Deserialize, Clone)] -pub struct TransferBody { - pub keyword: String, - pub files: String, -} - -impl TransferRequest { - pub fn new() -> Self { - Self { - ip: "".to_string(), - name: "".to_string(), - body: TransferBody { - keyword: "".to_string(), - files: "".to_string(), - }, - } - } -} +use tracing::{debug, info, warn}; #[derive(Debug, Clone)] struct AppState { - data: Arc>>, + data: Arc>>, } pub async fn start_server(port: Option<&i32>, listen_addr: Option<&String>) { @@ -110,7 +84,7 @@ async fn download_info( } None => { warn!("couldn't find transfer-name: {}", name); - (StatusCode::NOT_FOUND, Json(TransferRequest::new())) + (StatusCode::NOT_FOUND, Json(TransferInfoRequest::new())) } } } @@ -118,14 +92,14 @@ async fn download_info( async fn upload_info( State(shared_state): State, ConnectInfo(addr): ConnectInfo, - Json(payload): Json, + Json(payload): Json, ) -> impl IntoResponse { debug!("Got upload request from {}", addr.ip().to_string()); let mut data = shared_state.data.lock().unwrap(); - let t_request = TransferRequest { + let t_request = TransferInfoRequest { ip: addr.ip().to_string(), name: generate_random_name(), - body: TransferBody { + body: TransferInfoBody { keyword: payload.keyword, files: payload.files, }, diff --git a/src/main.rs b/src/main.rs index 839d644..ceb7061 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,16 +1,20 @@ -pub mod args; -pub mod http_client; -pub mod http_server; -pub mod receiver; -pub mod sender; +mod cli; +mod http_client; +mod http_server; +mod receiver; +mod sender; +mod transfer_info; +use crate::cli::args::Args; use dotenv::dotenv; +use tracing::error; #[tokio::main] async fn main() -> Result<(), Box> { dotenv().ok(); - let args = args::Args::new(); + env_logger::init(); + let args = Args::new(); if let Err(e) = args.run().await { - eprintln!("Error {e}"); + error!("{e}"); } Ok(()) } diff --git a/src/receiver.rs b/src/receiver.rs deleted file mode 100644 index c8db741..0000000 --- a/src/receiver.rs +++ /dev/null @@ -1,28 +0,0 @@ -use serde::{Deserialize, Serialize}; - -type Result = std::result::Result>; - -#[derive(Debug, Serialize, Deserialize)] -struct TransferInfo { - ip: String, - name: String, - body: TransferInfoBody, -} - -#[derive(Debug, Serialize, Deserialize)] -struct TransferInfoBody { - keyword: String, - files: String, -} -pub async fn download_info(filename: &str) -> Result<()> { - match reqwest::get(format!("http://192.168.178.43:1323/download/{}", filename)).await { - Ok(resp) => { - let json = resp.json::().await?; - println!("Json Response: {:#?}", json); - } - Err(err) => { - println!("Error: {err}"); - } - } - Ok(()) -} diff --git a/src/receiver/mod.rs b/src/receiver/mod.rs new file mode 100644 index 0000000..4c0db7e --- /dev/null +++ b/src/receiver/mod.rs @@ -0,0 +1 @@ +pub mod receiver; diff --git a/src/receiver/receiver.rs b/src/receiver/receiver.rs new file mode 100644 index 0000000..1551e79 --- /dev/null +++ b/src/receiver/receiver.rs @@ -0,0 +1,16 @@ +use crate::transfer_info::transfer_info::TransferInfoRequest; + +type Result = std::result::Result>; + +pub async fn download_info(relay: &str, filename: &str) -> Result<()> { + match reqwest::get(format!("{}/download/{}", relay.to_string(), filename)).await { + Ok(resp) => { + let json = resp.json::().await?; + println!("Json Response: {:#?}", json); + } + Err(err) => { + println!("Error: {err}"); + } + } + Ok(()) +} diff --git a/src/relay/mod.rs b/src/relay/mod.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/sender/mod.rs b/src/sender/mod.rs new file mode 100644 index 0000000..de291c6 --- /dev/null +++ b/src/sender/mod.rs @@ -0,0 +1 @@ +pub mod sender; diff --git a/src/sender.rs b/src/sender/sender.rs similarity index 85% rename from src/sender.rs rename to src/sender/sender.rs index 5e138c1..729bb13 100644 --- a/src/sender.rs +++ b/src/sender/sender.rs @@ -1,4 +1,4 @@ -use crate::http_server::TransferRequest; +use crate::transfer_info::transfer_info::TransferInfoRequest; use log::{debug, error}; use reqwest::{Client, StatusCode}; use std::collections::HashMap; @@ -18,7 +18,7 @@ pub async fn send_info(relay: &str, file: &str) -> Result<()> { .send() .await?; if res.status() == StatusCode::CREATED { - let transfer_info: TransferRequest = res.json().await?; + let transfer_info: TransferInfoRequest = res.json().await?; debug!("Json Response: {:#?}", transfer_info); println!("Transfer name: {}", transfer_info.name); } else { diff --git a/src/server.rs b/src/server.rs deleted file mode 100644 index 3abb8a6..0000000 --- a/src/server.rs +++ /dev/null @@ -1,10 +0,0 @@ -use std::convert::Infallible; -use std::net::SocketAddr; - -use http_body_util::Full; -use hyper::body::Bytes; -use hyper::server::conn::http1; -use hyper::service::service_fn; -use hyper::{Request, Response}; -use hyper_util::rt::TokioIo; -use tokio::net::TcpListener; diff --git a/src/transfer_info/mod.rs b/src/transfer_info/mod.rs new file mode 100644 index 0000000..5eba3d0 --- /dev/null +++ b/src/transfer_info/mod.rs @@ -0,0 +1 @@ +pub mod transfer_info; diff --git a/src/transfer_info/transfer_info.rs b/src/transfer_info/transfer_info.rs new file mode 100644 index 0000000..304603c --- /dev/null +++ b/src/transfer_info/transfer_info.rs @@ -0,0 +1,27 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct TransferInfoRequest { + pub ip: String, + pub name: String, + pub body: TransferInfoBody, +} + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct TransferInfoBody { + pub keyword: String, + pub files: String, +} + +impl TransferInfoRequest { + pub fn new() -> Self { + Self { + ip: "".to_string(), + name: "".to_string(), + body: TransferInfoBody { + keyword: "".to_string(), + files: "".to_string(), + }, + } + } +}