Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 782bffe

Browse filesBrowse files
committed
added oauth authentication for client
1 parent d6fa94e commit 782bffe
Copy full SHA for 782bffe

File tree

Expand file treeCollapse file tree

1 file changed

+60
-8
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

1 file changed

+60
-8
lines changed
Open diff view settings
Collapse file

‎gitlab/__init__.py‎

Copy file name to clipboardExpand all lines: gitlab/__init__.py
+60-8Lines 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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.