[utils] strip #HttpOnly_ prefix from cookies files (#20219)
This commit is contained in:
		@@ -29,6 +29,16 @@ class TestYoutubeDLCookieJar(unittest.TestCase):
 | 
				
			|||||||
            tf.close()
 | 
					            tf.close()
 | 
				
			||||||
            os.remove(tf.name)
 | 
					            os.remove(tf.name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_strip_httponly_prefix(self):
 | 
				
			||||||
 | 
					        cookiejar = YoutubeDLCookieJar('./test/testdata/cookies/httponly_cookies.txt')
 | 
				
			||||||
 | 
					        cookiejar.load(ignore_discard=True, ignore_expires=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        def assert_cookie_has_value(key):
 | 
				
			||||||
 | 
					            self.assertEqual(cookiejar._cookies['www.foobar.foobar']['/'][key].value, key + '_VALUE')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assert_cookie_has_value('HTTPONLY_COOKIE')
 | 
				
			||||||
 | 
					        assert_cookie_has_value('JS_ACCESSIBLE_COOKIE')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if __name__ == '__main__':
 | 
					if __name__ == '__main__':
 | 
				
			||||||
    unittest.main()
 | 
					    unittest.main()
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								test/testdata/cookies/httponly_cookies.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								test/testdata/cookies/httponly_cookies.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					# Netscape HTTP Cookie File
 | 
				
			||||||
 | 
					# http://curl.haxx.se/rfc/cookie_spec.html
 | 
				
			||||||
 | 
					# This is a generated file!  Do not edit.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#HttpOnly_www.foobar.foobar	FALSE	/	TRUE	2147483647	HTTPONLY_COOKIE	HTTPONLY_COOKIE_VALUE
 | 
				
			||||||
 | 
					www.foobar.foobar	FALSE	/	TRUE	2147483647	JS_ACCESSIBLE_COOKIE	JS_ACCESSIBLE_COOKIE_VALUE
 | 
				
			||||||
@@ -1141,6 +1141,8 @@ class YoutubeDLHTTPSHandler(compat_urllib_request.HTTPSHandler):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class YoutubeDLCookieJar(compat_cookiejar.MozillaCookieJar):
 | 
					class YoutubeDLCookieJar(compat_cookiejar.MozillaCookieJar):
 | 
				
			||||||
 | 
					    _HTTPONLY_PREFIX = '#HttpOnly_'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def save(self, filename=None, ignore_discard=False, ignore_expires=False):
 | 
					    def save(self, filename=None, ignore_discard=False, ignore_expires=False):
 | 
				
			||||||
        # Store session cookies with `expires` set to 0 instead of an empty
 | 
					        # Store session cookies with `expires` set to 0 instead of an empty
 | 
				
			||||||
        # string
 | 
					        # string
 | 
				
			||||||
@@ -1150,7 +1152,21 @@ class YoutubeDLCookieJar(compat_cookiejar.MozillaCookieJar):
 | 
				
			|||||||
        compat_cookiejar.MozillaCookieJar.save(self, filename, ignore_discard, ignore_expires)
 | 
					        compat_cookiejar.MozillaCookieJar.save(self, filename, ignore_discard, ignore_expires)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def load(self, filename=None, ignore_discard=False, ignore_expires=False):
 | 
					    def load(self, filename=None, ignore_discard=False, ignore_expires=False):
 | 
				
			||||||
        compat_cookiejar.MozillaCookieJar.load(self, filename, ignore_discard, ignore_expires)
 | 
					        """Load cookies from a file."""
 | 
				
			||||||
 | 
					        if filename is None:
 | 
				
			||||||
 | 
					            if self.filename is not None:
 | 
				
			||||||
 | 
					                filename = self.filename
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                raise ValueError(compat_cookiejar.MISSING_FILENAME_TEXT)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        cf = io.StringIO()
 | 
				
			||||||
 | 
					        with open(filename) as f:
 | 
				
			||||||
 | 
					            for line in f:
 | 
				
			||||||
 | 
					                if line.startswith(self._HTTPONLY_PREFIX):
 | 
				
			||||||
 | 
					                    line = line[len(self._HTTPONLY_PREFIX):]
 | 
				
			||||||
 | 
					                cf.write(compat_str(line))
 | 
				
			||||||
 | 
					        cf.seek(0)
 | 
				
			||||||
 | 
					        self._really_load(cf, filename, ignore_discard, ignore_expires)
 | 
				
			||||||
        # Session cookies are denoted by either `expires` field set to
 | 
					        # Session cookies are denoted by either `expires` field set to
 | 
				
			||||||
        # an empty string or 0. MozillaCookieJar only recognizes the former
 | 
					        # an empty string or 0. MozillaCookieJar only recognizes the former
 | 
				
			||||||
        # (see [1]). So we need force the latter to be recognized as session
 | 
					        # (see [1]). So we need force the latter to be recognized as session
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user