Fix cookies not being persisted after HTTP requests (#328)

This commit is contained in:
Gregory Schier
2025-12-22 10:58:03 -08:00
committed by GitHub
parent 089c7e8dce
commit 5f8902e57b

View File

@@ -2,7 +2,7 @@ use crate::error::Error::GenericError;
use crate::error::Result;
use crate::render::render_http_request;
use crate::response_err;
use log::debug;
use log::{debug, warn};
use reqwest_cookie_store::{CookieStore, CookieStoreMutex};
use std::sync::Arc;
use std::time::{Duration, Instant};
@@ -19,8 +19,8 @@ use yaak_http::sender::ReqwestSender;
use yaak_http::transaction::HttpTransaction;
use yaak_http::types::{SendableHttpRequest, SendableHttpRequestOptions, append_query_params};
use yaak_models::models::{
CookieJar, Environment, HttpRequest, HttpResponse, HttpResponseEvent, HttpResponseHeader,
HttpResponseState, ProxySetting, ProxySettingAuth,
Cookie, CookieJar, Environment, HttpRequest, HttpResponse, HttpResponseEvent,
HttpResponseHeader, HttpResponseState, ProxySetting, ProxySettingAuth,
};
use yaak_models::query_manager::QueryManagerExt;
use yaak_models::util::UpdateSource;
@@ -207,6 +207,29 @@ async fn send_http_request_inner<R: Runtime>(
)
.await;
// Persist cookies back to the database after the request completes
if let Some((cookie_store, mut cj)) = maybe_cookie_manager {
match cookie_store.lock() {
Ok(store) => {
let cookies: Vec<Cookie> = store
.iter_any()
.filter_map(|c| {
// Convert cookie_store::Cookie -> yaak_models::Cookie via serde
let json_cookie = serde_json::to_value(c).ok()?;
serde_json::from_value(json_cookie).ok()
})
.collect();
cj.cookies = cookies;
if let Err(e) = window.db().upsert_cookie_jar(&cj, &update_source) {
warn!("Failed to persist cookies to database: {}", e);
}
}
Err(e) => {
warn!("Failed to lock cookie store: {}", e);
}
}
}
match final_resp {
Ok(r) => Ok(r),
Err(e) => match app_handle.db().get_http_response(&resp_id) {