From 8c2d740997f5bfc0f8d012c85e96faea764f6c94 Mon Sep 17 00:00:00 2001 From: bashonly Date: Mon, 26 May 2025 18:28:00 -0500 Subject: [PATCH] handle invalidated (not expired) refresh tokens Authored by: bashonly --- yt_dlp/extractor/weverse.py | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/yt_dlp/extractor/weverse.py b/yt_dlp/extractor/weverse.py index b8fb1b2c3a..ff62b38696 100644 --- a/yt_dlp/extractor/weverse.py +++ b/yt_dlp/extractor/weverse.py @@ -109,13 +109,24 @@ class WeverseBaseIE(InfoExtractor): if self._is_logged_in: headers['Authorization'] = f'Bearer {self._oauth_tokens[self._ACCESS_TOKEN_KEY]}' - response = self._download_json( - f'{self._ACCOUNT_API_BASE}/api/v1/token/refresh', None, - 'Refreshing access token', 'Unable to refresh access token', - headers={**self._oauth_headers, **headers}, - data=json.dumps({ - 'refreshToken': self._oauth_tokens[self._REFRESH_TOKEN_KEY], - }, separators=(',', ':')).encode()) + try: + response = self._download_json( + f'{self._ACCOUNT_API_BASE}/api/v1/token/refresh', None, + 'Refreshing access token', 'Unable to refresh access token', + headers={**self._oauth_headers, **headers}, + data=json.dumps({ + 'refreshToken': self._oauth_tokens[self._REFRESH_TOKEN_KEY], + }, separators=(',', ':')).encode()) + except ExtractorError as e: + if isinstance(e.cause, HTTPError) and e.cause.status == 401: + self._oauth_tokens.clear() + if self._oauth_cache_key == 'cookies': + self.cookiejar.clear(domain='.weverse.io', path='/', name=self._ACCESS_TOKEN_KEY) + self.cookiejar.clear(domain='.weverse.io', path='/', name=self._REFRESH_TOKEN_KEY) + else: + self.cache.store(self._NETRC_MACHINE, self._oauth_cache_key, self._oauth_tokens) + self._report_login_error('expired_refresh_token') + raise self._oauth_tokens.update(traverse_obj(response, { self._ACCESS_TOKEN_KEY: ('accessToken', {str}, {require('access token')}),