public void SetCookieHeaderValue_TryParse_AcceptsValidValues(SetCookieHeaderValue cookie, string expectedValue) { Assert.True(SetCookieHeaderValue.TryParse(expectedValue, out var header)); Assert.Equal(cookie, header); Assert.Equal(expectedValue, header !.ToString()); }
public void SetCookieHeaderValue_TryParse_ExtensionOrderDoesntMatter() { string cookieHeaderValue1 = "cookiename=value; extensionname1=value; extensionname2=value;"; string cookieHeaderValue2 = "cookiename=value; extensionname2=value; extensionname1=value;"; SetCookieHeaderValue.TryParse(cookieHeaderValue1, out var setCookieHeaderValue1); SetCookieHeaderValue.TryParse(cookieHeaderValue2, out var setCookieHeaderValue2); Assert.Equal(setCookieHeaderValue1, setCookieHeaderValue2); }
protected static string GetSetCookiesValue(ProxyContext context, string value) { if (!SetCookieHeaderValue.TryParse(value, out var cookie) || !cookie.Name.HasValue) { return(value); } var cookieSettings = context.ProxyDownstreamResponseHeaderSettings.Cookies; if (!cookieSettings.TryGetValue(cookie.Name.Value, out var cookieSetting) && !cookieSettings.TryGetValue(WildcardCookieName, out cookieSetting)) { return(value); } if (cookieSetting.SameSite != Microsoft.Net.Http.Headers.SameSiteMode.Unspecified) { cookie.SameSite = cookieSetting.SameSite; } if (cookieSetting.Secure.HasValue) { cookie.Secure = cookieSetting.Secure.Value; } if (cookieSetting.HttpOnly.HasValue) { cookie.HttpOnly = cookieSetting.HttpOnly.Value; } var domain = cookieSetting.EvaluateDomain(context); if (domain is not null) { cookie.Domain = domain.Length == 0 ? null : domain; } return(cookie.ToString()); }
/// <param name="input">input to be parsed</param> /// <param name="defaultDomain">default domain for the cookie (used if not specified)</param> /// <param name="utcNow">current date and time in UTC</param> /// <param name="defaultPath">default path for the cookie (used if not specified)</param> /// <returns>a CookieCollection representing the cookie specification in the input</returns> public static CookieCollection ParseCookies(string input, string defaultDomain, DateTime utcNow, string defaultPath = "/") { var collection = new CookieCollection(); var lines = input.SplitLines(); foreach (var line in lines) { #if NET48 var cookieText = UpdateExpiresFromMaxAge(line, utcNow); if (HttpCookie.TryParse(cookieText, out var httpCookie)) { var cookie = new Cookie { Name = httpCookie.Name, Value = httpCookie.Value, Domain = httpCookie.Domain ?? defaultDomain, Expires = httpCookie.Expires, Path = httpCookie.Path, HttpOnly = httpCookie.HttpOnly, Secure = httpCookie.Secure }; /*if (string.IsNullOrEmpty(cookie.Domain)) * { * throw new ArgumentException($"Set CookieDomain or specify domain in the cookie specification for '{line}'"); * } */ collection.Add(cookie); } else { throw new ArgumentException($"Could not parse '{line}' as a cookie"); } #else var cookieText = RemoveInvalidCookieOptions(line); cookieText = UpdateExpiresFromMaxAge(cookieText, utcNow); if (SetCookieHeaderValue.TryParse(cookieText, out var httpCookie)) { var cookie = new Cookie { Name = httpCookie.Name.Value, Value = httpCookie.Value.Value, Domain = httpCookie.Domain.Value ?? defaultDomain, Path = httpCookie.Path.Value ?? defaultPath, HttpOnly = httpCookie.HttpOnly, Secure = httpCookie.Secure }; if (httpCookie.Expires != null) { cookie.Expires = httpCookie.Expires.Value.UtcDateTime; } /* if (string.IsNullOrEmpty(cookie.Domain)) * throw new ArgumentException( * $"Set CookieDomain or specify domain in the cookie specification for '{line}'"); */ collection.Add(cookie); } else { throw new ArgumentException($"Could not parse '{line}' as a cookie"); } #endif } return(collection); }
public void SetCookieHeaderValue_TryParse_RejectsInvalidValues(string value) { Assert.False(SetCookieHeaderValue.TryParse(value, out var _)); }