| Index: third_party/gsutil/oauth2_plugin/oauth2_helper.py | 
| diff --git a/third_party/gsutil/oauth2_plugin/oauth2_helper.py b/third_party/gsutil/oauth2_plugin/oauth2_helper.py | 
| deleted file mode 100644 | 
| index 585b50403351ad785a902fa91bf54e0474f5e68a..0000000000000000000000000000000000000000 | 
| --- a/third_party/gsutil/oauth2_plugin/oauth2_helper.py | 
| +++ /dev/null | 
| @@ -1,103 +0,0 @@ | 
| -# Copyright 2011 Google Inc. All Rights Reserved. | 
| -# | 
| -# Licensed under the Apache License, Version 2.0 (the "License"); | 
| -# you may not use this file except in compliance with the License. | 
| -# You may obtain a copy of the License at | 
| -# | 
| -#     http://www.apache.org/licenses/LICENSE-2.0 | 
| -# | 
| -# Unless required by applicable law or agreed to in writing, software | 
| -# distributed under the License is distributed on an "AS IS" BASIS, | 
| -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
| -# See the License for the specific language governing permissions and | 
| -# limitations under the License. | 
| - | 
| -"""Helper routines to facilitate use of oauth2_client in gsutil.""" | 
| - | 
| -import sys | 
| -import time | 
| -import webbrowser | 
| - | 
| -import oauth2_client | 
| - | 
| -GSUTIL_CLIENT_ID = '909320924072.apps.googleusercontent.com' | 
| -# Google OAuth2 clients always have a secret, even if the client is an installed | 
| -# application/utility such as gsutil.  Of course, in such cases the "secret" is | 
| -# actually publicly known; security depends entirly on the secrecy of refresh | 
| -# tokens, which effectively become bearer tokens. | 
| -GSUTIL_CLIENT_NOTSOSECRET = 'p3RlpR10xMFh9ZXBS/ZNLYUu' | 
| - | 
| -GOOGLE_OAUTH2_PROVIDER_LABEL = 'Google' | 
| -GOOGLE_OAUTH2_PROVIDER_AUTHORIZATION_URI = ( | 
| -    'https://accounts.google.com/o/oauth2/auth') | 
| -GOOGLE_OAUTH2_PROVIDER_TOKEN_URI = ( | 
| -    'https://accounts.google.com/o/oauth2/token') | 
| - | 
| -OOB_REDIRECT_URI = 'urn:ietf:wg:oauth:2.0:oob' | 
| - | 
| -def OAuth2ClientFromBotoConfig(config): | 
| -  token_cache = None | 
| -  token_cache_type = config.get('OAuth2', 'token_cache', 'file_system') | 
| - | 
| -  if token_cache_type == 'file_system': | 
| -    if config.has_option('OAuth2', 'token_cache_path_pattern'): | 
| -      token_cache = oauth2_client.FileSystemTokenCache( | 
| -          path_pattern=config.get('OAuth2', 'token_cache_path_pattern')) | 
| -    else: | 
| -      token_cache = oauth2_client.FileSystemTokenCache() | 
| -  elif token_cache_type == 'in_memory': | 
| -    token_cache = oauth2_client.InMemoryTokenCache() | 
| -  else: | 
| -    raise Exception( | 
| -        "Invalid value for config option OAuth2/token_cache: %s" % | 
| -        token_cache_type) | 
| - | 
| -  proxy = None | 
| -  if (config.has_option('Boto', 'proxy') | 
| -      and config.has_option('Boto', 'proxy_port')): | 
| -    proxy = "%s:%s" % (config.get('Boto', 'proxy'), | 
| -        config.get('Boto', 'proxy_port')) | 
| - | 
| -  provider_label = config.get( | 
| -      'OAuth2', 'provider_label', GOOGLE_OAUTH2_PROVIDER_LABEL) | 
| -  provider_authorization_uri = config.get( | 
| -      'OAuth2', 'provider_authorization_uri', | 
| -      GOOGLE_OAUTH2_PROVIDER_AUTHORIZATION_URI) | 
| -  provider_token_uri = config.get( | 
| -      'OAuth2', 'provider_token_uri', GOOGLE_OAUTH2_PROVIDER_TOKEN_URI) | 
| - | 
| -  client_id = config.get('OAuth2', 'client_id', GSUTIL_CLIENT_ID) | 
| -  client_secret = config.get( | 
| -      'OAuth2', 'client_secret', GSUTIL_CLIENT_NOTSOSECRET) | 
| - | 
| -  return oauth2_client.OAuth2Client( | 
| -      oauth2_client.OAuth2Provider( | 
| -          provider_label, provider_authorization_uri, provider_token_uri), | 
| -      client_id, client_secret, | 
| -      proxy=proxy, access_token_cache=token_cache) | 
| - | 
| -def OAuth2ApprovalFlow(oauth2_client, scopes, launch_browser=False): | 
| -  approval_url = oauth2_client.GetAuthorizationUri(OOB_REDIRECT_URI, scopes) | 
| -  if launch_browser: | 
| -    sys.stdout.write( | 
| -        'Attempting to launch a browser with the OAuth2 approval dialog at ' | 
| -        'URL: %s\n\n' | 
| -        '[Note: due to a Python bug, you may see a spurious error message "object is not\n' | 
| -        'callable [...] in [...] Popen.__del__" which can be ignored.]\n\n' % approval_url) | 
| -  else: | 
| -    sys.stdout.write( | 
| -        'Please navigate your browser to the following URL:\n%s\n\n' % | 
| -        approval_url) | 
| - | 
| -  if (launch_browser and | 
| -      not webbrowser.open(approval_url, new=1, autoraise=True)): | 
| -    sys.stdout.write( | 
| -        'Launching browser appears to have failed; please navigate a browser ' | 
| -        'to the following URL:\n%s\n' % approval_url) | 
| -  code = raw_input('Enter the authorization code: ') | 
| - | 
| -  refresh_token, access_token = oauth2_client.ExchangeAuthorizationCode( | 
| -      code, OOB_REDIRECT_URI, scopes) | 
| - | 
| -  return refresh_token | 
| - | 
|  |