]> jfr.im git - yt-dlp.git/commitdiff
[extractor/tubetugraz] Support `--twofactor` (#6424) (#6427)
authorFerdinand Bachmann <redacted>
Sat, 4 Mar 2023 21:58:16 +0000 (22:58 +0100)
committerGitHub <redacted>
Sat, 4 Mar 2023 21:58:16 +0000 (03:28 +0530)
Authored by: Ferdi265
Closes #6424

yt_dlp/extractor/tubetugraz.py

index ebabedc9c4814e0a187fa39a2d75fcf878ceed11..2199fea19abead0b3eb0d3b39503c9525014744f 100644 (file)
@@ -21,17 +21,36 @@ def _perform_login(self, username, password):
         if not urlh:
             return
 
-        urlh = self._request_webpage(
+        content, urlh = self._download_webpage_handle(
             urlh.geturl(), None, fatal=False, headers={'referer': urlh.geturl()},
-            note='logging in', errnote='unable to log in', data=urlencode_postdata({
+            note='logging in', errnote='unable to log in',
+            data=urlencode_postdata({
                 'lang': 'de',
                 '_eventId_proceed': '',
                 'j_username': username,
                 'j_password': password
             }))
+        if not urlh or urlh.geturl() == 'https://tube.tugraz.at/paella/ui/index.html':
+            return
 
-        if urlh and urlh.geturl() != 'https://tube.tugraz.at/paella/ui/index.html':
+        if not self._html_search_regex(
+                r'<p\b[^>]*>(Bitte geben Sie einen OTP-Wert ein:)</p>',
+                content, 'TFA prompt', default=None):
             self.report_warning('unable to login: incorrect password')
+            return
+
+        content, urlh = self._download_webpage_handle(
+            urlh.geturl(), None, fatal=False, headers={'referer': urlh.geturl()},
+            note='logging in with TFA', errnote='unable to log in with TFA',
+            data=urlencode_postdata({
+                'lang': 'de',
+                '_eventId_proceed': '',
+                'j_tokenNumber': self._get_tfa_info(),
+            }))
+        if not urlh or urlh.geturl() == 'https://tube.tugraz.at/paella/ui/index.html':
+            return
+
+        self.report_warning('unable to login: incorrect TFA code')
 
     def _extract_episode(self, episode_info):
         id = episode_info.get('id')