Upgrade reqwest and add ALPN for http/2

This commit is contained in:
Gregory Schier
2024-06-08 19:40:35 -07:00
parent 8f086425fe
commit 125f503cfa
6 changed files with 162 additions and 141 deletions

208
src-tauri/Cargo.lock generated
View File

@@ -283,9 +283,9 @@ dependencies = [
[[package]] [[package]]
name = "async-signal" name = "async-signal"
version = "0.2.7" version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "329972aa325176e89114919f2a80fdae4f4c040f66a370b1a1159c6c0f94e7aa" checksum = "794f185324c2f00e771cd9f1ae8b5ac68be2ca7abb129a87afd6e86d228bc54d"
dependencies = [ dependencies = [
"async-io", "async-io",
"async-lock", "async-lock",
@@ -767,9 +767,9 @@ dependencies = [
[[package]] [[package]]
name = "cc" name = "cc"
version = "1.0.98" version = "1.0.99"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" checksum = "96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695"
[[package]] [[package]]
name = "cesu8" name = "cesu8"
@@ -935,13 +935,24 @@ dependencies = [
"version_check 0.9.4", "version_check 0.9.4",
] ]
[[package]]
name = "cookie"
version = "0.18.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747"
dependencies = [
"percent-encoding",
"time",
"version_check 0.9.4",
]
[[package]] [[package]]
name = "cookie_store" name = "cookie_store"
version = "0.20.0" version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "387461abbc748185c3a6e1673d826918b450b87ff22639429c694619a83b6cf6" checksum = "387461abbc748185c3a6e1673d826918b450b87ff22639429c694619a83b6cf6"
dependencies = [ dependencies = [
"cookie", "cookie 0.17.0",
"idna 0.3.0", "idna 0.3.0",
"log", "log",
"publicsuffix", "publicsuffix",
@@ -952,6 +963,23 @@ dependencies = [
"url", "url",
] ]
[[package]]
name = "cookie_store"
version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4934e6b7e8419148b6ef56950d277af8561060b56afd59e2aadf98b59fce6baa"
dependencies = [
"cookie 0.18.1",
"idna 0.5.0",
"log",
"publicsuffix",
"serde",
"serde_derive",
"serde_json",
"time",
"url",
]
[[package]] [[package]]
name = "core-foundation" name = "core-foundation"
version = "0.9.4" version = "0.9.4"
@@ -1207,9 +1235,9 @@ dependencies = [
[[package]] [[package]]
name = "deno_ast" name = "deno_ast"
version = "0.39.0" version = "0.39.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32edef567e3090862e865c75628f4d35ace80ca90e0fc5263a7d10fa307ae899" checksum = "042645e6a505a359b288723ded5c8b30fdc4f70514a3bcd7a49221cc89c1ba90"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"base64 0.21.7", "base64 0.21.7",
@@ -1534,9 +1562,9 @@ checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653"
[[package]] [[package]]
name = "dtoa-short" name = "dtoa-short"
version = "0.3.4" version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dbaceec3c6e4211c79e7b1800fb9680527106beb2f9c51904a3210c03a448c74" checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87"
dependencies = [ dependencies = [
"dtoa", "dtoa",
] ]
@@ -1573,7 +1601,7 @@ dependencies = [
"rustc_version 0.4.0", "rustc_version 0.4.0",
"toml 0.8.2", "toml 0.8.2",
"vswhom", "vswhom",
"winreg 0.52.0", "winreg",
] ]
[[package]] [[package]]
@@ -1599,9 +1627,9 @@ checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf"
[[package]] [[package]]
name = "enumflags2" name = "enumflags2"
version = "0.7.9" version = "0.7.10"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3278c9d5fb675e0a51dabcf4c0d355f692b064171535ba72361be1528a9d8e8d" checksum = "d232db7f5956f3f14313dc2f87985c58bd2c695ce124c8cdd984e08e15ac133d"
dependencies = [ dependencies = [
"enumflags2_derive", "enumflags2_derive",
"serde", "serde",
@@ -1609,9 +1637,9 @@ dependencies = [
[[package]] [[package]]
name = "enumflags2_derive" name = "enumflags2_derive"
version = "0.7.9" version = "0.7.10"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c785274071b1b420972453b306eeca06acf4633829db4223b58a2a8c5953bc4" checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@@ -2356,6 +2384,25 @@ dependencies = [
"tracing", "tracing",
] ]
[[package]]
name = "h2"
version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab"
dependencies = [
"atomic-waker",
"bytes",
"fnv",
"futures-core",
"futures-sink",
"http 1.1.0",
"indexmap 2.2.6",
"slab",
"tokio",
"tokio-util",
"tracing",
]
[[package]] [[package]]
name = "half" name = "half"
version = "2.4.1" version = "2.4.1"
@@ -2569,7 +2616,7 @@ dependencies = [
"futures-channel", "futures-channel",
"futures-core", "futures-core",
"futures-util", "futures-util",
"h2", "h2 0.3.26",
"http 0.2.12", "http 0.2.12",
"http-body 0.4.6", "http-body 0.4.6",
"httparse", "httparse",
@@ -2592,6 +2639,7 @@ dependencies = [
"bytes", "bytes",
"futures-channel", "futures-channel",
"futures-util", "futures-util",
"h2 0.4.5",
"http 1.1.0", "http 1.1.0",
"http-body 1.0.0", "http-body 1.0.0",
"httparse", "httparse",
@@ -2649,15 +2697,18 @@ dependencies = [
[[package]] [[package]]
name = "hyper-tls" name = "hyper-tls"
version = "0.5.0" version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0"
dependencies = [ dependencies = [
"bytes", "bytes",
"hyper 0.14.29", "http-body-util",
"hyper 1.3.1",
"hyper-util",
"native-tls", "native-tls",
"tokio", "tokio",
"tokio-native-tls", "tokio-native-tls",
"tower-service",
] ]
[[package]] [[package]]
@@ -3764,9 +3815,9 @@ dependencies = [
[[package]] [[package]]
name = "os_pipe" name = "os_pipe"
version = "1.1.5" version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57119c3b893986491ec9aa85056780d3a0f3cf4da7cc09dd3650dbd6c6738fb9" checksum = "29d73ba8daf8fac13b0501d1abeddcfe21ba7401ada61a819144b6c2a4f32209"
dependencies = [ dependencies = [
"libc", "libc",
"windows-sys 0.52.0", "windows-sys 0.52.0",
@@ -4559,23 +4610,26 @@ dependencies = [
[[package]] [[package]]
name = "reqwest" name = "reqwest"
version = "0.11.27" version = "0.12.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" checksum = "566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10"
dependencies = [ dependencies = [
"async-compression", "async-compression",
"base64 0.21.7", "base64 0.22.1",
"bytes", "bytes",
"cookie", "cookie 0.17.0",
"cookie_store", "cookie_store 0.20.0",
"encoding_rs", "encoding_rs",
"futures-core", "futures-core",
"futures-util", "futures-util",
"h2", "h2 0.4.5",
"http 0.2.12", "http 1.1.0",
"http-body 0.4.6", "http-body 1.0.0",
"hyper 0.14.29", "http-body-util",
"hyper 1.3.1",
"hyper-rustls 0.26.0",
"hyper-tls", "hyper-tls",
"hyper-util",
"ipnet", "ipnet",
"js-sys", "js-sys",
"log", "log",
@@ -4585,46 +4639,6 @@ dependencies = [
"once_cell", "once_cell",
"percent-encoding", "percent-encoding",
"pin-project-lite", "pin-project-lite",
"rustls-pemfile 1.0.4",
"serde",
"serde_json",
"serde_urlencoded",
"sync_wrapper",
"system-configuration",
"tokio",
"tokio-native-tls",
"tokio-util",
"tower-service",
"url",
"wasm-bindgen",
"wasm-bindgen-futures",
"web-sys",
"winreg 0.50.0",
]
[[package]]
name = "reqwest"
version = "0.12.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10"
dependencies = [
"base64 0.22.1",
"bytes",
"futures-core",
"futures-util",
"http 1.1.0",
"http-body 1.0.0",
"http-body-util",
"hyper 1.3.1",
"hyper-rustls 0.26.0",
"hyper-util",
"ipnet",
"js-sys",
"log",
"mime",
"once_cell",
"percent-encoding",
"pin-project-lite",
"rustls 0.22.4", "rustls 0.22.4",
"rustls-pemfile 2.1.2", "rustls-pemfile 2.1.2",
"rustls-pki-types", "rustls-pki-types",
@@ -4632,7 +4646,9 @@ dependencies = [
"serde_json", "serde_json",
"serde_urlencoded", "serde_urlencoded",
"sync_wrapper", "sync_wrapper",
"system-configuration",
"tokio", "tokio",
"tokio-native-tls",
"tokio-rustls 0.25.0", "tokio-rustls 0.25.0",
"tokio-util", "tokio-util",
"tower-service", "tower-service",
@@ -4641,19 +4657,19 @@ dependencies = [
"wasm-bindgen-futures", "wasm-bindgen-futures",
"wasm-streams", "wasm-streams",
"web-sys", "web-sys",
"webpki-roots 0.26.1", "webpki-roots 0.26.2",
"winreg 0.52.0", "winreg",
] ]
[[package]] [[package]]
name = "reqwest_cookie_store" name = "reqwest_cookie_store"
version = "0.6.0" version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba529055ea150e42e4eb9c11dcd380a41025ad4d594b0cb4904ef28b037e1061" checksum = "a0b36498c7452f11b1833900f31fbb01fc46be20992a50269c88cf59d79f54e9"
dependencies = [ dependencies = [
"bytes", "bytes",
"cookie_store", "cookie_store 0.21.0",
"reqwest 0.11.27", "reqwest",
"url", "url",
] ]
@@ -6281,9 +6297,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
[[package]] [[package]]
name = "tar" name = "tar"
version = "0.4.40" version = "0.4.41"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb" checksum = "cb797dad5fb5b76fcf519e702f4a589483b5ef06567f160c392832c1f5e44909"
dependencies = [ dependencies = [
"filetime", "filetime",
"libc", "libc",
@@ -6323,7 +6339,7 @@ dependencies = [
"objc", "objc",
"percent-encoding", "percent-encoding",
"raw-window-handle 0.6.2", "raw-window-handle 0.6.2",
"reqwest 0.12.4", "reqwest",
"serde", "serde",
"serde_json", "serde_json",
"serde_repr", "serde_repr",
@@ -6552,7 +6568,7 @@ dependencies = [
"http 1.1.0", "http 1.1.0",
"infer", "infer",
"minisign-verify", "minisign-verify",
"reqwest 0.12.4", "reqwest",
"semver 1.0.23", "semver 1.0.23",
"serde", "serde",
"serde_json", "serde_json",
@@ -6976,7 +6992,7 @@ dependencies = [
"axum", "axum",
"base64 0.21.7", "base64 0.21.7",
"bytes", "bytes",
"h2", "h2 0.3.26",
"http 0.2.12", "http 0.2.12",
"http-body 0.4.6", "http-body 0.4.6",
"hyper 0.14.29", "hyper 0.14.29",
@@ -7101,9 +7117,9 @@ dependencies = [
[[package]] [[package]]
name = "tray-icon" name = "tray-icon"
version = "0.14.2" version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b27516dfcfa22a9faaf192283a122bfbede38c1e59ef194e3c4db6549b419c0" checksum = "3ad8319cca93189ea9ab1b290de0595960529750b6b8b501a399ed1ec3775d60"
dependencies = [ dependencies = [
"cocoa", "cocoa",
"core-graphics", "core-graphics",
@@ -7589,9 +7605,9 @@ checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1"
[[package]] [[package]]
name = "webpki-roots" name = "webpki-roots"
version = "0.26.1" version = "0.26.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b3de34ae270483955a94f4b21bdaaeb83d508bb84a01435f393818edb0012009" checksum = "3c452ad30530b54a4d8e71952716a212b08efd0f3562baa66c29a618b07da7c3"
dependencies = [ dependencies = [
"rustls-pki-types", "rustls-pki-types",
] ]
@@ -7769,9 +7785,9 @@ dependencies = [
[[package]] [[package]]
name = "windows-result" name = "windows-result"
version = "0.1.1" version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "749f0da9cc72d82e600d8d2e44cadd0b9eedb9038f71a1c58556ac1c5791813b" checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8"
dependencies = [ dependencies = [
"windows-targets 0.52.5", "windows-targets 0.52.5",
] ]
@@ -7999,16 +8015,6 @@ dependencies = [
"memchr", "memchr",
] ]
[[package]]
name = "winreg"
version = "0.50.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
dependencies = [
"cfg-if",
"windows-sys 0.48.0",
]
[[package]] [[package]]
name = "winreg" name = "winreg"
version = "0.52.0" version = "0.52.0"
@@ -8121,12 +8127,12 @@ dependencies = [
[[package]] [[package]]
name = "xdg-home" name = "xdg-home"
version = "1.1.0" version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "21e5a325c3cb8398ad6cf859c1135b25dd29e186679cf2da7581d9679f63b38e" checksum = "ca91dcf8f93db085f3a0a29358cd0b9d670915468f4290e8b85d118a34211ab8"
dependencies = [ dependencies = [
"libc", "libc",
"winapi", "windows-sys 0.52.0",
] ]
[[package]] [[package]]
@@ -8143,13 +8149,13 @@ dependencies = [
"deno_core", "deno_core",
"grpc", "grpc",
"hex_color", "hex_color",
"http 0.2.12", "http 1.1.0",
"log", "log",
"objc", "objc",
"openssl-sys", "openssl-sys",
"rand 0.8.5", "rand 0.8.5",
"regex", "regex",
"reqwest 0.11.27", "reqwest",
"reqwest_cookie_store", "reqwest_cookie_store",
"serde", "serde",
"serde_json", "serde_json",

View File

@@ -34,12 +34,12 @@ deno_ast = { version = "0.39.0", features = ["transpiling"] }
deno_console = "0.155.0" deno_console = "0.155.0"
deno_core = { version = "0.284.0" } deno_core = { version = "0.284.0" }
hex_color = "3.0.0" hex_color = "3.0.0"
http = "0.2.10" http = "1"
log = "0.4.21" log = "0.4.21"
rand = "0.8.5" rand = "0.8.5"
regex = "1.10.2" regex = "1.10.2"
reqwest = { version = "0.11.23", features = ["multipart", "cookies", "gzip", "brotli", "deflate", "json"] } reqwest = { version = "0.12.4", features = ["multipart", "cookies", "gzip", "brotli", "deflate", "json", "native-tls-alpn"] }
reqwest_cookie_store = "0.6.0" reqwest_cookie_store = "0.8.0"
serde = { version = "1.0.198", features = ["derive"] } serde = { version = "1.0.198", features = ["derive"] }
serde_json = { version = "1.0.116", features = ["raw_value"] } serde_json = { version = "1.0.116", features = ["raw_value"] }
serde_yaml = "0.9.34" serde_yaml = "0.9.34"

View File

@@ -185,20 +185,22 @@ impl GrpcHandle {
pub async fn services_from_files( pub async fn services_from_files(
&mut self, &mut self,
id: &str, id: &str,
uri: &Uri, uri: &str,
paths: Vec<PathBuf>, paths: Vec<PathBuf>,
) -> Result<Vec<ServiceDefinition>, String> { ) -> Result<Vec<ServiceDefinition>, String> {
let pool = fill_pool_from_files(&self.app_handle, paths).await?; let pool = fill_pool_from_files(&self.app_handle, paths).await?;
self.pools.insert(self.get_pool_key(id, uri), pool.clone()); let uri = Uri::from_str(uri).map_err(|e| e.to_string())?;
self.pools.insert(self.get_pool_key(id, &uri), pool.clone());
Ok(self.services_from_pool(&pool)) Ok(self.services_from_pool(&pool))
} }
pub async fn services_from_reflection( pub async fn services_from_reflection(
&mut self, &mut self,
id: &str, id: &str,
uri: &Uri, uri: &str,
) -> Result<Vec<ServiceDefinition>, String> { ) -> Result<Vec<ServiceDefinition>, String> {
let pool = fill_pool(uri).await?; let uri = Uri::from_str(uri).map_err(|e| e.to_string())?;
self.pools.insert(self.get_pool_key(id, uri), pool.clone()); let pool = fill_pool(&uri).await?;
self.pools.insert(self.get_pool_key(id, &uri), pool.clone());
Ok(self.services_from_pool(&pool)) Ok(self.services_from_pool(&pool))
} }
@@ -234,9 +236,10 @@ impl GrpcHandle {
pub async fn connect( pub async fn connect(
&mut self, &mut self,
id: &str, id: &str,
uri: Uri, uri: &str,
proto_files: Vec<PathBuf>, proto_files: Vec<PathBuf>,
) -> Result<GrpcConnection, String> { ) -> Result<GrpcConnection, String> {
let uri = Uri::from_str(uri).map_err(|e| e.to_string())?;
let pool = match self.pools.get(id) { let pool = match self.pools.get(id) {
Some(p) => p.clone(), Some(p) => p.clone(),
None => match proto_files.len() { None => match proto_files.len() {

View File

@@ -8,9 +8,10 @@ use std::time::Duration;
use base64::Engine; use base64::Engine;
use http::header::{ACCEPT, USER_AGENT}; use http::header::{ACCEPT, USER_AGENT};
use http::{HeaderMap, HeaderName, HeaderValue, Method}; use http::{HeaderMap, HeaderName, HeaderValue};
use log::{error, info, warn}; use log::{error, info, warn};
use reqwest::redirect::Policy; use reqwest::redirect::Policy;
use reqwest::Method;
use reqwest::{multipart, Url}; use reqwest::{multipart, Url};
use sqlx::types::{Json, JsonValue}; use sqlx::types::{Json, JsonValue};
use tauri::{Manager, WebviewWindow}; use tauri::{Manager, WebviewWindow};
@@ -45,6 +46,7 @@ pub async fn send_http_request(
true => Policy::limited(10), // TODO: Handle redirects natively true => Policy::limited(10), // TODO: Handle redirects natively
false => Policy::none(), false => Policy::none(),
}) })
.connection_verbose(true)
.gzip(true) .gzip(true)
.brotli(true) .brotli(true)
.deflate(true) .deflate(true)
@@ -392,11 +394,11 @@ pub async fn send_http_request(
response.url = v.url().to_string(); response.url = v.url().to_string();
response.remote_addr = v.remote_addr().map(|a| a.to_string()); response.remote_addr = v.remote_addr().map(|a| a.to_string());
response.version = match v.version() { response.version = match v.version() {
http::Version::HTTP_09 => Some("HTTP/0.9".to_string()), reqwest::Version::HTTP_09 => Some("HTTP/0.9".to_string()),
http::Version::HTTP_10 => Some("HTTP/1.0".to_string()), reqwest::Version::HTTP_10 => Some("HTTP/1.0".to_string()),
http::Version::HTTP_11 => Some("HTTP/1.1".to_string()), reqwest::Version::HTTP_11 => Some("HTTP/1.1".to_string()),
http::Version::HTTP_2 => Some("HTTP/2".to_string()), reqwest::Version::HTTP_2 => Some("HTTP/2".to_string()),
http::Version::HTTP_3 => Some("HTTP/3".to_string()), reqwest::Version::HTTP_3 => Some("HTTP/3".to_string()),
_ => None, _ => None,
}; };
@@ -474,7 +476,10 @@ pub async fn send_http_request(
Ok(response) Ok(response)
} }
Err(e) => response_err(response, e.to_string(), window).await, Err(e) => {
warn!("FAILED TO SEND REQUEST {:?}", e);
response_err(response, e.to_string(), window).await
},
} }
} }

View File

@@ -12,8 +12,6 @@ use std::process::exit;
use std::str::FromStr; use std::str::FromStr;
use std::time::Duration; use std::time::Duration;
use ::http::uri::InvalidUri;
use ::http::Uri;
use base64::Engine; use base64::Engine;
use fern::colors::ColoredLevelConfig; use fern::colors::ColoredLevelConfig;
use log::{debug, error, info, warn}; use log::{debug, error, info, warn};
@@ -61,6 +59,8 @@ use crate::updates::{UpdateMode, YaakUpdater};
use crate::window_menu::app_menu; use crate::window_menu::app_menu;
mod analytics; mod analytics;
mod deno;
mod deno_ops;
mod grpc; mod grpc;
mod http_request; mod http_request;
mod models; mod models;
@@ -71,8 +71,6 @@ mod render;
mod tauri_plugin_mac_window; mod tauri_plugin_mac_window;
mod updates; mod updates;
mod window_menu; mod window_menu;
mod deno;
mod deno_ops;
const DEFAULT_WINDOW_WIDTH: f64 = 1100.0; const DEFAULT_WINDOW_WIDTH: f64 = 1100.0;
const DEFAULT_WINDOW_HEIGHT: f64 = 600.0; const DEFAULT_WINDOW_HEIGHT: f64 = 600.0;
@@ -133,14 +131,14 @@ async fn cmd_grpc_reflect(
let req = get_grpc_request(&window, request_id) let req = get_grpc_request(&window, request_id)
.await .await
.map_err(|e| e.to_string())?; .map_err(|e| e.to_string())?;
let uri = safe_uri(&req.url).map_err(|e| e.to_string())?; let uri = safe_uri(req.url.as_str());
if proto_files.len() > 0 { if proto_files.len() > 0 {
grpc_handle grpc_handle
.lock() .lock()
.await .await
.services_from_files( .services_from_files(
&req.id, &req.id,
&uri, uri.as_str(),
proto_files proto_files
.iter() .iter()
.map(|p| PathBuf::from_str(p).unwrap()) .map(|p| PathBuf::from_str(p).unwrap())
@@ -151,7 +149,7 @@ async fn cmd_grpc_reflect(
grpc_handle grpc_handle
.lock() .lock()
.await .await
.services_from_reflection(&req.id, &uri) .services_from_reflection(&req.id, uri.as_str())
.await .await
} }
} }
@@ -250,7 +248,7 @@ async fn cmd_grpc_go(
let maybe_in_msg_tx = std::sync::Mutex::new(Some(in_msg_tx.clone())); let maybe_in_msg_tx = std::sync::Mutex::new(Some(in_msg_tx.clone()));
let (cancelled_tx, mut cancelled_rx) = tokio::sync::watch::channel(false); let (cancelled_tx, mut cancelled_rx) = tokio::sync::watch::channel(false);
let uri = safe_uri(&req.url).map_err(|e| e.to_string())?; let uri = safe_uri(&req.url);
let in_msg_stream = tokio_stream::wrappers::ReceiverStream::new(in_msg_rx); let in_msg_stream = tokio_stream::wrappers::ReceiverStream::new(in_msg_rx);
@@ -268,7 +266,7 @@ async fn cmd_grpc_go(
.await .await
.connect( .connect(
&req.clone().id, &req.clone().id,
uri, uri.as_str(),
proto_files proto_files
.iter() .iter()
.map(|p| PathBuf::from_str(p).unwrap()) .map(|p| PathBuf::from_str(p).unwrap())
@@ -814,7 +812,10 @@ async fn cmd_import_data(
let x = upsert_workspace(&w, v).await.map_err(|e| e.to_string())?; let x = upsert_workspace(&w, v).await.map_err(|e| e.to_string())?;
imported_resources.workspaces.push(x.clone()); imported_resources.workspaces.push(x.clone());
} }
info!("Imported {} workspaces", imported_resources.workspaces.len()); info!(
"Imported {} workspaces",
imported_resources.workspaces.len()
);
for mut v in r.resources.environments { for mut v in r.resources.environments {
v.id = maybe_gen_id(v.id.as_str(), ModelType::TypeEnvironment, &mut id_map); v.id = maybe_gen_id(v.id.as_str(), ModelType::TypeEnvironment, &mut id_map);
@@ -826,7 +827,10 @@ async fn cmd_import_data(
let x = upsert_environment(&w, v).await.map_err(|e| e.to_string())?; let x = upsert_environment(&w, v).await.map_err(|e| e.to_string())?;
imported_resources.environments.push(x.clone()); imported_resources.environments.push(x.clone());
} }
info!("Imported {} environments", imported_resources.environments.len()); info!(
"Imported {} environments",
imported_resources.environments.len()
);
for mut v in r.resources.folders { for mut v in r.resources.folders {
v.id = maybe_gen_id(v.id.as_str(), ModelType::TypeFolder, &mut id_map); v.id = maybe_gen_id(v.id.as_str(), ModelType::TypeFolder, &mut id_map);
@@ -854,7 +858,10 @@ async fn cmd_import_data(
.map_err(|e| e.to_string())?; .map_err(|e| e.to_string())?;
imported_resources.http_requests.push(x.clone()); imported_resources.http_requests.push(x.clone());
} }
info!("Imported {} http_requests", imported_resources.http_requests.len()); info!(
"Imported {} http_requests",
imported_resources.http_requests.len()
);
for mut v in r.resources.grpc_requests { for mut v in r.resources.grpc_requests {
v.id = maybe_gen_id(v.id.as_str(), ModelType::TypeGrpcRequest, &mut id_map); v.id = maybe_gen_id(v.id.as_str(), ModelType::TypeGrpcRequest, &mut id_map);
@@ -869,7 +876,10 @@ async fn cmd_import_data(
.map_err(|e| e.to_string())?; .map_err(|e| e.to_string())?;
imported_resources.grpc_requests.push(x.clone()); imported_resources.grpc_requests.push(x.clone());
} }
info!("Imported {} grpc_requests", imported_resources.grpc_requests.len()); info!(
"Imported {} grpc_requests",
imported_resources.grpc_requests.len()
);
Ok(imported_resources) Ok(imported_resources)
} }
@@ -897,10 +907,7 @@ async fn cmd_request_to_curl(
} }
#[tauri::command] #[tauri::command]
async fn cmd_curl_to_request( async fn cmd_curl_to_request(command: &str, workspace_id: &str) -> Result<HttpRequest, String> {
command: &str,
workspace_id: &str,
) -> Result<HttpRequest, String> {
let v = run_plugin_import("importer-curl", command) let v = run_plugin_import("importer-curl", command)
.await .await
.map_err(|e| e.to_string()); .map_err(|e| e.to_string());
@@ -1031,6 +1038,7 @@ async fn response_err(
error: String, error: String,
w: &WebviewWindow, w: &WebviewWindow,
) -> Result<HttpResponse, String> { ) -> Result<HttpResponse, String> {
warn!("Failed to send request: {}", error);
let mut response = response.clone(); let mut response = response.clone();
response.elapsed = -1; response.elapsed = -1;
response.error = Some(error.clone()); response.error = Some(error.clone());
@@ -1895,11 +1903,10 @@ async fn get_update_mode(h: &AppHandle) -> UpdateMode {
UpdateMode::new(settings.update_channel.as_str()) UpdateMode::new(settings.update_channel.as_str())
} }
fn safe_uri(endpoint: &str) -> Result<Uri, InvalidUri> { fn safe_uri(endpoint: &str) -> String {
let uri = if endpoint.starts_with("http://") || endpoint.starts_with("https://") { if endpoint.starts_with("http://") || endpoint.starts_with("https://") {
Uri::from_str(endpoint)? endpoint.into()
} else { } else {
Uri::from_str(&format!("http://{}", endpoint))? format!("http://{}", endpoint)
}; }
Ok(uri)
} }

View File

@@ -1,7 +1,7 @@
use std::time::SystemTime; use std::time::SystemTime;
use chrono::{Duration, NaiveDateTime, Utc}; use chrono::{Duration, NaiveDateTime, Utc};
use http::Method; use reqwest::Method;
use log::debug; use log::debug;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use tauri::{AppHandle, Manager}; use tauri::{AppHandle, Manager};