Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: git_cl_oauth2.py

Issue 963953003: OAuth2 support in depot_tools (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: address comments and add retry logic Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 #!/usr/bin/env python
2 # Copyright (c) 2015 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 """OAuth2 related utilities and implementation for git cl commands."""
7
8 import copy
9 import logging
10 import optparse
11 import os
12
13 from third_party.google_api_python_client import apiclient
nodir 2015/03/10 22:39:40 this is still not sorted
sheyang 2015/03/13 20:58:27 Don;t remember the rule to sort 'from...import...'
14 import third_party.oauth2client.client as oa2client
15 from third_party.oauth2client.file import Storage
16 from third_party.oauth2client import tools
17
18
19 REDIRECT_URI = 'urn:ietf:wg:oauth:2.0:oob'
20 CLIENT_ID = ('174799409470-8k3b89iov4racu9jrf7if3k4591voig3'
21 '.apps.googleusercontent.com')
22 CLIENT_SECRET = 'DddcCK1d6_ADwxqGDEGlsisy'
23 SCOPE = 'email'
24
25
26 def _fetch_storage(code_review_server):
27 storage_dir = os.path.expanduser(os.path.join('~', '.git_cl_credentials'))
28 if not os.path.isdir(storage_dir):
29 os.makedirs(storage_dir)
30 storage_path = os.path.join(storage_dir, code_review_server)
31 storage = Storage(storage_path)
32 return storage
33
34
35 def _fetch_creds_from_storage(storage):
36 logging.debug('Fetching OAuth2 credentials from local storage ...')
37 credentials = storage.get()
38 if not credentials or credentials.invalid:
39 return None
40 if not credentials.access_token or credentials.access_token_expired:
41 return None
42 return credentials
43
44
45 def add_oauth2_options(parser):
46 """Add OAuth2-related options."""
47 group = optparse.OptionGroup(parser, "OAuth2 options")
48 group.add_option(
49 '--auth-host-name',
50 default='localhost',
51 help='Host name to use when running a local web server '
52 'to handle redirects during OAuth authorization.'
53 'Default: localhost.'
54 )
55 group.add_option(
56 '--auth-host-port',
57 type=int,
58 action="append",
nodir 2015/03/10 22:39:40 this still uses double quotes
sheyang 2015/03/13 20:58:27 Done.
59 default=[8080, 8090],
60 help='Port to use when running a local web server to handle '
61 'redirects during OAuth authorization. '
62 'Repeat this option to specify a list of values.'
63 'Default: [8080, 8090].'
64 )
65 group.add_option(
66 '--noauth-local-webserver',
67 action='store_true',
68 default=False,
69 help='Run a local web server to handle redirects '
70 'during OAuth authorization.'
71 'Default: False.'
72 )
73 group.add_option(
74 '--no-cache',
75 action='store_true',
76 default=False,
77 help='Get fresh credentials from web server instead of using '
78 'the crendentials stored on a local storage file.'
79 'Default: False.'
80 )
81 parser.add_option_group(group)
82
83
84 def get_oauth2_creds(options, code_review_server):
85 """Get OAuth2 credentials.
86
87 Args:
88 options: Command line options.
89 code_review_server: Code review server name, e.g., codereview.chromium.org.
90 """
91 storage = _fetch_storage(code_review_server)
92 creds = None
93 if not options.no_cache:
94 creds = _fetch_creds_from_storage(storage)
95 if creds is None:
96 logging.debug('Fetching OAuth2 credentials from web server...')
97 flow = oa2client.OAuth2WebServerFlow(
98 client_id=CLIENT_ID,
99 client_secret=CLIENT_SECRET,
100 scope=SCOPE,
101 redirect_uri=REDIRECT_URI)
102 flags = copy.deepcopy(options)
103 flags.logging_level = 'WARNING'
104 creds = tools.run_flow(flow, storage, flags)
105 return creds
OLDNEW
« git_cl.py ('K') | « git_cl.py ('k') | third_party/google_api_python_client/.gitignore » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698