summaryrefslogtreecommitdiff
path: root/gitlab
diff options
context:
space:
mode:
Diffstat (limited to 'gitlab')
-rw-r--r--gitlab/__init__.py26
-rw-r--r--gitlab/cli.py2
-rw-r--r--gitlab/config.py6
-rw-r--r--gitlab/tests/test_gitlab.py17
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)