From f2abfec50cc756501a1b747717657bd1ac66e466 Mon Sep 17 00:00:00 2001 From: Ashley Lewis Date: Mon, 12 Aug 2019 18:09:17 -0500 Subject: [PATCH] refactor: switch on global user for preview upload --- src/commands/publish/preview/mod.rs | 112 +++++++--------------------- src/main.rs | 7 +- 2 files changed, 35 insertions(+), 84 deletions(-) diff --git a/src/commands/publish/preview/mod.rs b/src/commands/publish/preview/mod.rs index 97bd79f77..400565c81 100644 --- a/src/commands/publish/preview/mod.rs +++ b/src/commands/publish/preview/mod.rs @@ -19,41 +19,26 @@ struct Preview { pub id: String, } -fn preview_with_auth( +pub fn preview( project: &Project, - user: &GlobalUser, + user: Option, method: Result, body: Option, ) -> Result<(), failure::Error> { - let create_address = format!( - "https://api.cloudflare.com/client/v4/accounts/{}/workers/scripts/{}/preview", - project.account_id, project.name - ); - - let client = http::auth_client(user); - commands::build(&project)?; - let script_upload_form = publish::build_script_upload_form(project)?; - - log::info!("💩"); - let res = client - .post(&create_address) - .multipart(script_upload_form) - .send()? - .error_for_status(); - - let text = &res?.text()?; - log::info!("Response from preview: {:?}", text); + let client = match &user { + Some(user) => http::auth_client(&user), + None => http::client(), + }; - let p: Preview = - serde_json::from_str(text).expect("could not create a script on cloudflareworkers.com"); + let preview = upload_to_preview(&project, user, &client)?; let session = Uuid::new_v4().to_simple(); let preview_host = "example.com"; let https = 1; - let script_id = &p.id; + let script_id = &preview.id; let preview_address = "https://00000000000000000000000000000000.cloudflareworkers.com"; let cookie = format!( @@ -64,8 +49,8 @@ fn preview_with_auth( let method = method.unwrap_or_default(); let worker_res = match method { - HTTPMethod::Get => get(preview_address, cookie, client)?, - HTTPMethod::Post => post(preview_address, cookie, client, body)?, + HTTPMethod::Get => get(preview_address, cookie, &client)?, + HTTPMethod::Post => post(preview_address, cookie, &client, body)?, }; let msg = format!("Your worker responded with: {}", worker_res); message::preview(&msg); @@ -75,73 +60,34 @@ fn preview_with_auth( Ok(()) } -fn preview_without_auth( +fn upload_to_preview( project: &Project, - method: Result, - body: Option, -) -> Result<(), failure::Error> { - let create_address = "https://cloudflareworkers.com/script"; - - let client = http::client(); - - commands::build(&project)?; + user: Option, + client: &reqwest::Client, +) -> Result { + let create_address = match &user { + Some(_user) => format!( + "https://api.cloudflare.com/client/v4/accounts/{}/workers/scripts/{}/preview", + project.account_id, project.name + ), + None => "https://cloudflareworkers.com/script".to_string(), + }; let script_upload_form = publish::build_script_upload_form(project)?; - let res = client - .post(create_address) + let mut res = client + .post(&create_address) .multipart(script_upload_form) .send()? - .error_for_status(); + .error_for_status()?; - let text = &res?.text()?; + let text = &res.text()?; log::info!("Response from preview: {:?}", text); - let p: Preview = + let preview: Preview = serde_json::from_str(text).expect("could not create a script on cloudflareworkers.com"); - let session = Uuid::new_v4().to_simple(); - - let preview_host = "example.com"; - let https = 1; - let script_id = &p.id; - - let preview_address = "https://00000000000000000000000000000000.cloudflareworkers.com"; - let cookie = format!( - "__ew_fiddle_preview={}{}{}{}", - script_id, session, https, preview_host - ); - - let method = method.unwrap_or_default(); - - let worker_res = match method { - HTTPMethod::Get => get(preview_address, cookie, client)?, - HTTPMethod::Post => post(preview_address, cookie, client, body)?, - }; - let msg = format!("Your worker responded with: {}", worker_res); - message::preview(&msg); - - open(preview_host, https, script_id)?; - - Ok(()) -} - -pub fn preview( - method: Result, - body: Option, -) -> Result<(), failure::Error> { - let project = Project::new()?; - - match GlobalUser::new() { - Ok(user) => { - log::info!("running in authenticated mode"); - return preview_with_auth(&project, &user, method, body); - } - Err(_e) => { - log::info!("running in unauthenticated mode"); - return preview_without_auth(&project, method, body); - } - } + Ok(preview) } fn open(preview_host: &str, https: u8, script_id: &str) -> Result<(), failure::Error> { @@ -174,7 +120,7 @@ fn open(preview_host: &str, https: u8, script_id: &str) -> Result<(), failure::E fn get( preview_address: &str, cookie: String, - client: reqwest::Client, + client: &reqwest::Client, ) -> Result { let res = client.get(preview_address).header("Cookie", cookie).send(); let msg = format!("GET {}", preview_address); @@ -185,7 +131,7 @@ fn get( fn post( preview_address: &str, cookie: String, - client: reqwest::Client, + client: &reqwest::Client, body: Option, ) -> Result { let res = match body { diff --git a/src/main.rs b/src/main.rs index 90a4a78da..66d4d195f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -194,6 +194,11 @@ fn run() -> Result<(), failure::Error> { commands::build(&project)?; } else if let Some(matches) = matches.subcommand_matches("preview") { info!("Getting project settings"); + let project = settings::project::Project::new()?; + let user = match settings::global_user::GlobalUser::new() { + Ok(user) => Some(user), + Err(_e) => None, + }; let method = HTTPMethod::from_str(matches.value_of("method").unwrap_or("get")); @@ -202,7 +207,7 @@ fn run() -> Result<(), failure::Error> { None => None, }; - commands::preview(method, body)?; + commands::preview(&project, user, method, body)?; } else if matches.subcommand_matches("whoami").is_some() { info!("Getting User settings"); let user = settings::global_user::GlobalUser::new()?;