public static HostCookies FilterHostCookies(HostCookies[] hostCookies, string url) { HostCookies results = new HostCookies(); if (hostCookies == null) { return(results); } if (url == "" || url == null || url == string.Empty) { return(results); } List <String> hostPermutations = new List <String>(); // First retrieve the domain from the url string domain = url; // determine if url or raw domain name if (domain.IndexOf('/') != -1) { domain = domain.Split('/')[2]; } results.HostName = domain; string[] domainParts = domain.Split('.'); for (int i = 0; i < domainParts.Length; i++) { if ((domainParts.Length - i) < 2) { // We've reached the TLD. Break! break; } string[] subDomainParts = new string[domainParts.Length - i]; Array.Copy(domainParts, i, subDomainParts, 0, subDomainParts.Length); string subDomain = String.Join(".", subDomainParts); hostPermutations.Add(subDomain); hostPermutations.Add("." + subDomain); } List <Cookie> cookies = new List <Cookie>(); foreach (string sub in hostPermutations) { // For each permutation foreach (HostCookies hostInstance in hostCookies) { // Determine if the hostname matches the subdomain perm if (hostInstance.HostName.ToLower() == sub.ToLower()) { // If it does, cycle through foreach (Cookie cookieInstance in hostInstance.Cookies) { // No dupes if (!cookies.Contains(cookieInstance)) { cookies.Add(cookieInstance); } } } } } results.Cookies = cookies.ToArray(); return(results); }
private HostCookies[] ExtractCookiesFromSQLQuery(DataTable query) { List <Cookie> cookies = new List <Cookie>(); List <HostCookies> hostCookies = new List <HostCookies>(); HostCookies hostInstance = null; string lastHostKey = ""; foreach (DataRow row in query.Rows) { try { if (row == null) { continue; } if (row["host_key"].GetType() != typeof(System.DBNull) && lastHostKey != (string)row["host_key"]) { lastHostKey = (string)row["host_key"]; if (hostInstance != null) { hostInstance.Cookies = cookies.ToArray(); hostCookies.Add(hostInstance); } hostInstance = new HostCookies(); hostInstance.HostName = lastHostKey; cookies = new List <Cookie>(); } Cookie cookie = new Cookie(); cookie.Domain = row["host_key"].ToString(); long expDate; Int64.TryParse(row["expires_utc"].ToString(), out expDate); // https://github.com/djhohnstein/SharpChrome/issues/1 if ((expDate / 1000000.000000000000) - 11644473600 > 0) { cookie.ExpirationDate = (expDate / 1000000.000000000000000) - 11644473600; } cookie.HostOnly = cookie.Domain[0] == '.' ? false : true; // I'm not sure this is stored in the cookie store and seems to be always false if (row["is_httponly"].ToString() == "1") { cookie.HttpOnly = true; } else { cookie.HttpOnly = false; } cookie.Name = row["name"].ToString(); cookie.Path = row["path"].ToString(); // cookie.SameSite = "no_restriction"; // Not sure if this is the same as firstpartyonly if (row["is_secure"].ToString() == "1") { cookie.Secure = true; } else { cookie.Secure = false; } cookie.Session = row["is_persistent"].ToString() == "0" ? true : false; // Unsure, this seems to be false always //cookie.StoreId = "0"; // Static cookie.StoreId = null; cookie.SetSameSiteCookie(row["sameSite"].ToString()); byte[] cookieValue = Convert.FromBase64String(row["encrypted_value"].ToString()); cookieValue = DecryptBlob(cookieValue); if (cookieValue != null) { cookie.Value = System.Text.Encoding.UTF8.GetString(cookieValue); } else { cookie.Value = ""; } if (cookie != null) { cookies.Add(cookie); } } catch { } } return(hostCookies.ToArray()); }