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

Side by Side Diff: oauth2.py

Issue 963953003: OAuth2 support in depot_tools (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: restore git_cl Created 5 years, 8 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
« no previous file with comments | « no previous file | third_party/google_api_python_client/.gitignore » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(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 """OAuth2 related utilities and implementation for git cl commands."""
6
7 import copy
8 import logging
9 import optparse
10 import os
11
12 from third_party.oauth2client import tools
13 from third_party.oauth2client.file import Storage
14 import third_party.oauth2client.client as oa2client
15
16
17 REDIRECT_URI = 'urn:ietf:wg:oauth:2.0:oob'
18 CLIENT_ID = ('174799409470-8k3b89iov4racu9jrf7if3k4591voig3'
19 '.apps.googleusercontent.com')
20 CLIENT_SECRET = 'DddcCK1d6_ADwxqGDEGlsisy'
21 SCOPE = 'email'
22
23
24 def _fetch_storage(code_review_server):
25 storage_dir = os.path.expanduser(os.path.join('~', '.git_cl_credentials'))
26 if not os.path.isdir(storage_dir):
27 os.makedirs(storage_dir)
28 storage_path = os.path.join(storage_dir, code_review_server)
29 storage = Storage(storage_path)
30 return storage
31
32
33 def _fetch_creds_from_storage(storage):
34 logging.debug('Fetching OAuth2 credentials from local storage ...')
35 credentials = storage.get()
36 if not credentials or credentials.invalid:
37 return None
38 if not credentials.access_token or credentials.access_token_expired:
39 return None
40 return credentials
41
42
43 def add_oauth2_options(parser):
44 """Add OAuth2-related options."""
45 group = optparse.OptionGroup(parser, "OAuth2 options")
46 group.add_option(
47 '--auth-host-name',
48 default='localhost',
49 help='Host name to use when running a local web server '
50 'to handle redirects during OAuth authorization.'
51 'Default: localhost.'
52 )
53 group.add_option(
54 '--auth-host-port',
55 type=int,
56 action='append',
57 default=[8080, 8090],
58 help='Port to use when running a local web server to handle '
59 'redirects during OAuth authorization. '
60 'Repeat this option to specify a list of values.'
61 'Default: [8080, 8090].'
62 )
63 group.add_option(
64 '--noauth-local-webserver',
65 action='store_true',
66 default=False,
67 help='Run a local web server to handle redirects '
68 'during OAuth authorization.'
69 'Default: False.'
70 )
71 group.add_option(
72 '--no-cache',
73 action='store_true',
74 default=False,
75 help='Get fresh credentials from web server instead of using '
76 'the crendentials stored on a local storage file.'
77 'Default: False.'
78 )
79 parser.add_option_group(group)
80
81
82 def get_oauth2_creds(options, code_review_server):
83 """Get OAuth2 credentials.
84
85 Args:
86 options: Command line options.
87 code_review_server: Code review server name, e.g., codereview.chromium.org.
88 """
89 storage = _fetch_storage(code_review_server)
90 creds = None
91 if not options.no_cache:
92 creds = _fetch_creds_from_storage(storage)
93 if creds is None:
94 logging.debug('Fetching OAuth2 credentials from web server...')
95 flow = oa2client.OAuth2WebServerFlow(
96 client_id=CLIENT_ID,
97 client_secret=CLIENT_SECRET,
98 scope=SCOPE,
99 redirect_uri=REDIRECT_URI)
100 flags = copy.deepcopy(options)
101 flags.logging_level = 'WARNING'
102 creds = tools.run_flow(flow, storage, flags)
103 return creds
OLDNEW
« no previous file with comments | « no previous file | third_party/google_api_python_client/.gitignore » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698