diff --git a/gallery_dl/extractor/common.py b/gallery_dl/extractor/common.py index a85eedd0..995505f1 100644 --- a/gallery_dl/extractor/common.py +++ b/gallery_dl/extractor/common.py @@ -539,7 +539,7 @@ class Extractor(): for name, value in cookiedict.items(): set_cookie(name, value, domain=domain) - def cookies_check(self, cookies_names, domain=None): + def cookies_check(self, cookies_names, domain=None, subdomains=False): """Check if all 'cookies_names' are in the session's cookiejar""" if not self.cookies: return False @@ -550,26 +550,31 @@ class Extractor(): now = time.time() for cookie in self.cookies: - if cookie.name in names and ( - not domain or cookie.domain == domain): + if cookie.name not in names: + continue - if cookie.expires: - diff = int(cookie.expires - now) + if not domain or cookie.domain == domain: + pass + elif not subdomains or not cookie.domain.endswith(domain): + continue - if diff <= 0: - self.log.warning( - "Cookie '%s' has expired", cookie.name) - continue + if cookie.expires: + diff = int(cookie.expires - now) - elif diff <= 86400: - hours = diff // 3600 - self.log.warning( - "Cookie '%s' will expire in less than %s hour%s", - cookie.name, hours + 1, "s" if hours else "") + if diff <= 0: + self.log.warning( + "Cookie '%s' has expired", cookie.name) + continue - names.discard(cookie.name) - if not names: - return True + elif diff <= 86400: + hours = diff // 3600 + self.log.warning( + "Cookie '%s' will expire in less than %s hour%s", + cookie.name, hours + 1, "s" if hours else "") + + names.discard(cookie.name) + if not names: + return True return False def _extract_jsonld(self, page): diff --git a/test/test_cookies.py b/test/test_cookies.py index 60c83ffb..9ba562cc 100644 --- a/test/test_cookies.py +++ b/test/test_cookies.py @@ -153,19 +153,49 @@ class TestCookieUtils(unittest.TestCase): self.assertFalse(extr.cookies_check(("a",))) self.assertFalse(extr.cookies_check(("a", "b"))) - extr.cookies.set("a", "1") - self.assertFalse(extr.cookies_check(("a",))) + extr.cookies.set("nd_a", "1") + self.assertFalse(extr.cookies_check(("nd_a",))) - extr.cookies.set("a", "1", domain=extr.cookies_domain) - self.assertTrue(extr.cookies_check(("a",))) + extr.cookies.set("cd_a", "1", domain=extr.cookies_domain) + self.assertTrue(extr.cookies_check(("cd_a",))) - extr.cookies.set("a", "1", domain="www" + extr.cookies_domain) + extr.cookies.set("wd_a", "1", domain="www" + extr.cookies_domain) + self.assertFalse(extr.cookies_check(("wd_a",))) self.assertEqual(len(extr.cookies), 3) - self.assertTrue(extr.cookies_check(("a",))) - extr.cookies.set("b", "2", domain=extr.cookies_domain) - extr.cookies.set("c", "3", domain=extr.cookies_domain) - self.assertTrue(extr.cookies_check(("a", "b", "c"))) + extr.cookies.set("cd_b", "2", domain=extr.cookies_domain) + extr.cookies.set("cd_c", "3", domain=extr.cookies_domain) + self.assertFalse(extr.cookies_check(("nd_a", "cd_b", "cd_c"))) + self.assertTrue(extr.cookies_check(("cd_a", "cd_b", "cd_c"))) + self.assertFalse(extr.cookies_check(("wd_a", "cd_b", "cd_c"))) + self.assertEqual(len(extr.cookies), 5) + + def test_check_cookies_domain_sub(self): + extr = _get_extractor("test") + self.assertFalse(extr.cookies, "empty") + extr.cookies_domain = ".example.org" + + self.assertFalse(extr.cookies_check(("a",), subdomains=True)) + self.assertFalse(extr.cookies_check(("a", "b"), subdomains=True)) + + extr.cookies.set("nd_a", "1") + self.assertFalse(extr.cookies_check(("nd_a",), subdomains=True)) + + extr.cookies.set("cd_a", "1", domain=extr.cookies_domain) + self.assertTrue(extr.cookies_check(("cd_a",), subdomains=True)) + + extr.cookies.set("wd_a", "1", domain="www" + extr.cookies_domain) + self.assertTrue(extr.cookies_check(("wd_a",), subdomains=True)) + + extr.cookies.set("cd_b", "2", domain=extr.cookies_domain) + extr.cookies.set("cd_c", "3", domain=extr.cookies_domain) + self.assertEqual(len(extr.cookies), 5) + self.assertFalse(extr.cookies_check( + ("nd_a", "cd_b", "cd_c"), subdomains=True)) + self.assertTrue(extr.cookies_check( + ("cd_a", "cd_b", "cd_c"), subdomains=True)) + self.assertTrue(extr.cookies_check( + ("wd_a", "cd_b", "cd_c"), subdomains=True)) def test_check_cookies_expires(self): extr = _get_extractor("test")