|
|
@ -178,13 +178,13 @@ class YoutubeBaseInfoExtractor(InfoExtractor): |
|
|
|
warn('Unable to extract result entry') |
|
|
|
return False |
|
|
|
|
|
|
|
tfa = try_get(res, lambda x: x[0][0], list) |
|
|
|
if tfa: |
|
|
|
tfa_str = try_get(tfa, lambda x: x[2], compat_str) |
|
|
|
if tfa_str == 'TWO_STEP_VERIFICATION': |
|
|
|
login_challenge = try_get(res, lambda x: x[0][0], list) |
|
|
|
if login_challenge: |
|
|
|
challenge_str = try_get(login_challenge, lambda x: x[2], compat_str) |
|
|
|
if challenge_str == 'TWO_STEP_VERIFICATION': |
|
|
|
# SEND_SUCCESS - TFA code has been successfully sent to phone |
|
|
|
# QUOTA_EXCEEDED - reached the limit of TFA codes |
|
|
|
status = try_get(tfa, lambda x: x[5], compat_str) |
|
|
|
status = try_get(login_challenge, lambda x: x[5], compat_str) |
|
|
|
if status == 'QUOTA_EXCEEDED': |
|
|
|
warn('Exceeded the limit of TFA codes, try later') |
|
|
|
return False |
|
|
@ -228,6 +228,17 @@ class YoutubeBaseInfoExtractor(InfoExtractor): |
|
|
|
|
|
|
|
check_cookie_url = try_get( |
|
|
|
tfa_results, lambda x: x[0][-1][2], compat_str) |
|
|
|
else: |
|
|
|
CHALLENGES = { |
|
|
|
'LOGIN_CHALLENGE': "This device isn't recognized. For your security, Google wants to make sure it's really you.", |
|
|
|
'USERNAME_RECOVERY': 'Please provide additional information to aid in the recovery process.', |
|
|
|
'REAUTH': "There is something unusual about your activity. For your security, Google wants to make sure it's really you.", |
|
|
|
} |
|
|
|
challenge = CHALLENGES.get( |
|
|
|
challenge_str, |
|
|
|
'%s returned error %s.' % (self.IE_NAME, challenge_str)) |
|
|
|
warn('%s\nGo to https://accounts.google.com/, login and solve a challenge.' % challenge) |
|
|
|
return False |
|
|
|
else: |
|
|
|
check_cookie_url = try_get(res, lambda x: x[2], compat_str) |
|
|
|
|
|
|
|