[mastodon] cache apps on logging in

This commit is contained in:
Lauren Liberda 2021-05-04 01:07:29 +02:00
parent 8dee2b0f85
commit 6adb5ea838

View file

@ -149,6 +149,8 @@ class MastodonSHIE(SelfhostedInfoExtractor):
'Invalid login format - must be in format [username or email]@[instance]') 'Invalid login format - must be in format [username or email]@[instance]')
username, instance = mobj.group('username', 'instance') username, instance = mobj.group('username', 'instance')
app_info = self._downloader.cache.load('mastodon-apps', instance)
if not app_info:
app_info = self._download_json( app_info = self._download_json(
f'https://{instance}/api/v1/apps', None, 'Creating an app', headers={ f'https://{instance}/api/v1/apps', None, 'Creating an app', headers={
'Content-Type': 'application/json', 'Content-Type': 'application/json',
@ -158,6 +160,7 @@ class MastodonSHIE(SelfhostedInfoExtractor):
'scopes': 'read', 'scopes': 'read',
'website': 'https://haruhi.download', 'website': 'https://haruhi.download',
}).encode('utf-8'))) }).encode('utf-8')))
self._downloader.cache.store('mastodon-apps', instance, app_info)
login_webpage = self._download_webpage( login_webpage = self._download_webpage(
f'https://{instance}/oauth/authorize', None, 'Downloading login page', query={ f'https://{instance}/oauth/authorize', None, 'Downloading login page', query={
@ -176,11 +179,15 @@ class MastodonSHIE(SelfhostedInfoExtractor):
login_form = self._hidden_inputs(login_webpage) login_form = self._hidden_inputs(login_webpage)
login_form['user[email]'] = username login_form['user[email]'] = username
login_form['user[password]'] = password login_form['user[password]'] = password
login_req = self._download_webpage( login_req, urlh = self._download_webpage_handle(
f'https://{instance}/auth/sign_in', None, 'Sending login details', f'https://{instance}/auth/sign_in', None, 'Sending login details',
headers={ headers={
'Content-Type': 'application/x-www-form-urlencoded', 'Content-Type': 'application/x-www-form-urlencoded',
}, data=bytes(urlencode(login_form).encode('utf-8'))) }, data=bytes(urlencode(login_form).encode('utf-8')))
# cached apps may already be authorized
if '/oauth/authorize/native' in urlh.url:
oauth_token = parse_qs(urlparse(urlh.url).query)['code'][0]
else:
auth_form = self._hidden_inputs( auth_form = self._hidden_inputs(
self._search_regex( self._search_regex(
r'(?s)(<form\b[^>]+>.+?>Authorize</.+?</form>)', r'(?s)(<form\b[^>]+>.+?>Authorize</.+?</form>)',