[common] add 'subdomains' argument to 'cookies_check()' (#7188)
This commit is contained in:
@@ -539,7 +539,7 @@ class Extractor():
|
|||||||
for name, value in cookiedict.items():
|
for name, value in cookiedict.items():
|
||||||
set_cookie(name, value, domain=domain)
|
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"""
|
"""Check if all 'cookies_names' are in the session's cookiejar"""
|
||||||
if not self.cookies:
|
if not self.cookies:
|
||||||
return False
|
return False
|
||||||
@@ -550,26 +550,31 @@ class Extractor():
|
|||||||
now = time.time()
|
now = time.time()
|
||||||
|
|
||||||
for cookie in self.cookies:
|
for cookie in self.cookies:
|
||||||
if cookie.name in names and (
|
if cookie.name not in names:
|
||||||
not domain or cookie.domain == domain):
|
continue
|
||||||
|
|
||||||
if cookie.expires:
|
if not domain or cookie.domain == domain:
|
||||||
diff = int(cookie.expires - now)
|
pass
|
||||||
|
elif not subdomains or not cookie.domain.endswith(domain):
|
||||||
|
continue
|
||||||
|
|
||||||
if diff <= 0:
|
if cookie.expires:
|
||||||
self.log.warning(
|
diff = int(cookie.expires - now)
|
||||||
"Cookie '%s' has expired", cookie.name)
|
|
||||||
continue
|
|
||||||
|
|
||||||
elif diff <= 86400:
|
if diff <= 0:
|
||||||
hours = diff // 3600
|
self.log.warning(
|
||||||
self.log.warning(
|
"Cookie '%s' has expired", cookie.name)
|
||||||
"Cookie '%s' will expire in less than %s hour%s",
|
continue
|
||||||
cookie.name, hours + 1, "s" if hours else "")
|
|
||||||
|
|
||||||
names.discard(cookie.name)
|
elif diff <= 86400:
|
||||||
if not names:
|
hours = diff // 3600
|
||||||
return True
|
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
|
return False
|
||||||
|
|
||||||
def _extract_jsonld(self, page):
|
def _extract_jsonld(self, page):
|
||||||
|
|||||||
@@ -153,19 +153,49 @@ class TestCookieUtils(unittest.TestCase):
|
|||||||
self.assertFalse(extr.cookies_check(("a",)))
|
self.assertFalse(extr.cookies_check(("a",)))
|
||||||
self.assertFalse(extr.cookies_check(("a", "b")))
|
self.assertFalse(extr.cookies_check(("a", "b")))
|
||||||
|
|
||||||
extr.cookies.set("a", "1")
|
extr.cookies.set("nd_a", "1")
|
||||||
self.assertFalse(extr.cookies_check(("a",)))
|
self.assertFalse(extr.cookies_check(("nd_a",)))
|
||||||
|
|
||||||
extr.cookies.set("a", "1", domain=extr.cookies_domain)
|
extr.cookies.set("cd_a", "1", domain=extr.cookies_domain)
|
||||||
self.assertTrue(extr.cookies_check(("a",)))
|
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.assertEqual(len(extr.cookies), 3)
|
||||||
self.assertTrue(extr.cookies_check(("a",)))
|
|
||||||
|
|
||||||
extr.cookies.set("b", "2", domain=extr.cookies_domain)
|
extr.cookies.set("cd_b", "2", domain=extr.cookies_domain)
|
||||||
extr.cookies.set("c", "3", domain=extr.cookies_domain)
|
extr.cookies.set("cd_c", "3", domain=extr.cookies_domain)
|
||||||
self.assertTrue(extr.cookies_check(("a", "b", "c")))
|
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):
|
def test_check_cookies_expires(self):
|
||||||
extr = _get_extractor("test")
|
extr = _get_extractor("test")
|
||||||
|
|||||||
Reference in New Issue
Block a user