X Tutup
Skip to content

Commit 782bffe

Browse files
committed
added oauth authentication for client
1 parent d6fa94e commit 782bffe

File tree

1 file changed

+60
-8
lines changed

1 file changed

+60
-8
lines changed

gitlab/__init__.py

Lines changed: 60 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ class Gitlab(object):
6868
api_version (str): Gitlab API version to use (3 or 4)
6969
"""
7070

71-
def __init__(self, url, private_token=None, email=None, password=None,
71+
def __init__(self, url, private_token=None, oauth_token=None, email=None, password=None,
7272
ssl_verify=True, http_username=None, http_password=None,
7373
timeout=None, api_version='3', session=None):
7474

@@ -79,7 +79,8 @@ def __init__(self, url, private_token=None, email=None, password=None,
7979
self.timeout = timeout
8080
#: Headers that will be used in request to GitLab
8181
self.headers = {}
82-
self._set_token(private_token)
82+
self._set_token(private_token, oauth_token)
83+
# self._set_oauth_token(oauth_token)
8384
#: The user email
8485
self.email = email
8586
#: The user password (associated with email)
@@ -180,6 +181,8 @@ def auth(self):
180181
"""
181182
if self.private_token:
182183
self._token_auth()
184+
elif self.oauth_token:
185+
self._oauth_token_auth()
183186
else:
184187
self._credentials_auth()
185188

@@ -218,6 +221,12 @@ def _token_auth(self):
218221
else:
219222
self.user = self._objects.CurrentUserManager(self).get()
220223

224+
def _oauth_token_auth(self):
225+
if self.api_version == '3':
226+
self.user = self._objects.CurrentUser(self)
227+
else:
228+
self.user = self._objects.CurrentUserManager(self).get()
229+
221230
def version(self):
222231
"""Returns the version and revision of the gitlab server.
223232
@@ -287,12 +296,41 @@ def set_token(self, token):
287296
DeprecationWarning)
288297
self._set_token(token)
289298

290-
def _set_token(self, token):
299+
def _set_token(self, token, oauth_token):
300+
"""
301+
Sets the private token for authentication.
302+
Only one of ``token`` and ``oauth_token`` should be provided.
303+
Raises:
304+
GitlabAuthenticationError: When both ``token`` and ``oauth_token``
305+
are provided.
306+
Args:
307+
token (str): A private token.
308+
oauth_token (str): An oauth token.
309+
"""
310+
291311
self.private_token = token if token else None
292-
if token:
312+
self.oauth_token = oauth_token if oauth_token else None
313+
314+
if token is not None and oauth_token is not None:
315+
raise GitlabAuthenticationError("Private and OAuth token both "
316+
"provided: define only one")
317+
318+
if oauth_token:
319+
self.headers.pop('PRIVATE-TOKEN', None)
320+
self.headers['Authorization'] = 'Bearer {}'.format(oauth_token)
321+
elif token:
322+
self.headers.pop('PRIVATE-TOKEN', None)
293323
self.headers["PRIVATE-TOKEN"] = token
294-
elif "PRIVATE-TOKEN" in self.headers:
295-
del self.headers["PRIVATE-TOKEN"]
324+
else:
325+
self.headers.pop('PRIVATE-TOKEN', None)
326+
self.headers.pop('Authorization', None)
327+
328+
def _set_oauth_token(self, oauth_token):
329+
self.oauth_token = oauth_token if oauth_token else None
330+
if oauth_token:
331+
self.headers["ACCESS-TOKEN"] = oauth_token
332+
elif "ACCESS-TOKEN" in self.headers:
333+
del self.headers["ACCESS-TOKEN"]
296334

297335
def set_credentials(self, email, password):
298336
"""Sets the email/login and password for authentication.
@@ -347,10 +385,24 @@ def _raw_get(self, path_, content_type=None, streamed=False, **kwargs):
347385
else:
348386
url = '%s%s' % (self._url, path_)
349387

388+
headers = self._create_headers(content_type)
389+
auth = requests.auth.HTTPBasicAuth(
390+
self.http_username,
391+
self.http_password
392+
)
393+
if headers['Authorization']:
394+
auth = None
395+
350396
opts = self._get_session_opts(content_type)
351397
try:
352-
return self.session.get(url, params=kwargs, stream=streamed,
353-
**opts)
398+
return self.session.get(url,
399+
params=kwargs,
400+
headers=headers,
401+
verify=self.ssl_verify,
402+
timeout=self.timeout,
403+
stream=streamed,
404+
auth=auth)
405+
354406
except Exception as e:
355407
raise GitlabConnectionError(
356408
"Can't connect to GitLab server (%s)" % e)

0 commit comments

Comments
 (0)
X Tutup