From dd53462cfb18549d24900c01154e378c9d9e5ac5 Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Sun, 8 Nov 2020 00:34:34 +0800 Subject: [PATCH] feat: add call_fn --- __enclave/virt_enclave/src/main.rs | 75 ++++++++++++++++-------------- 1 file changed, 41 insertions(+), 34 deletions(-) diff --git a/__enclave/virt_enclave/src/main.rs b/__enclave/virt_enclave/src/main.rs index 564933f..2aeed5b 100644 --- a/__enclave/virt_enclave/src/main.rs +++ b/__enclave/virt_enclave/src/main.rs @@ -30,43 +30,47 @@ async fn main() { }); let list_js = warp::path("list_js").map(|| { - let mut jss = vec![]; - if let Ok(read_dir) = std::fs::read_dir("js") { - for entry in read_dir { - if let Ok(dir_entry) = entry { - if let Ok(file_name) = dir_entry.file_name().into_string() { - if file_name.ends_with(".js") { - let chars = file_name.chars(); - jss.push(chars.take(file_name.chars().count() - 3).collect::()); + call_fn(|| -> XResult { + let mut jss = vec![]; + if let Ok(read_dir) = std::fs::read_dir("js") { + for entry in read_dir { + if let Ok(dir_entry) = entry { + if let Ok(file_name) = dir_entry.file_name().into_string() { + if file_name.ends_with(".js") { + let chars = file_name.chars(); + jss.push(chars.take(file_name.chars().count() - 3).collect::()); + } } } } } - } - serde_json::to_string_pretty(&jss).unwrap() + "\n" + Ok(serde_json::to_string_pretty(&jss).unwrap() + "\n") + }) }); let get_js = warp::path!("get_js" / String).map(|js_hex| { - let js_fn = format!("js/{}.js", js_hex); - let js_sig_fn = format!("js/{}.sig.json", js_hex); - let js = read_file(&js_fn).unwrap(); - let js_sig = read_file(&js_sig_fn).unwrap(); - - let signed_message: SignedMessage = serde_json::from_str(&js_sig).unwrap(); - - let mut result = HashMap::new(); - result.insert("js", js); - result.insert("sig", js_sig); - result.insert("verify", signed_message.verify(&load_signing_key_pair().unwrap().public_key()).to_string()); - - serde_json::to_string_pretty(&result).unwrap() + "\n" + call_fn(|| -> XResult { + let js_fn = format!("js/{}.js", js_hex); + let js_sig_fn = format!("js/{}.sig.json", js_hex); + let js = read_file(&js_fn)?; + let js_sig = read_file(&js_sig_fn)?; + + let signed_message: SignedMessage = serde_json::from_str(&js_sig)?; + + let mut result = HashMap::new(); + result.insert("js", js); + result.insert("sig", js_sig); + result.insert("verify", signed_message.verify(&load_signing_key_pair()?.public_key()).to_string()); + + Ok(serde_json::to_string_pretty(&result)? + "\n") + }) }); let call_js = warp::post() .and(warp::path!("call_js" / String)) .and(warp::body::json()) .map(|js_hex, call_js_body: CallJSBody| { - let the_fn = || -> XResult { + call_fn(|| -> XResult { let js_fn = format!("js/{}.js", js_hex); let js_sig_fn = format!("js/{}.sig.json", js_hex); let js = read_file(&js_fn)?; @@ -100,16 +104,7 @@ async fn main() { }, } Ok(http_status.to_string_pretty()) - }; - match the_fn() { - Err(e) => { - HttpResult::new_500( - "Script call failed!".to_owned(), - Some(format!("{}", e)) - ).to_string_pretty() - }, - Ok(r) => r, - } + }) }); println!("Listen at 127.0.0.1:8888 ..."); @@ -121,3 +116,15 @@ async fn main() { .run(([127, 0, 0, 1], 8888)) .await; } + +fn call_fn(f: F) -> String where F: FnOnce() -> XResult { + match f() { + Err(e) => { + HttpResult::new_500( + "Call fn failed!".to_owned(), + Some(format!("{}", e)) + ).to_string_pretty() + }, + Ok(r) => r, + } +} \ No newline at end of file