OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # coding: utf-8 | 2 # coding: utf-8 |
3 # | 3 # |
4 # Copyright 2007 Google Inc. | 4 # Copyright 2007 Google Inc. |
5 # | 5 # |
6 # Licensed under the Apache License, Version 2.0 (the "License"); | 6 # Licensed under the Apache License, Version 2.0 (the "License"); |
7 # you may not use this file except in compliance with the License. | 7 # you may not use this file except in compliance with the License. |
8 # You may obtain a copy of the License at | 8 # You may obtain a copy of the License at |
9 # | 9 # |
10 # http://www.apache.org/licenses/LICENSE-2.0 | 10 # http://www.apache.org/licenses/LICENSE-2.0 |
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
365 2) We use ClientLogin to obtain an AUTH token for the user | 365 2) We use ClientLogin to obtain an AUTH token for the user |
366 (see http://code.google.com/apis/accounts/AuthForInstalledApps.html). | 366 (see http://code.google.com/apis/accounts/AuthForInstalledApps.html). |
367 3) We pass the auth token to /_ah/login on the server to obtain an | 367 3) We pass the auth token to /_ah/login on the server to obtain an |
368 authentication cookie. If login was successful, it tries to redirect | 368 authentication cookie. If login was successful, it tries to redirect |
369 us to the URL we provided. | 369 us to the URL we provided. |
370 | 370 |
371 If we attempt to access the upload API without first obtaining an | 371 If we attempt to access the upload API without first obtaining an |
372 authentication cookie, it returns a 401 response (or a 302) and | 372 authentication cookie, it returns a 401 response (or a 302) and |
373 directs us to authenticate ourselves with ClientLogin. | 373 directs us to authenticate ourselves with ClientLogin. |
374 """ | 374 """ |
375 INTERNAL_ERROR_MAP = { | |
376 "badauth": "BadAuthentication", | |
377 "cr": "CaptchaRequired", | |
378 "adel": "AccountDeleted", | |
379 "adis": "AccountDisabled", | |
380 "sdis": "ServiceDisabled", | |
381 "ire": "ServiceUnavailable", | |
382 } | |
383 | |
384 for i in range(3): | 375 for i in range(3): |
385 credentials = self.auth_function() | 376 credentials = self.auth_function() |
386 | 377 |
387 # Try external, then internal. | 378 # Try external, then internal. |
388 e = None | 379 e = None |
| 380 error_map = None |
389 try: | 381 try: |
390 auth_token = self._GetAuthToken(credentials[0], credentials[1]) | 382 auth_token = self._GetAuthToken(credentials[0], credentials[1]) |
391 except urllib2.HTTPError: | 383 except urllib2.HTTPError: |
392 try: | 384 try: |
| 385 # Try internal endpoint. |
| 386 error_map = { |
| 387 "badauth": "BadAuthentication", |
| 388 "cr": "CaptchaRequired", |
| 389 "adel": "AccountDeleted", |
| 390 "adis": "AccountDisabled", |
| 391 "sdis": "ServiceDisabled", |
| 392 "ire": "ServiceUnavailable", |
| 393 } |
393 auth_token = self._GetAuthToken(credentials[0], credentials[1], | 394 auth_token = self._GetAuthToken(credentials[0], credentials[1], |
394 internal=True) | 395 internal=True) |
395 except ClientLoginError, exc: | 396 except ClientLoginError, exc: |
396 e = exc | 397 e = exc |
397 if e: | 398 if e: |
398 print >> sys.stderr, '' | 399 print >> sys.stderr, '' |
399 if internal: | 400 if error_map: |
400 e.reason = INTERNAL_ERROR_MAP.get(e.reason, e.reason) | 401 e.reason = error_map.get(e.reason, e.reason) |
401 if e.reason == "BadAuthentication": | 402 if e.reason == "BadAuthentication": |
402 if e.info == "InvalidSecondFactor": | 403 if e.info == "InvalidSecondFactor": |
403 print >> sys.stderr, ( | 404 print >> sys.stderr, ( |
404 "Use an application-specific password instead " | 405 "Use an application-specific password instead " |
405 "of your regular account password.\n" | 406 "of your regular account password.\n" |
406 "See http://www.google.com/" | 407 "See http://www.google.com/" |
407 "support/accounts/bin/answer.py?answer=185833") | 408 "support/accounts/bin/answer.py?answer=185833") |
408 else: | 409 else: |
409 print >> sys.stderr, "Invalid username or password." | 410 print >> sys.stderr, "Invalid username or password." |
410 elif e.reason == "CaptchaRequired": | 411 elif e.reason == "CaptchaRequired": |
(...skipping 2331 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2742 os.environ['LC_ALL'] = 'C' | 2743 os.environ['LC_ALL'] = 'C' |
2743 RealMain(sys.argv) | 2744 RealMain(sys.argv) |
2744 except KeyboardInterrupt: | 2745 except KeyboardInterrupt: |
2745 print | 2746 print |
2746 StatusUpdate("Interrupted.") | 2747 StatusUpdate("Interrupted.") |
2747 sys.exit(1) | 2748 sys.exit(1) |
2748 | 2749 |
2749 | 2750 |
2750 if __name__ == "__main__": | 2751 if __name__ == "__main__": |
2751 main() | 2752 main() |
OLD | NEW |