gerrit_util: Support OAuth2 bearer tokens in CookieAuthenticator

Change-Id: I9fd3e2fa9ea16d7f057290e77a81f7009c7c9d91
Reviewed-on: https://chromium-review.googlesource.com/1221826
Reviewed-by: Vadim Shtayura <vadimsh@chromium.org>
Reviewed-by: Andrii Shyshkalov <tandrii@chromium.org>
Commit-Queue: Eric Boren <borenet@chromium.org>
changes/26/1221826/6
Eric Boren 7 years ago committed by Commit Bot
parent f9b4845975
commit 18b4479cee

@ -200,11 +200,13 @@ class CookiesAuthenticator(Authenticator):
continue
domain, xpath, key, value = fields[0], fields[2], fields[5], fields[6]
if xpath == '/' and key == 'o':
login, secret_token = value.split('=', 1)
gitcookies[domain] = (login, secret_token)
if value.startswith('git-'):
login, secret_token = value.split('=', 1)
gitcookies[domain] = (login, secret_token)
else:
gitcookies[domain] = ('', value)
except (IndexError, ValueError, TypeError) as exc:
LOGGER.warning(exc)
return gitcookies
def _get_auth_for_host(self, host):
@ -216,7 +218,10 @@ class CookiesAuthenticator(Authenticator):
def get_auth_header(self, host):
a = self._get_auth_for_host(host)
if a:
return 'Basic %s' % (base64.b64encode('%s:%s' % (a[0], a[2])))
if a[0]:
return 'Basic %s' % (base64.b64encode('%s:%s' % (a[0], a[2])))
else:
return 'Bearer %s' % a[2]
return None
def get_auth_email(self, host):

@ -24,6 +24,7 @@ import metrics
# We have to disable monitoring before importing git_cl.
metrics.DISABLE_METRICS_COLLECTION = True
import gerrit_util
import git_cl
import git_common
import git_footers
@ -2104,6 +2105,18 @@ class TestGitCl(TestCase):
auth={}, skip_auth_check=True)
self.assertIsNone(cl.EnsureAuthenticated(force=False))
def test_gerrit_ensure_authenticated_bearer_token(self):
cl = self._test_gerrit_ensure_authenticated_common(auth={
'chromium.googlesource.com':
('', None, 'secret'),
'chromium-review.googlesource.com':
('', None, 'secret'),
})
self.assertIsNone(cl.EnsureAuthenticated(force=False))
header = gerrit_util.CookiesAuthenticator().get_auth_header(
'chromium.googlesource.com')
self.assertTrue('Bearer' in header)
def test_cmd_set_commit_rietveld(self):
self.mock(git_cl._RietveldChangelistImpl, 'SetFlags',
lambda _, v: self._mocked_call(['SetFlags', v]))

Loading…
Cancel
Save