| Index: third_party/upload.py
|
| diff --git a/third_party/upload.py b/third_party/upload.py
|
| index a36aa9c8882403fe033e1f87c392616a102e0e40..ca8c7b3db818427bf431b420191a5cc83a1d6bbd 100755
|
| --- a/third_party/upload.py
|
| +++ b/third_party/upload.py
|
| @@ -72,6 +72,10 @@ try:
|
| except:
|
| keyring = None
|
|
|
| +# auth.py is a part of depot_tools.
|
| +# TODO(vadimsh): Merge upload.py into depot_tools
|
| +import auth
|
| +
|
| # The logging verbosity:
|
| # 0: Errors only.
|
| # 1: Status messages.
|
| @@ -618,32 +622,11 @@ group.add_option("-s", "--server", action="store", dest="server",
|
| group.add_option("-e", "--email", action="store", dest="email",
|
| metavar="EMAIL", default=None,
|
| help="The username to use. Will prompt if omitted.")
|
| -group.add_option("-H", "--host", action="store", dest="host",
|
| - metavar="HOST", default=None,
|
| - help="Overrides the Host header sent with all RPCs.")
|
| -group.add_option("--no_cookies", action="store_false",
|
| - dest="save_cookies", default=True,
|
| - help="Do not save authentication cookies to local disk.")
|
| -group.add_option("--oauth2", action="store_true",
|
| - dest="use_oauth2", default=False,
|
| - help="Use OAuth 2.0 instead of a password.")
|
| -group.add_option("--oauth2_port", action="store", type="int",
|
| - dest="oauth2_port", default=DEFAULT_OAUTH2_PORT,
|
| - help=("Port to use to handle OAuth 2.0 redirect. Must be an "
|
| - "integer in the range 1024-49151, defaults to "
|
| - "'%default'."))
|
| -group.add_option("--no_oauth2_webbrowser", action="store_false",
|
| - dest="open_oauth2_local_webbrowser", default=True,
|
| - help="Don't open a browser window to get an access token.")
|
| -group.add_option("--account_type", action="store", dest="account_type",
|
| - metavar="TYPE", default=AUTH_ACCOUNT_TYPE,
|
| - choices=["GOOGLE", "HOSTED"],
|
| - help=("Override the default account type "
|
| - "(defaults to '%default', "
|
| - "valid choices are 'GOOGLE' and 'HOSTED')."))
|
| group.add_option("-j", "--number-parallel-uploads",
|
| dest="num_upload_threads", default=8,
|
| help="Number of uploads to do in parallel.")
|
| +# Authentication
|
| +auth.add_auth_options(parser)
|
| # Issue
|
| group = parser.add_option_group("Issue options")
|
| group.add_option("-t", "--title", action="store", dest="title",
|
| @@ -934,32 +917,28 @@ class OAuth2Creds(object):
|
| open_local_webbrowser=self.open_local_webbrowser)
|
|
|
|
|
| -def GetRpcServer(server, email=None, host_override=None, save_cookies=True,
|
| - account_type=AUTH_ACCOUNT_TYPE, use_oauth2=False,
|
| - oauth2_port=DEFAULT_OAUTH2_PORT,
|
| - open_oauth2_local_webbrowser=True):
|
| +def GetRpcServer(server, auth_config=None, email=None):
|
| """Returns an instance of an AbstractRpcServer.
|
|
|
| Args:
|
| server: String containing the review server URL.
|
| - email: String containing user's email address.
|
| - host_override: If not None, string containing an alternate hostname to use
|
| - in the host header.
|
| - save_cookies: Whether authentication cookies should be saved to disk.
|
| - account_type: Account type for authentication, either 'GOOGLE'
|
| - or 'HOSTED'. Defaults to AUTH_ACCOUNT_TYPE.
|
| - use_oauth2: Boolean indicating whether OAuth 2.0 should be used for
|
| - authentication.
|
| - oauth2_port: Integer, the port where the localhost server receiving the
|
| - redirect is serving. Defaults to DEFAULT_OAUTH2_PORT.
|
| - open_oauth2_local_webbrowser: Boolean, defaults to True. If True and using
|
| - OAuth, this opens a page in the user's browser to obtain a token.
|
| + auth_config: auth.AuthConfig tuple with OAuth2 configuration.
|
| + email: String containing user's email address [deprecated].
|
|
|
| Returns:
|
| A new HttpRpcServer, on which RPC calls can be made.
|
| """
|
| + # If email is given as an empty string or no auth config is passed, then
|
| + # assume we want to make requests that do not need authentication. Bypass
|
| + # authentication by setting the auth_function to None.
|
| + if email == '' or not auth_config:
|
| + return HttpRpcServer(server, None)
|
| +
|
| + if auth_config.use_oauth2:
|
| + raise NotImplementedError('See https://crbug.com/356813')
|
| +
|
| # If this is the dev_appserver, use fake authentication.
|
| - host = (host_override or server).lower()
|
| + host = server.lower()
|
| if re.match(r'(http://)?localhost([:/]|$)', host):
|
| if email is None:
|
| email = "test@example.com"
|
| @@ -967,25 +946,19 @@ def GetRpcServer(server, email=None, host_override=None, save_cookies=True,
|
| server = HttpRpcServer(
|
| server,
|
| lambda: (email, "password"),
|
| - host_override=host_override,
|
| extra_headers={"Cookie":
|
| 'dev_appserver_login="%s:False"' % email},
|
| - save_cookies=save_cookies,
|
| - account_type=account_type)
|
| + save_cookies=auth_config.save_cookies,
|
| + account_type=AUTH_ACCOUNT_TYPE)
|
| # Don't try to talk to ClientLogin.
|
| server.authenticated = True
|
| return server
|
|
|
| - positional_args = [server]
|
| - if use_oauth2:
|
| - positional_args.append(
|
| - OAuth2Creds(server, oauth2_port, open_oauth2_local_webbrowser))
|
| - else:
|
| - positional_args.append(KeyringCreds(server, host, email).GetUserCredentials)
|
| - return HttpRpcServer(*positional_args,
|
| - host_override=host_override,
|
| - save_cookies=save_cookies,
|
| - account_type=account_type)
|
| + return HttpRpcServer(
|
| + server,
|
| + KeyringCreds(server, host, email).GetUserCredentials,
|
| + save_cookies=auth_config.save_cookies,
|
| + account_type=AUTH_ACCOUNT_TYPE)
|
|
|
|
|
| def EncodeMultipartFormData(fields, files):
|
| @@ -2598,16 +2571,9 @@ def RealMain(argv, data=None):
|
| files = vcs.GetBaseFiles(data)
|
| if verbosity >= 1:
|
| print "Upload server:", options.server, "(change with -s/--server)"
|
| - if options.use_oauth2:
|
| - options.save_cookies = False
|
| - rpc_server = GetRpcServer(options.server,
|
| - options.email,
|
| - options.host,
|
| - options.save_cookies,
|
| - options.account_type,
|
| - options.use_oauth2,
|
| - options.oauth2_port,
|
| - options.open_oauth2_local_webbrowser)
|
| +
|
| + auth_config = auth.extract_auth_config_from_options(options)
|
| + rpc_server = GetRpcServer(options.server, auth_config, options.email)
|
| form_fields = []
|
|
|
| repo_guid = vcs.GetGUID()
|
|
|