Ejemplo n.º 1
0
    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());
    }
Ejemplo n.º 2
0
    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);
    }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 5
0
 public void SetCookieHeaderValue_TryParse_RejectsInvalidValues(string value)
 {
     Assert.False(SetCookieHeaderValue.TryParse(value, out var _));
 }