Compare commits

...

3 Commits

Author SHA1 Message Date
bashonly
2d285b543e
Apply suggestions from code review
Co-authored-by: sepro <sepro@sepr0.com>
2025-05-29 15:33:21 +00:00
bashonly
8c2d740997
handle invalidated (not expired) refresh tokens
Authored by: bashonly
2025-05-26 18:28:00 -05:00
bashonly
dc1fd5cd0b
inline _CLIENT_ID
Authored by: bashonly
2025-05-26 16:50:33 -05:00

View File

@ -31,7 +31,6 @@ from ..utils.traversal import require, traverse_obj
class WeverseBaseIE(InfoExtractor):
_NETRC_MACHINE = 'weverse'
_ACCOUNT_API_BASE = 'https://accountapi.weverse.io'
_CLIENT_ID = 'weverse'
_CLIENT_PLATFORM = 'WEB'
_SIGNING_KEY = b'1b9cb6378d959b45714bec49971ade22e6e24e42'
_ACCESS_TOKEN_KEY = 'we2_access_token'
@ -69,7 +68,7 @@ class WeverseBaseIE(InfoExtractor):
return {
**self._API_HEADERS,
'X-ACC-APP-SECRET': '5419526f1c624b38b10787e5c10b2a7a',
'X-ACC-SERVICE-ID': self._CLIENT_ID,
'X-ACC-SERVICE-ID': 'weverse',
'X-ACC-TRACE-ID': str(uuid.uuid4()),
}
@ -110,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')}),
@ -196,7 +206,7 @@ class WeverseBaseIE(InfoExtractor):
'platform': self._CLIENT_PLATFORM,
'wpf': 'pc',
})
for retry in (False, True):
for is_retry in (False, True):
wmsgpad = int(time.time() * 1000)
wmd = base64.b64encode(hmac.HMAC(
self._SIGNING_KEY, f'{api_path[:255]}{wmsgpad}'.encode(),
@ -215,7 +225,7 @@ class WeverseBaseIE(InfoExtractor):
'wmd': wmd,
})
except ExtractorError as e:
if retry or not isinstance(e.cause, HTTPError):
if is_retry or not isinstance(e.cause, HTTPError):
raise
elif self._is_logged_in and e.cause.status == 401:
self._refresh_access_token()