diff options
Diffstat (limited to 'gitlab')
-rw-r--r-- | gitlab/__init__.py | 26 | ||||
-rw-r--r-- | gitlab/cli.py | 2 | ||||
-rw-r--r-- | gitlab/config.py | 6 | ||||
-rw-r--r-- | gitlab/tests/test_gitlab.py | 17 |
4 files changed, 45 insertions, 6 deletions
diff --git a/gitlab/__init__.py b/gitlab/__init__.py index 11734d7..163c599 100644 --- a/gitlab/__init__.py +++ b/gitlab/__init__.py @@ -60,6 +60,7 @@ class Gitlab(object): url (str): The URL of the GitLab server. private_token (str): The user private token oauth_token (str): An oauth token + job_token (str): A CI job token email (str): The user email or login. password (str): The user password (associated with email). ssl_verify (bool|str): Whether SSL certificates should be validated. If @@ -76,6 +77,7 @@ class Gitlab(object): url, private_token=None, oauth_token=None, + job_token=None, email=None, password=None, ssl_verify=True, @@ -107,6 +109,7 @@ class Gitlab(object): self.http_username = http_username self.http_password = http_password self.oauth_token = oauth_token + self.job_token = job_token self._set_auth_info() #: Create a session object for requests @@ -195,6 +198,7 @@ class Gitlab(object): config.url, private_token=config.private_token, oauth_token=config.oauth_token, + job_token=config.job_token, ssl_verify=config.ssl_verify, timeout=config.timeout, http_username=config.http_username, @@ -211,7 +215,7 @@ class Gitlab(object): The `user` attribute will hold a `gitlab.objects.CurrentUser` object on success. """ - if self.private_token or self.oauth_token: + if self.private_token or self.oauth_token or self.job_token: self._token_auth() else: self._credentials_auth() @@ -346,9 +350,16 @@ class Gitlab(object): return url def _set_auth_info(self): - if self.private_token and self.oauth_token: + if ( + sum( + bool(arg) + for arg in [self.private_token, self.oauth_token, self.job_token] + ) + != 1 + ): raise ValueError( - "Only one of private_token or oauth_token should " "be defined" + "Only one of private_token, oauth_token or job_token should " + "be defined" ) if (self.http_username and not self.http_password) or ( not self.http_username and self.http_password @@ -364,12 +375,19 @@ class Gitlab(object): self._http_auth = None if self.private_token: - self.headers["PRIVATE-TOKEN"] = self.private_token self.headers.pop("Authorization", None) + self.headers["PRIVATE-TOKEN"] = self.private_token + self.headers.pop("JOB-TOKEN", None) if self.oauth_token: self.headers["Authorization"] = "Bearer %s" % self.oauth_token self.headers.pop("PRIVATE-TOKEN", None) + self.headers.pop("JOB-TOKEN", None) + + if self.job_token: + self.headers.pop("Authorization", None) + self.headers.pop("PRIVATE-TOKEN", None) + self.headers["JOB-TOKEN"] = self.job_token if self.http_username: self._http_auth = requests.auth.HTTPBasicAuth( diff --git a/gitlab/cli.py b/gitlab/cli.py index 01d8851..0ff2f22 100644 --- a/gitlab/cli.py +++ b/gitlab/cli.py @@ -202,7 +202,7 @@ def main(): try: gl = gitlab.Gitlab.from_config(gitlab_id, config_files) - if gl.private_token or gl.oauth_token: + if gl.private_token or gl.oauth_token or gl.job_token: gl.auth() except Exception as e: die(str(e)) diff --git a/gitlab/config.py b/gitlab/config.py index 0c3cff7..67301a0 100644 --- a/gitlab/config.py +++ b/gitlab/config.py @@ -122,6 +122,12 @@ class GitlabConfigParser(object): except Exception: pass + self.job_token = None + try: + self.job_token = self._config.get(self.gitlab_id, "job_token") + except Exception: + pass + self.http_username = None self.http_password = None try: diff --git a/gitlab/tests/test_gitlab.py b/gitlab/tests/test_gitlab.py index ee1daa3..35cfeda 100644 --- a/gitlab/tests/test_gitlab.py +++ b/gitlab/tests/test_gitlab.py @@ -403,17 +403,31 @@ class TestGitlabAuth(unittest.TestCase): gl = Gitlab("http://localhost", private_token="private_token", api_version="4") self.assertEqual(gl.private_token, "private_token") self.assertEqual(gl.oauth_token, None) + self.assertEqual(gl.job_token, None) self.assertEqual(gl._http_auth, None) - self.assertEqual(gl.headers["PRIVATE-TOKEN"], "private_token") self.assertNotIn("Authorization", gl.headers) + self.assertEqual(gl.headers["PRIVATE-TOKEN"], "private_token") + self.assertNotIn("JOB-TOKEN", gl.headers) def test_oauth_token_auth(self): gl = Gitlab("http://localhost", oauth_token="oauth_token", api_version="4") self.assertEqual(gl.private_token, None) self.assertEqual(gl.oauth_token, "oauth_token") + self.assertEqual(gl.job_token, None) self.assertEqual(gl._http_auth, None) self.assertEqual(gl.headers["Authorization"], "Bearer oauth_token") self.assertNotIn("PRIVATE-TOKEN", gl.headers) + self.assertNotIn("JOB-TOKEN", gl.headers) + + def test_job_token_auth(self): + gl = Gitlab("http://localhost", job_token="CI_JOB_TOKEN", api_version="4") + self.assertEqual(gl.private_token, None) + self.assertEqual(gl.oauth_token, None) + self.assertEqual(gl.job_token, "CI_JOB_TOKEN") + self.assertEqual(gl._http_auth, None) + self.assertNotIn("Authorization", gl.headers) + self.assertNotIn("PRIVATE-TOKEN", gl.headers) + self.assertEqual(gl.headers["JOB-TOKEN"], "CI_JOB_TOKEN") def test_http_auth(self): gl = Gitlab( @@ -425,6 +439,7 @@ class TestGitlabAuth(unittest.TestCase): ) self.assertEqual(gl.private_token, "private_token") self.assertEqual(gl.oauth_token, None) + self.assertEqual(gl.job_token, None) self.assertIsInstance(gl._http_auth, requests.auth.HTTPBasicAuth) self.assertEqual(gl.headers["PRIVATE-TOKEN"], "private_token") self.assertNotIn("Authorization", gl.headers) |