feat: cookie jar persistence + --storage-dir flag + fix HTTP cookie header filtering (#114)

* feat: cookie jar persistence + storage-dir + filtering fix (clean v4)

* fix: resolve build errors, add storage_dir param throughout server chain

* fix: storage_dir end-to-end, plus two test-literal field additions

  Five issues found while testing PR 114 end-to-end.

  Build fixes (two test literals out of sync with new struct fields):
  - crates/obscura-net/src/cookies.rs: CookieInfo literal in
    test_domain_matches_subdomain_without_leading_dot was missing the
    same_site and expires fields added in #170.
  - crates/obscura-cli/src/main.rs: Command::Fetch literal in
    matcher_still_uses_fetch_variant was missing the new storage_dir
    field. Without these cargo test --workspace would not compile.

  run_fetch was branching between BrowserContext::with_storage (which
  hardcodes proxy=None, stealth=false, user_agent=None) and
  with_options (which has no storage_dir slot), so --storage-dir +
  --proxy + --stealth silently dropped the proxy and stealth flags.
  Same bug SGavrl flagged on dispatch.rs in the previous round, just on
  the other code path. Switched to with_storage_full which carries all
  four. Verified the fetch now errors out against an invalid proxy.

  run_fetch --eval short-circuited the function before
  context.save_cookies() ran, so cookies set during an eval session
  were never persisted to {storage_dir}/cookies.json. Moved the save
  above the return.

  obscura serve loaded cookies on startup but never saved them
  anywhere, so a session that set cookies via Network.setCookie or
  navigation dropped them on shutdown. Subscribed to Ctrl-C once in
  put a single save_cookies() after the loop so both the Ctrl-C path
  and the channel-closed path persist cookies. Verified end-to-end.

---------

Co-authored-by: zhangyang-crazy-one <[email protected]>
Co-authored-by: SGavrl <[email protected]>
This commit is contained in:
authored and GitHub committed 2026-05-26 11:09:10 +02:00
1 parent d15cac6149
commit 906dcfcde1
8 files changed
+343 -39

No files matched your search

+26 -2
View File
@@ -346,9 +346,33 @@ impl ObscuraHttpClient {
);
let cookie_header = self.cookie_jar.get_cookie_header(&current_url);
tracing::debug!(
"Cookie header for {}: {} cookies ({} bytes)",
current_url.host_str().unwrap_or("?"),
cookie_header.split("; ").filter(|s| !s.is_empty()).count(),
cookie_header.len(),
);
if !cookie_header.is_empty() {
if let Ok(val) = HeaderValue::from_str(&cookie_header) {
headers.insert(reqwest::header::COOKIE, val);
match HeaderValue::from_str(&cookie_header) {
Ok(val) => {
headers.insert(reqwest::header::COOKIE, val);
}
Err(_) => {
let filtered: String = cookie_header
.split("; ")
.filter(|pair| HeaderValue::from_str(pair).is_ok())
.collect::<Vec<_>>()
.join("; ");
if !filtered.is_empty() {
if let Ok(val) = HeaderValue::from_str(&filtered) {
headers.insert(reqwest::header::COOKIE, val);
}
}
tracing::debug!(
"Cookie header invalid chars, filtered {} -> {} bytes",
cookie_header.len(), filtered.len(),
);
}
}
}