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 |