From 6e90d5e576a84a618bb3f798b5f969c11730c5cb Mon Sep 17 00:00:00 2001 From: scx1332 Date: Wed, 25 Sep 2024 23:41:03 +0200 Subject: [PATCH] Fixes to server --- Cargo.lock | 2 +- crates/web3_account_server/Cargo.toml | 2 +- crates/web3_account_server/src/main.rs | 63 ++++++++++++++------------ 3 files changed, 35 insertions(+), 32 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6884bd59..68a55094 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4401,7 +4401,7 @@ dependencies = [ [[package]] name = "web3_account_server" -version = "0.4.8" +version = "0.4.9" dependencies = [ "actix-web", "actix-web-httpauth", diff --git a/crates/web3_account_server/Cargo.toml b/crates/web3_account_server/Cargo.toml index 1bca2ba3..2537f52a 100644 --- a/crates/web3_account_server/Cargo.toml +++ b/crates/web3_account_server/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" name = "web3_account_server" license = "MIT" repository = "https://github.com/scx1332/" -version = "0.4.8" +version = "0.4.9" [dependencies] actix-web = { workspace = true } diff --git a/crates/web3_account_server/src/main.rs b/crates/web3_account_server/src/main.rs index d41b805b..d8be77e0 100644 --- a/crates/web3_account_server/src/main.rs +++ b/crates/web3_account_server/src/main.rs @@ -8,17 +8,19 @@ use std::io::{BufReader, BufWriter}; use std::sync::{Arc, Mutex}; use structopt::StructOpt; -fn add(item: String, file_name: &str) -> bool { - let mut results: Vec = { - if let Ok(file) = OpenOptions::new().read(true).open(file_name) { - let reader = BufReader::new(file); - serde_json::from_reader(reader).unwrap_or_else(|_| Vec::new()) - } else { - Vec::new() - } - }; +fn read_results(file_name: &str) -> Vec { + if let Ok(file) = OpenOptions::new().read(true).open(file_name) { + let reader = BufReader::new(file); + serde_json::from_reader(reader).unwrap_or_else(|_| Vec::new()) + } else { + Vec::new() + } +} + +fn add(item: String, file_name: &str) -> std::io::Result { + let mut results = read_results(file_name); if results.contains(&item) { - return false; + return Ok(false); } results.push(item); let file = OpenOptions::new() @@ -26,21 +28,17 @@ fn add(item: String, file_name: &str) -> bool { .create(true) .truncate(true) .open(file_name) - .unwrap(); + .inspect_err(|e| log::error!("Error opening file: {}", e))?; let writer = BufWriter::new(file); serde_json::to_writer(writer, &results).unwrap(); - true + Ok(true) } -fn get(file_name: &str) -> Option { - let mut results: Vec = { - let file = OpenOptions::new().read(true).open(file_name).unwrap(); - let reader = BufReader::new(file); - serde_json::from_reader(reader).unwrap_or_else(|_| Vec::new()) - }; +fn get(file_name: &str) -> std::io::Result> { + let mut results = read_results(file_name); // get first item if results.is_empty() { - return None; + return Ok(None); } let item = results.remove(0); @@ -48,11 +46,10 @@ fn get(file_name: &str) -> Option { let file = OpenOptions::new() .write(true) .truncate(true) - .open(file_name) - .unwrap(); + .open(file_name)?; let writer = BufWriter::new(file); serde_json::to_writer(writer, &results).unwrap(); - Some(item) + Ok(Some(item)) } #[derive(Clone)] @@ -93,10 +90,13 @@ async fn add_to_queue(data: web::Data, item: String) -> impl Responder if private_key.len() != 32 { return HttpResponse::BadRequest().body("Invalid item length"); } - if add(hex::encode(private_key), &data.file_name) { - HttpResponse::Ok().body("Added to the queue") - } else { - HttpResponse::Ok().body("Item already in the queue") + match add(hex::encode(private_key), &data.file_name) { + Ok(true) => HttpResponse::Ok().body("Added to the queue"), + Ok(false) => HttpResponse::Ok().body("Item already in the queue"), + Err(e) => { + log::error!("Error adding item: {}", e); + HttpResponse::InternalServerError().finish() + } } } @@ -113,10 +113,13 @@ async fn count(data: web::Data) -> impl Responder { async fn get_from_queue(data: web::Data) -> impl Responder { let _lock = data.lock.lock().unwrap(); - if let Some(item) = get(&data.file_name) { - HttpResponse::Ok().body(item) - } else { - HttpResponse::BadRequest().body("Queue is empty") + match get(&data.file_name) { + Ok(Some(item)) => HttpResponse::Ok().body(item), + Ok(None) => HttpResponse::BadRequest().body("Queue is empty"), + Err(e) => { + log::error!("Error getting item: {}", e); + HttpResponse::InternalServerError().finish() + } } }