From 6d8eebcd3055eaeb68b7921d82b62bb781b403e6 Mon Sep 17 00:00:00 2001 From: Taloth Saldono Date: Tue, 27 Mar 2018 15:11:34 +0200 Subject: [PATCH] Revised deletion of cookies. --- .../Http/HttpClientFixture.cs | 22 +++++++++++++++++++ src/NzbDrone.Common/Http/HttpClient.cs | 21 +++++++++++++----- 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/src/NzbDrone.Common.Test/Http/HttpClientFixture.cs b/src/NzbDrone.Common.Test/Http/HttpClientFixture.cs index 01b43f1ed..49cdcc6e5 100644 --- a/src/NzbDrone.Common.Test/Http/HttpClientFixture.cs +++ b/src/NzbDrone.Common.Test/Http/HttpClientFixture.cs @@ -338,6 +338,28 @@ namespace NzbDrone.Common.Test.Http responseCookies.Resource.Cookies.Should().BeEmpty(); } + [Test] + public void should_clear_request_cookie() + { + var requestSet = new HttpRequest($"http://{_httpBinHost}/cookies"); + requestSet.Cookies.Add("my", "cookie"); + requestSet.AllowAutoRedirect = false; + requestSet.StoreRequestCookie = true; + requestSet.StoreResponseCookie = false; + + var responseSet = Subject.Get(requestSet); + + var requestClear = new HttpRequest($"http://{_httpBinHost}/cookies"); + requestClear.Cookies.Add("my", null); + requestClear.AllowAutoRedirect = false; + requestClear.StoreRequestCookie = true; + requestClear.StoreResponseCookie = false; + + var responseClear = Subject.Get(requestClear); + + responseClear.Resource.Cookies.Should().BeEmpty(); + } + [Test] public void should_not_store_response_cookie() { diff --git a/src/NzbDrone.Common/Http/HttpClient.cs b/src/NzbDrone.Common/Http/HttpClient.cs index 419207031..45ff53ae3 100644 --- a/src/NzbDrone.Common/Http/HttpClient.cs +++ b/src/NzbDrone.Common/Http/HttpClient.cs @@ -153,12 +153,23 @@ namespace NzbDrone.Common.Http { foreach (var pair in request.Cookies) { - var cookie = new Cookie(pair.Key, pair.Value, "/") + Cookie cookie; + if (pair.Value == null) { - // Use Now rather than UtcNow to work around Mono cookie expiry bug. - // See https://gist.github.com/ta264/7822b1424f72e5b4c961 - Expires = DateTime.Now.AddHours(1) - }; + cookie = new Cookie(pair.Key, "", "/") + { + Expires = DateTime.Now.AddDays(-1) + }; + } + else + { + cookie = new Cookie(pair.Key, pair.Value, "/") + { + // Use Now rather than UtcNow to work around Mono cookie expiry bug. + // See https://gist.github.com/ta264/7822b1424f72e5b4c961 + Expires = DateTime.Now.AddHours(1) + }; + } sourceContainer.Add((Uri)request.Url, cookie);