Invalidate integrity and retry when the check fails

This commit is contained in:
DevilXD committed 2022-09-20 20:44:35 +02:00
1 parent 418b2505f6
commit 53d232daa9
2 files changed
+14 -14

No files matched your search

+13 -13
View File
@@ -70,9 +70,8 @@ class _AuthState:
self.access_token: str self.access_token: str
self.client_version: str self.client_version: str
self.integrity_token: str self.integrity_token: str
self._last_request: datetime
self.integrity_expires: datetime self.integrity_expires: datetime
self.integrity_request: datetime
self.integrity_response: datetime
@property @property
def integrity_expired(self) -> bool: def integrity_expired(self) -> bool:
@@ -254,13 +253,12 @@ class _AuthState:
jar.update_cookies(cookie, url) jar.update_cookies(cookie, url)
jar.save(COOKIES_PATH) jar.save(COOKIES_PATH)
if not hasattr(self, "integrity_token") or self.integrity_expired: if not hasattr(self, "integrity_token") or self.integrity_expired:
self.integrity_request = datetime.now(timezone.utc)
async with self._twitch.request( async with self._twitch.request(
"POST", "POST",
"https://gql.twitch.tv/integrity", "https://gql.twitch.tv/integrity",
headers=self.gql_headers(integrity=False) headers=self.gql_headers(integrity=False)
) as response: ) as response:
self.integrity_response = datetime.now(timezone.utc) self._last_request = datetime.now(timezone.utc)
response_json: JsonType = await response.json() response_json: JsonType = await response.json()
self.integrity_token = cast(str, response_json["token"]) self.integrity_token = cast(str, response_json["token"])
# (i = Math.round(.9 * (n.expiration - Date.now()))) < 0 # (i = Math.round(.9 * (n.expiration - Date.now()))) < 0
@@ -303,6 +301,7 @@ class Twitch:
# Session and auth # Session and auth
self._session: aiohttp.ClientSession | None = None self._session: aiohttp.ClientSession | None = None
self._auth_state: _AuthState = _AuthState(self) self._auth_state: _AuthState = _AuthState(self)
self._last_request: datetime = datetime.now(timezone.utc)
# GUI # GUI
self.gui = GUIManager(self) self.gui = GUIManager(self)
# Storing and watching channels # Storing and watching channels
@@ -1053,19 +1052,20 @@ class Twitch:
errors_list = response_json["errors"] errors_list = response_json["errors"]
if ( if (
len(errors_list) == 1 len(errors_list) == 1
and all("message" in error_dict for error_dict in errors_list) and "message" in errors_list[0]
and errors_list[0]["message"] == "failed integrity check" and errors_list[0]["message"] == "failed integrity check"
): ):
# auth_state.invalidate(integrity=True) self.print(
# continue "\nGQL integrity error:\n"
raise MinerException( f"integrity_request={auth_state._last_request.replace(tzinfo=None)!s},\n"
"GQL integrity error: " f"gql_request={self._last_request.replace(tzinfo=None)!s},\n"
f"now={datetime.now(timezone.utc).replace(tzinfo=None)!s}, " f"now={datetime.now(timezone.utc).replace(tzinfo=None)!s},\n"
f"request={auth_state.integrity_request.replace(tzinfo=None)!s}, " f"expires={auth_state.integrity_expires.replace(tzinfo=None)!s}\n"
f"response={auth_state.integrity_response.replace(tzinfo=None)!s}, "
f"expires={auth_state.integrity_expires.replace(tzinfo=None)!s}"
) )
auth_state.invalidate(integrity=True)
continue
raise MinerException(f"GQL error: {errors_list}") raise MinerException(f"GQL error: {errors_list}")
self._last_request = datetime.now(timezone.utc)
return response_json return response_json
async def fetch_campaign( async def fetch_campaign(
+1 -1
View File
@@ -1 +1 @@
__version__ = "13.dev.4" __version__ = "13.dev.5"