Skip to content

Commit eb4cd36

Browse files
author
Gauvain Pocentek
committed
rework authentication API
1 parent 653843d commit eb4cd36

File tree

1 file changed

+30
-12
lines changed

1 file changed

+30
-12
lines changed

gitlab.py

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -43,30 +43,43 @@ def __init__(self, url, private_token=None, email=None, password=None):
4343
self.email = email
4444
self.password = password
4545

46-
if not self.private_token:
47-
self.authenticate
46+
def auth(self):
47+
r = False
48+
if self.private_token:
49+
r = self.token_auth()
4850

49-
def authenticate(self, email=None, password=None):
50-
self.email = self.email or email
51-
self.password = self.password or password
51+
if not r:
52+
self.credentials_auth()
5253

54+
def credentials_auth(self):
5355
if not self.email or not self.password:
5456
raise GitlabAuthenticationError("Missing email/password")
5557

56-
r = self.rawPost('/session', {'email': email, 'password': password})
58+
r = self.rawPost('/session', {'email': self.email, 'password': self.password})
5759
if r.status_code == 201:
5860
self.user = CurrentUser(self, r.json)
5961
else:
6062
raise GitlabAuthenticationError(r.json['message'])
6163

6264
self.private_token = self.user.private_token
6365

66+
def token_auth(self):
67+
try:
68+
self.user = self.get(CurrentUser)
69+
return True
70+
except:
71+
return False
72+
6473
def setUrl(self, url):
6574
self.url = '%s/api/v3'%url
6675

6776
def setToken(self, token):
6877
self.private_token = token
6978

79+
def setCredentials(self, email, password):
80+
self.email = email
81+
self.password = password
82+
7083
def rawPost(self, path, data):
7184
url = '%s%s'%(self.url, path)
7285
try:
@@ -104,11 +117,14 @@ def list(self, objClass, **kwargs):
104117
else:
105118
raise GitlabGetError('%d: %s'%(r.status_code, r.text))
106119

107-
def get(self, objClass, id, **kwargs):
120+
def get(self, objClass, id=None, **kwargs):
108121
url = objClass.url
109122
if kwargs:
110123
url = objClass.url % kwargs
111-
url = '%s%s/%d?private_token=%s'%(self.url, url, id, self.private_token)
124+
if id != None:
125+
url = '%s%s/%d?private_token=%s'%(self.url, url, id, self.private_token)
126+
else:
127+
url = '%s%s?private_token=%s'%(self.url, url, self.private_token)
112128

113129
try:
114130
r = requests.get(url)
@@ -273,10 +289,10 @@ def delete(self):
273289

274290
return self.gitlab.delete(self)
275291

276-
def __init__(self, gl, data, **kwargs):
292+
def __init__(self, gl, data=None, **kwargs):
277293
self.gitlab = gl
278294

279-
if isinstance(data, int):
295+
if data is None or isinstance(data, int):
280296
data = self.gitlab.get(self.__class__, data, **kwargs)
281297

282298
self.setFromDict(data)
@@ -442,14 +458,16 @@ def Tag(self, id=None):
442458
return self.getListOrObject(ProjectTag, id, project_id=self.id)
443459

444460
if __name__ == '__main__':
445-
# quick "doc"
461+
# Quick "doc"
446462
#
447463
# See https://github.com/gitlabhq/gitlabhq/tree/master/doc/api for the
448464
# source
449465

450-
# register a connection to a gitlab instance, using its URL and a user
466+
# Register a connection to a gitlab instance, using its URL and a user
451467
# private token
452468
gl = Gitlab('http://192.168.123.107:8080', 'JVNSESs8EwWRx5yDxM5q')
469+
# Connect to get the current user (as gl.user)
470+
gl.auth()
453471

454472
# get a list of projects
455473
for p in gl.Project():

0 commit comments

Comments
 (0)