From 2fb6310237302dd249452470fcddeaaf2eb3941d Mon Sep 17 00:00:00 2001 From: Eric Boren Date: Fri, 5 Oct 2018 13:05:03 +0000 Subject: [PATCH] Reland gerrit_util: Support OAuth2 bearer tokens in CookieAuthenticator Bug: skia:8394 Change-Id: I928eaec8459a5905360ce760c6361e4554852b44 Reviewed-on: https://chromium-review.googlesource.com/c/1261796 Reviewed-by: Vadim Shtayura Reviewed-by: Andrii Shyshkalov Commit-Queue: Eric Boren --- gerrit_util.py | 13 +++++++++---- tests/git_cl_test.py | 13 +++++++++++++ 2 files changed, 22 insertions(+), 4 deletions(-) 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]))