mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-07-11 07:12:55 +02:00
Add cookie editing and inherited request settings (#463)
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user