diff --git a/gerrit_util.py b/gerrit_util.py index f7bd210d3..9b5214660 100644 --- a/gerrit_util.py +++ b/gerrit_util.py @@ -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): diff --git a/tests/git_cl_test.py b/tests/git_cl_test.py index cb20c194c..6df29c6c1 100755 --- a/tests/git_cl_test.py +++ b/tests/git_cl_test.py @@ -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]))