Add cookie editing and inherited request settings (#463)

This commit is contained in:
Gregory Schier
2026-05-18 08:59:49 -07:00
committed by GitHub
parent dcfdf077e7
commit fa40ceaa31
54 changed files with 5203 additions and 1101 deletions
+31 -6
View File
@@ -134,7 +134,8 @@ pub async fn cmd_ws_connect<R: Runtime>(
unrendered_request.folder_id.as_deref(),
environment_id,
)?;
let workspace = app_handle.db().get_workspace(&unrendered_request.workspace_id)?;
let resolved_settings =
app_handle.db().resolve_settings_for_websocket_request(&unrendered_request)?;
let settings = app_handle.db().get_settings();
let (resolved_request, auth_context_id) =
resolve_websocket_request(&window, &unrendered_request)?;
@@ -247,11 +248,18 @@ pub async fn cmd_ws_connect<R: Runtime>(
}
}
// Add cookies to WS HTTP Upgrade
if let Some(id) = cookie_jar_id {
let cookie_jar = app_handle.db().get_cookie_jar(&id)?;
let store = CookieStore::from_cookies(cookie_jar.cookies);
let mut cookie_jar = match (
resolved_settings.send_cookies.value || resolved_settings.store_cookies.value,
cookie_jar_id,
) {
(true, Some(id)) => Some(app_handle.db().get_cookie_jar(id)?),
_ => None,
};
let cookie_store =
cookie_jar.as_ref().map(|jar| CookieStore::from_cookies(jar.cookies.clone()));
// Add cookies to WS HTTP Upgrade
if let (true, Some(store)) = (resolved_settings.send_cookies.value, cookie_store.as_ref()) {
// Convert WS URL -> HTTP URL because our cookie store matches based on
// Path/HttpOnly/Secure attributes even though WS upgrades are HTTP requests
let http_url = convert_ws_url_to_http(&url);
@@ -289,7 +297,7 @@ pub async fn cmd_ws_connect<R: Runtime>(
url.as_str(),
headers,
receive_tx,
workspace.setting_validate_certificates,
resolved_settings.validate_certificates.value,
client_cert,
)
.await
@@ -328,6 +336,23 @@ pub async fn cmd_ws_connect<R: Runtime>(
})
.collect::<Vec<HttpResponseHeader>>();
if let (true, Some(cookie_jar), Some(store)) =
(resolved_settings.store_cookies.value, cookie_jar.as_mut(), cookie_store.as_ref())
{
let set_cookie_headers = response
.headers()
.into_iter()
.filter(|(name, _)| name.as_str().eq_ignore_ascii_case("set-cookie"))
.filter_map(|(_, value)| value.to_str().ok().map(ToString::to_string))
.collect::<Vec<_>>();
if !set_cookie_headers.is_empty() {
store.store_cookies_from_response(&convert_ws_url_to_http(&url), &set_cookie_headers);
cookie_jar.cookies = store.get_all_cookies();
app_handle.db().upsert_cookie_jar(cookie_jar, &UpdateSource::Background)?;
}
}
let connection = app_handle.db().upsert_websocket_connection(
&WebsocketConnection {
state: WebsocketConnectionState::Connected,