diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 8e9f891..45f1464 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -558,13 +558,23 @@ dependencies = [ "version_check", ] +[[package]] +name = "cookie" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cd91cf61412820176e137621345ee43b3f4423e589e7ae4e50d601d93e35ef8" +dependencies = [ + "time", + "version_check", +] + [[package]] name = "cookie_store" version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "387461abbc748185c3a6e1673d826918b450b87ff22639429c694619a83b6cf6" dependencies = [ - "cookie", + "cookie 0.17.0", "idna 0.3.0", "log", "publicsuffix", @@ -740,6 +750,7 @@ dependencies = [ "base64 0.21.4", "brotli-decompressor", "chrono", + "cookie 0.18.0", "cookie_store", "hyper", "hyper-rustls", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 23ab50f..88bcacd 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -17,6 +17,7 @@ tauri-build = { version = "1.5.0", features = [] } base64 = "0.21.4" brotli-decompressor = "2.5.0" chrono = "0.4.31" +cookie = "0.18.0" cookie_store = "0.20.0" hyper = { version = "0.14.27", features = ["client", "http1"] } hyper-rustls = "0.24.1" diff --git a/src-tauri/src/cookies.rs b/src-tauri/src/cookies.rs index 1485e40..6158398 100644 --- a/src-tauri/src/cookies.rs +++ b/src-tauri/src/cookies.rs @@ -101,8 +101,24 @@ pub fn clear_cookie_from_store() -> Result<(), CyberAPIError> { pub fn save_cookie_store(set_cookies: Vec, current_url: &Url) -> Result<(), CyberAPIError> { let mut store = get_cookie_store(); + let now = chrono::Local::now().timestamp(); for ele in set_cookies { - store.parse(ele.as_str(), current_url)?; + let c = cookie::Cookie::parse(&ele)?; + let mut expired = false; + if let Some(expires) = c.expires() { + if let Some(expired_time) = expires.datetime() { + expired = expired_time.unix_timestamp() < now; + } + } + if expired { + store.remove( + c.domain().unwrap_or_default(), + c.path().unwrap_or_default(), + c.name(), + ); + } else { + store.parse(ele.as_str(), current_url)?; + } } save_store(store)?; diff --git a/src-tauri/src/error.rs b/src-tauri/src/error.rs index 5c18409..8a3faa0 100644 --- a/src-tauri/src/error.rs +++ b/src-tauri/src/error.rs @@ -127,3 +127,11 @@ impl From for CyberAPIError { } } } +impl From for CyberAPIError { + fn from(error: cookie::ParseError) -> Self { + CyberAPIError { + message: error.to_string(), + category: "cookie".to_string(), + } + } +}