OLD | NEW |
(Empty) | |
| 1 # Copyright (c) 2015 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. |
| 4 |
| 5 """Authentication related functions.""" |
| 6 |
| 7 import collections |
| 8 import optparse |
| 9 |
| 10 |
| 11 # Authentication configuration extracted from command line options. |
| 12 # See doc string for 'make_auth_config' for meaning of fields. |
| 13 AuthConfig = collections.namedtuple('AuthConfig', [ |
| 14 'use_oauth2', # deprecated, will be always True |
| 15 'save_cookies', # deprecated, will be removed |
| 16 'use_local_webserver', |
| 17 'webserver_port', |
| 18 ]) |
| 19 |
| 20 |
| 21 def make_auth_config( |
| 22 use_oauth2=None, |
| 23 save_cookies=None, |
| 24 use_local_webserver=None, |
| 25 webserver_port=None): |
| 26 """Returns new instance of AuthConfig. |
| 27 |
| 28 If some config option is None, it will be set to a reasonable default value. |
| 29 This function also acts as an authoritative place for default values of |
| 30 corresponding command line options. |
| 31 """ |
| 32 default = lambda val, d: val if val is not None else d |
| 33 return AuthConfig( |
| 34 default(use_oauth2, False), |
| 35 default(save_cookies, True), |
| 36 default(use_local_webserver, True), |
| 37 default(webserver_port, 8090)) |
| 38 |
| 39 |
| 40 def add_auth_options(parser): |
| 41 """Appends OAuth related options to OptionParser.""" |
| 42 default_config = make_auth_config() |
| 43 parser.auth_group = optparse.OptionGroup(parser, 'Auth options') |
| 44 parser.auth_group.add_option( |
| 45 '--oauth2', |
| 46 action='store_true', |
| 47 dest='use_oauth2', |
| 48 default=default_config.use_oauth2, |
| 49 help='Use OAuth 2.0 instead of a password.') |
| 50 parser.auth_group.add_option( |
| 51 '--no-oauth2', |
| 52 action='store_false', |
| 53 dest='use_oauth2', |
| 54 default=default_config.use_oauth2, |
| 55 help='Use password instead of OAuth 2.0.') |
| 56 parser.auth_group.add_option( |
| 57 '--no-cookies', |
| 58 action='store_false', |
| 59 dest='save_cookies', |
| 60 default=default_config.save_cookies, |
| 61 help='Do not save authentication cookies to local disk.') |
| 62 parser.auth_group.add_option( |
| 63 '--auth-no-local-webserver', |
| 64 action='store_false', |
| 65 dest='use_local_webserver', |
| 66 default=default_config.use_local_webserver, |
| 67 help='Do not run a local web server when performing OAuth2 login flow.') |
| 68 parser.auth_group.add_option( |
| 69 '--auth-host-port', |
| 70 type=int, |
| 71 default=default_config.webserver_port, |
| 72 help='Port a local web server should listen on. Used only if ' |
| 73 '--auth-no-local-webserver is not set. [default: %default]') |
| 74 parser.add_option_group(parser.auth_group) |
| 75 |
| 76 |
| 77 def extract_auth_config_from_options(options): |
| 78 """Given OptionParser parsed options, extracts AuthConfig from it. |
| 79 |
| 80 OptionParser should be populated with auth options by 'add_auth_options'. |
| 81 """ |
| 82 return make_auth_config( |
| 83 use_oauth2=options.use_oauth2, |
| 84 save_cookies=False if options.use_oauth2 else options.save_cookies, |
| 85 use_local_webserver=options.use_local_webserver, |
| 86 webserver_port=options.auth_host_port) |
| 87 |
| 88 |
| 89 def auth_config_to_command_options(auth_config): |
| 90 """AuthConfig -> list of strings with command line options.""" |
| 91 if not auth_config: |
| 92 return [] |
| 93 opts = ['--oauth2' if auth_config.use_oauth2 else '--no-oauth2'] |
| 94 if not auth_config.save_cookies: |
| 95 opts.append('--no-cookies') |
| 96 if not auth_config.use_local_webserver: |
| 97 opts.append('--auth-no-local-webserver') |
| 98 opts.extend(['--auth-host-port', str(auth_config.webserver_port)]) |
| 99 return opts |
OLD | NEW |