diff --git a/gerrit_util.py b/gerrit_util.py index e8e95610e..c83714529 100644 --- a/gerrit_util.py +++ b/gerrit_util.py @@ -219,11 +219,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): @@ -235,7 +237,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 1672b0016..60fc3c8ba 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 @@ -2071,6 +2072,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]))