@@ -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