8000 Add support for impersonation tokens API · python-gitlab/python-gitlab@8fec612 · GitHub
[go: up one dir, main page]

Skip to content

Commit 8fec612

Browse files
author
Gauvain Pocentek
committed
Add support for impersonation tokens API
Closes #363
1 parent 700e84f commit 8fec612

File tree

4 files changed

+80
-1
lines changed

4 files changed

+80
-1
lines changed

docs/gl_objects/users.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,3 +115,22 @@
115115
# or
116116
user.customeattributes.delete(attr_key)
117117
# end ca delete
118+
119+
# it list
120+
i_t = user.impersonationtokens.list(state='active')
121+
i_t = user.impersonationtokens.list(state='inactive')
122+
# end it list
123+
124+
# it get
125+
i_t = user.impersonationtokens.get(i_t_id)
126+
# end it get
127+
128+
# it create
129+
i_t = user.impersonationtokens.create({'name': 'token1', 'scopes': ['api']})
130+
# use the token to create a new gitlab connection
131+
user_gl = gitlab.Gitlab(gitlab_url, private_token=i_t.token)
132+
# end it create
133+
134+
# it delete
135+
i_t.delete()
136+
# end it delete

docs/gl_objects/users.rst

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,42 @@ Delete a custom attribute for a user:
106106
:start-after: # ca list
107107
:end-before: # end ca list
108108

109+
User impersonation tokens
110+
=========================
111+
112+
References
113+
----------
114+
115+
* v4 API:
116+
117+
+ :class:`gitlab.v4.objects.UserImpersonationToken`
118+
+ :class:`gitlab.v4.objects.UserImpersonationTokenManager`
119+
+ :attr:`gitlab.v4.objects.User.impersontaiontokens`
120+
121+
List impersonation tokens for a user:
122+
123+
.. literalinclude:: users.py
124+
:start-after: # it list
125+
:end-before: # end it list
126+
127+
Get an impersonation token for a user:
128+
129+
.. literalinclude:: users.py
130+
:start-after: # it get
131+
:end-before: # end it get
132+
133+
Create and use an impersonation token for a user:
134+
135+
.. literalinclude:: users.py
136+
:start-after: # it create
137+
:end-before: # end it create
138+
139+
Revoke (delete) an impersonation token for a user:
140+
141+
.. literalinclude:: users.py
142+
:start-after: # it list
143+
:end-before: # end it list
144+
109145
Current User
110146
============
111147

gitlab/v4/objects.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,18 @@ class UserKeyManager(GetFromListMixin, CreateMixin, DeleteMixin, RESTManager):
175175
_create_attrs = (('title', 'key'), tuple())
176176

177177

178+
class UserImpersonationToken(ObjectDeleteMixin, RESTObject):
179+
pass
180+
181+
182+
class UserImpersonationTokenManager(NoUpdateMixin, RESTManager):
183+
_path = '/users/%(user_id)s/impersonation_tokens'
184+
_obj_cls = UserImpersonationToken
185+
_from_parent_attrs = {'user_id': 'id'}
186+
_create_attrs = (('name', 'scopes'), ('expires_at',))
187+
_list_filters = ('state',)
188+
189+
178190
class UserProject(RESTObject):
179191
pass
180192

@@ -198,6 +210,7 @@ class User(SaveMixin, ObjectDeleteMixin, RESTObject):
198210
('customattributes', 'UserCustomAttributeManager'),
199211
('emails', 'UserEmailManager'),
200212
('gpgkeys', 'UserGPGKeyManager'),
213+
('impersonationtokens', 'UserImpersonationTokenManager'),
201214
('keys', 'UserKeyManager'),
202215
('projects', 'UserProjectManager'),
203216
)

tools/python_test_v4.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,17 @@
145145
attr.delete()
146146
assert(len(new_user.customattributes.list()) == 0)
147147

148+
# impersonation tokens
149+
user_token = new_user.impersonationtokens.create(
150+
{'name': 'token1', 'scopes': ['api', 'read_user']})
151+
l = new_user.impersonationtokens.list(state='active')
152+
assert(len(l) == 1)
153+
user_token.delete()
154+
l = new_user.impersonationtokens.list(state='active')
155+
assert(len(l) == 0)
156+
l = new_user.impersonationtokens.list(state='inactive')
157+
assert(len(l) == 1)
158+
148159
new_user.delete()
149160
foobar_user.delete()
150161
assert(len(gl.users.list()) == 3)
@@ -485,7 +496,7 @@
485496
p_b = admin_project.protectedbranches.create({'name': '*-stable'})
486497
assert(p_b.name == '*-stable')
487498
p_b = admin_project.protectedbranches.get('*-stable')
488-
# master is protected by default
499+
# master is protected by default when a branch has been created
489500
assert(len(admin_project.protectedbranches.list()) == 2)
490501
admin_project.protectedbranches.delete('master')
491502
p_b.delete()

0 commit comments

Comments
 (0)
0