| Index: auth.py
|
| diff --git a/auth.py b/auth.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..97520deca3cdf4f47300fa694194a7ae2dc2b031
|
| --- /dev/null
|
| +++ b/auth.py
|
| @@ -0,0 +1,99 @@
|
| +# Copyright (c) 2015 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +"""Authentication related functions."""
|
| +
|
| +import collections
|
| +import optparse
|
| +
|
| +
|
| +# Authentication configuration extracted from command line options.
|
| +# See doc string for 'make_auth_config' for meaning of fields.
|
| +AuthConfig = collections.namedtuple('AuthConfig', [
|
| + 'use_oauth2', # deprecated, will be always True
|
| + 'save_cookies', # deprecated, will be removed
|
| + 'use_local_webserver',
|
| + 'webserver_port',
|
| +])
|
| +
|
| +
|
| +def make_auth_config(
|
| + use_oauth2=None,
|
| + save_cookies=None,
|
| + use_local_webserver=None,
|
| + webserver_port=None):
|
| + """Returns new instance of AuthConfig.
|
| +
|
| + If some config option is None, it will be set to a reasonable default value.
|
| + This function also acts as an authoritative place for default values of
|
| + corresponding command line options.
|
| + """
|
| + default = lambda val, d: val if val is not None else d
|
| + return AuthConfig(
|
| + default(use_oauth2, False),
|
| + default(save_cookies, True),
|
| + default(use_local_webserver, True),
|
| + default(webserver_port, 8090))
|
| +
|
| +
|
| +def add_auth_options(parser):
|
| + """Appends OAuth related options to OptionParser."""
|
| + default_config = make_auth_config()
|
| + parser.auth_group = optparse.OptionGroup(parser, 'Auth options')
|
| + parser.auth_group.add_option(
|
| + '--oauth2',
|
| + action='store_true',
|
| + dest='use_oauth2',
|
| + default=default_config.use_oauth2,
|
| + help='Use OAuth 2.0 instead of a password.')
|
| + parser.auth_group.add_option(
|
| + '--no-oauth2',
|
| + action='store_false',
|
| + dest='use_oauth2',
|
| + default=default_config.use_oauth2,
|
| + help='Use password instead of OAuth 2.0.')
|
| + parser.auth_group.add_option(
|
| + '--no-cookies',
|
| + action='store_false',
|
| + dest='save_cookies',
|
| + default=default_config.save_cookies,
|
| + help='Do not save authentication cookies to local disk.')
|
| + parser.auth_group.add_option(
|
| + '--auth-no-local-webserver',
|
| + action='store_false',
|
| + dest='use_local_webserver',
|
| + default=default_config.use_local_webserver,
|
| + help='Do not run a local web server when performing OAuth2 login flow.')
|
| + parser.auth_group.add_option(
|
| + '--auth-host-port',
|
| + type=int,
|
| + default=default_config.webserver_port,
|
| + help='Port a local web server should listen on. Used only if '
|
| + '--auth-no-local-webserver is not set. [default: %default]')
|
| + parser.add_option_group(parser.auth_group)
|
| +
|
| +
|
| +def extract_auth_config_from_options(options):
|
| + """Given OptionParser parsed options, extracts AuthConfig from it.
|
| +
|
| + OptionParser should be populated with auth options by 'add_auth_options'.
|
| + """
|
| + return make_auth_config(
|
| + use_oauth2=options.use_oauth2,
|
| + save_cookies=False if options.use_oauth2 else options.save_cookies,
|
| + use_local_webserver=options.use_local_webserver,
|
| + webserver_port=options.auth_host_port)
|
| +
|
| +
|
| +def auth_config_to_command_options(auth_config):
|
| + """AuthConfig -> list of strings with command line options."""
|
| + if not auth_config:
|
| + return []
|
| + opts = ['--oauth2' if auth_config.use_oauth2 else '--no-oauth2']
|
| + if not auth_config.save_cookies:
|
| + opts.append('--no-cookies')
|
| + if not auth_config.use_local_webserver:
|
| + opts.append('--auth-no-local-webserver')
|
| + opts.extend(['--auth-host-port', str(auth_config.webserver_port)])
|
| + return opts
|
|
|