1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
pub mod form; mod krate; pub mod package; pub use package::Package; use reqwest::blocking::Client; use crate::settings::toml::Target; use crate::sites::AssetManifest; pub fn script( client: &Client, target: &Target, asset_manifest: Option<AssetManifest>, ) -> Result<(), failure::Error> { let worker_addr = format!( "https://api.cloudflare.com/client/v4/accounts/{}/workers/scripts/{}", target.account_id, target.name, ); let script_upload_form = form::build(target, asset_manifest, None)?; let res = client .put(&worker_addr) .multipart(script_upload_form) .send()?; let res_status = res.status(); if !res_status.is_success() { let res_text = res.text()?; failure::bail!(error_msg(res_status, res_text)) } if let Some(usage_model) = target.usage_model { let addr = format!( "https://api.cloudflare.com/client/v4/accounts/{}/workers/scripts/{}/usage-model", target.account_id, target.name, ); let res = client .put(&addr) .json(&serde_json::json!({ "usage_model": usage_model.as_ref() })) .send()?; let res_status = res.status(); if !res_status.is_success() { let res_text = res.text()?; failure::bail!(error_msg(res_status, res_text)) } } Ok(()) } fn error_msg(status: reqwest::StatusCode, text: String) -> String { if text.contains("\"code\": 10034,") { "You need to verify your account's email address before you can publish. You can do this by checking your email or logging in to https://dash.cloudflare.com.".to_string() } else if text.contains("\"code\": 10000,") { "Your user configuration is invalid, please run wrangler login or wrangler config and enter a new set of credentials.".to_string() } else if text.contains("\"code\": 10075,") { "Setting a Usage Model requires a Paid plan with Unbound enabled. You can do this in the dash by logging in to https://dash.cloudflare.com/?account=workers/plans".to_string() } else { format!("Something went wrong! Status: {}, Details {}", status, text) } } #[test] fn fails_with_good_error_msg_on_verify_email_err() { let status = reqwest::StatusCode::FORBIDDEN; let text = r#"{ "result": null, "success": false, "errors": [ { "code": 10034, "message": "workers.api.error.email_verification_required" } ], "messages": [] }"# .to_string(); let result = error_msg(status, text); assert!(result.contains("https://dash.cloudflare.com")); }