Переглянути джерело

- fixed cookies.
- now grabs rr_f and PHPSESSID
- issue was that it seems like selenium calls it 'expiry' and requests calls it 'expires'.
- think I patched the write_cookies and load_cookies
- fingers crossed

Alexander 4 роки тому
батько
коміт
579634961d
1 змінених файлів з 31 додано та 21 видалено
  1. 31 21
      src/rival_regions_wrapper/authentication_handler.py

+ 31 - 21
src/rival_regions_wrapper/authentication_handler.py

@@ -144,7 +144,7 @@ class AuthenticationHandler:
                 browser = method_dict[self.login_method](browser, auth_text)
             else:
                 LOGGER.info(
-                        '"%s": Invallid loggin method "%s"',
+                        '"%s": Invalid login method "%s"',
                         self.username, self.login_method
                     )
                 sys.exit()
@@ -152,36 +152,43 @@ class AuthenticationHandler:
             LOGGER.info('"%s": Get PHPSESSID', self.username)
             browser_cookie = browser.get_cookie('PHPSESSID')
             if browser_cookie:
+                expiry = browser_cookie.get('expiry', None)
+                value = browser_cookie.get('value', None)
+                LOGGER.info(f'"value": {value}, "expiry": {expiry}')
                 cookie = self.create_cookie(
                         'PHPSESSID',
-                        browser_cookie.get('expiry', None),
-                        browser_cookie.get('value', None)
+                        expiry,
+                        value
                     )
                 cookies.append(cookie)
             else:
                 raise NoCookieException()
 
-            # TODO: try to get missing 'rr_f'
             # TODO: what's up with 'rival/googles'
-            # TODO: why doesn't PHPSESSID not work?
 
             cookie_names = ['rr_f']
             for cookie_name in cookie_names:
                 browser_cookie = browser.get_cookie(cookie_name)
                 if browser_cookie:
+                    LOGGER.info(f'"{self.username}": Get {cookie_name}')
+                    expiry = browser_cookie.get('expiry', None)
+                    value = browser_cookie.get('value', None)
                     cookies.append(
                         self.create_cookie(
                             cookie_name,
-                            browser_cookie.get('expiry', None),
-                            browser_cookie.get('value', None)
+                            expiry,
+                            value
                         )
                     )
+                    LOGGER.info(f'"value": {value}, "expiry": {expiry}')
                 else:
                     raise NoCookieException()
 
             self.write_cookies(self.username, cookies)
             LOGGER.debug('"%s": closing login tab', self.username)
             browser.close_current_tab()
+        else:
+            LOGGER.info('Cookies found')
 
         self.session = cfscrape.CloudflareScraper()
         for cookie in cookies:
@@ -277,22 +284,24 @@ class AuthenticationHandler:
         return browser
 
     @classmethod
-    def write_cookies(cls, username, cookies):
+    def write_cookies(cls, username, passed_cookies):
         """Write cookie to file"""
         LOGGER.info('Saving cookie for "%s"', username)
         cookies = None
         try:
             with open('{}/cookies.json'.format(DATA_DIR), 'r') as cookies_file:
                 cookies = json.load(cookies_file)
+            if not cookies:
+                raise FileNotFoundError # raise error as if file hadn't been found
         except FileNotFoundError:
-            cookies = {}
-        for cookie_name, cookie in cookies.items():
-            cookies[username] = {
-                    cookie_name: {
-                        'expires': cookie['expires'],
-                        'value': cookie['value'],
-                    }
+            cookies = {username : {}}
+        LOGGER.info(cookies)
+        for cookie in passed_cookies:
+            cookies[username][cookie['name']] = {
+                'expiry': cookie['expires'],
+                'value': cookie['value'],
             }
+
         with open('{}/cookies.json'.format(DATA_DIR), 'w+') as cookies_file:
             json.dump(cookies, cookies_file)
         LOGGER.info('Saved cookie for "%s"', username)
@@ -304,19 +313,20 @@ class AuthenticationHandler:
         cookies = []
         try:
             with open('{}/cookies.json'.format(DATA_DIR), 'r') as cookies_file:
-                for cookie_username, user_cookies in json.load(cookies_file).items():
-                    if cookie_username == user_cookies:
+                cookies_data = json.load(cookies_file)
+                for cookie_username, user_cookies in cookies_data.items():
+                    if cookie_username == username:
                         LOGGER.info('"%s": Found cookies', username)
                         for cookie_name, cookie in user_cookies.items():
                             expires = datetime.fromtimestamp(
-                                    int(cookie['expires'])
+                                    int(cookie['expiry'])
                                 )
                             if datetime.now() >= expires:
                                 LOGGER.info('"%s": Cookie is expired', username)
                                 return None
                             cookies.append(cls.create_cookie(
                                 cookie_name,
-                                cookie['expires'],
+                                cookie['expiry'],
                                 cookie['value'],
                             ))
                         return cookies
@@ -340,14 +350,14 @@ class AuthenticationHandler:
         LOGGER.info('Removed cookie for "%s"', username)
 
     @staticmethod
-    def create_cookie(name, expires, value):
+    def create_cookie(name, expiry, value):
         """Create cookie"""
         return {
             'domain': 'rivalregions.com',
             'name': name,
             'path': '/',
             'secure': False,
-            'expires': expires,
+            'expires': expiry,
             'value': value,
         }